Was passiert, wenn eine Clientverbindung beim Halten einer Sperre unterbrochen wird?

7

Was passiert, wenn ein Client eine Transaktion erstellt, eine Zeile oder Tabelle sperrt und der Clientprozess abstürzt, bevor er die Transaktion zurücksetzen oder festschreiben kann? Was macht SQL Server mit der Transaktion, wenn überhaupt?

  1. Verfügt SQL Server über einen Heartbeat-Mechanismus, um zu erkennen, dass der Socket getötet wurde?
  2. Rollt SQL Server die Transaktion automatisch zurück, wenn festgestellt wird, dass ein Socket getötet wurde? Oder bleibt die Zeilen- / Tabellensperre bestehen (was dazu führt, dass andere Clients blockieren)?

Bitte geben Sie maßgebliche Quellen an, um Ihre Antwort zu sichern.

UPDATE : Der Client-Prozess stürzt ab. Ich spreche nicht von jemandem, der den Befehl KILL aufruft .

Gili
quelle

Antworten:

11

Die Sitzung wird zusammen mit dem angehängten Spid beendet / zurückgesetzt.

/programming/3978227/how-to-kill-or-rollback-active-transaction

https://technet.microsoft.com/en-us/library/ms173730%28v=sql.110%29.aspx

BEARBEITEN:

  1. Ich würde Ihre Protokolle überprüfen, um zu überprüfen, aber im Wesentlichen würde der Socket gewaltsam geschlossen werden.

Es ist kein Datenbankproblem, was ich sehen kann ... aber haben Sie eine Fehlermeldung, die Sie zur Klärung posten können?

Siehe auch Fehler während der Transaktionsverarbeitung

Wenn ein Fehler den erfolgreichen Abschluss einer Transaktion verhindert, setzt SQL Server die Transaktion automatisch zurück und gibt alle von der Transaktion gehaltenen Ressourcen frei. Wenn die Netzwerkverbindung des Clients zu einer Instanz des Datenbankmoduls unterbrochen ist, werden alle ausstehenden Transaktionen für die Verbindung zurückgesetzt, wenn das Netzwerk die Instanz über die Unterbrechung benachrichtigt. Wenn die Clientanwendung ausfällt oder der Clientcomputer ausfällt oder neu gestartet wird, wird auch die Verbindung unterbrochen, und die Instanz des Datenbankmoduls setzt alle ausstehenden Verbindungen zurück, wenn das Netzwerk sie über die Unterbrechung benachrichtigt. Wenn sich der Client von der Anwendung abmeldet, werden alle ausstehenden Transaktionen zurückgesetzt

Hituptony
quelle
2

Sie können dies folgendermaßen testen:

  • Öffnen Sie SSMS, stellen Sie eine Verbindung zum Server / zur Datenbank her, öffnen Sie die neue Abfrage
  • Beginnen Sie mit der Übertragung und fügen Sie einen Wert in eine Tabelle ein
  • Öffnen Sie ein neues SSMS-Fenster und führen Sie select * aus einer Tabelle aus - es sollte blockiert sein.
  • Öffnen Sie den Task-Manager und beenden Sie den ersten SSMS-Prozess
  • Überprüfen Sie die Ergebnisse der Auswahl in einem neuen SSMS-Fenster, ob die Tabelle einen Wert enthält (dies ist nicht der Fall, da die Transaktion zurückgesetzt wurde).

Davon abgesehen habe ich Fälle mit SSRS-Berichten gesehen, in denen der Benutzer seinen Browser schließt, die Auswahlabfrage jedoch stundenlang in der Datenquelle ausgeführt wird.

d -_- b
quelle