Freigeben über


Sperrtimeout

Wenn von Microsoft SQL Server 2005 Compact Edition (SQL Server Compact Edition) keine Sperre für eine Transaktion auf einer Ressource erteilt werden kann, weil eine andere Transaktion bereits eine widersprüchliche Sperre für diese Ressource besitzt, wird die sperrenanfordernde Transaktion so lange blockiert, bis die andere Transaktion die Sperre wieder aufhebt. Diese Situation kann auch die Folge eines Deadlocks sein. SQL Server Compact Edition verfügt über ein Standard-Sperrtimeout von 2 Sekunden. Außer durch den Zugriff auf Daten (und dem möglichen Timeout) kann vor einer Sperrung nicht geprüft werden, ob eine Ressource gesperrt ist.

Hinweis:
Sie können mithilfe der sys.lock_information-Systemansicht ermitteln, ob eine Sperranforderung blockiert ist, und die Ursache für die Blockierung herausfinden. Weitere Informationen finden Sie unter Anzeigen von Sperrinformationen.

Die LOCK_TIMEOUT-Einstellung ermöglicht es einer Anwendung, einen maximalen Zeitraum festzulegen, den eine Anweisung auf eine blockierte Ressource warten soll. Wartet eine Anweisung länger als von der LOCK_TIMEOUT-Einstellung festgelegt, wird die blockierte Anweisung automatisch abgebrochen, und die Fehlermeldung SSCE_M_LOCKTIMEOUT "Systemtimeout beim Warten auf eine Sperre" wird an die Anwendung zurückgegeben. SQL Server Compact Edition führt jedoch keinen Rollback von Transaktionen aus, die die Anweisung enthalten, oder bricht diese ab. Die Fehlerbehandlung der Anwendung muss in der Lage sein, die Fehlermeldung SSCE_M_LOCKTIMEOUT aufzufangen. Fängt eine Anwendung den Fehler nicht auf, kann der Vorgang fortgesetzt werden, ohne zu wissen, dass eine Anweisung in einer Transaktion abgebrochen wurde. Es können Fehler auftreten, da nachfolgende Anweisungen in der Transaktion von der nicht ausgeführten Anweisung abhängen.

Durch das Implementieren einer Fehlerbehandlung, die die Fehlermeldung SSCE_M_LOCKTIMEOUT auffängt, kann eine Anwendung die Timeoutsituation verarbeiten und Abhilfe schaffen, indem sie z. B. die blockierte Anweisung erneut übermittelt oder einen Rollback der gesamten Transaktion ausführt.

Führen Sie die SET LOCK_TIMEOUT-Syntax wie im folgenden Codebeispiel dargestellt aus, um die aktuelle LOCK_TIMEOUT-Einstellung für eine Sitzung festzulegen:

SET LOCK_TIMEOUT 2000;

Siehe auch

Konzepte

Grundlegendes zu Sperren
Isolationsstufen von Transaktionen
Sperrhinweise (SQL Server Compact Edition)

Hilfe und Information

Informationsquellen für SQL Server Compact Edition