Ich habe eine .NET 3.5-Client-App, die einen lang andauernden (5-10 m) gespeicherten Prozess auf dem MS SQL Server 2005 startet. Der gespeicherte Prozess beginnt mit BEGIN TRAN
und endet mit COMMIT TRAN
.
Wenn ich den Plug auf der Workstation ziehe, was passiert mit der gespeicherten Prozedur, wird sie beendet? Beendet es unter allen Umständen? Oder führt der Verlust der Konnektivität mit der Arbeitsstation dazu, dass die Datenbank den gespeicherten Prozess abbricht?
BEARBEITEN: Die Arbeitsstation und der SQL Server sind in verschiedenen Feldern.
Der Verlust der Leistung der Workstation führt nicht unbedingt zum Abbruch des SP, aber es kann sehr wohl dazu führen, dass die Transaktion rückgängig gemacht wird.
Ich sage "könnte", weil es genau darauf ankommt, wann der Klient seine Macht verliert. Wenn eine Netzwerkverbindung in ein so genanntes "schwarzes Loch" verloren geht, wird der Server nicht sofort benachrichtigt, dass überhaupt eine Trennung stattgefunden hat. es muss sich darauf verlassen, dass TCP es schließlich sagt, dass die Verbindung tot ist, nur weil die andere Seite in der X-Zeit auf nichts geantwortet hat.
Dies unterscheidet sich von einer expliziten und "normalen" Trennung der Client-Anwendung; In diesem Fall schließt der Client die Verbindung ggf. explizit, sodass SQL sofort erkennt, dass der Client verschwunden ist.
Da die gespeicherte Prozedur auf dem Server ausgeführt wird, sollte die Prozedur (sofern keine Fehler auftreten) vollständig ausgeführt werden, wenn die BEGIN / END TRANSACTION Teil dieser gespeicherten Prozedur ist. Der Client wird natürlich keine Ergebnisse erhalten, da die Verbindung unterbrochen wurde.
Etwas ähnlich; SQL Server und Verbindungsverlust in der Mitte eines Transaktion
Beachten Sie, dass Verbindungen nicht immer sofort heruntergefahren werden, so dass unerwartetes Verhalten erwartet werden muss.
Tags und Links .net c# sql-server-2005 transactions .net-3.5