Freigeben über


Isolationsstufen von Transaktionen

Microsoft SQL Server 2005 Compact Edition (SQL Server Compact Edition) verwendet standardmäßig die Isolationsstufe READ COMMITTED. Es kann jedoch notwendig werden, dass für eine Anwendung eine andere Isolationsstufe festgelegt wird. Um in Anwendungen verschiedene Isolationsstufen zu implementieren, können Sie Sperren für eine Sitzung benutzerspezifisch anpassen. Dazu legen Sie die Isolationsstufe der Sitzung mit der SET TRANSACTION ISOLATION LEVEL-Anweisung fest.

Wichtig:
READ COMMITTED ist die Standardisolationsstufe in SQL Server Compact Edition. Diese führt jedoch nicht dazu, dass beim Lesen von Daten S-Sperren angewendet werden. Dieses Verhalten ist untypisch für Microsoft SQL Server. Wird READ COMMITTED in SQL Server verwendet, dann wird beim Lesen einer Zeile eine S-Sperre angefordert. Wenn für diese Zeile eine Sperre vorliegt, die einen Konflikt verursacht, muss dieser Vorgang warten. SQL Server Compact Edition fordert keine S-Sperre an, weil automatisch Versionen von Datenseiten verwaltet werden, um sicherzustellen, dass Daten, für die ein Commit ausgeführt wurde, ohne Sperre gelesen werden können. Dies ist wichtig, da SELECT-Vorgänge in SQL Server Compact Edition Daten nicht unbedingt sperren müssen und fast immer erfolgreich ausgeführt werden können. Im Gegensatz zu SQL Server warten SELECT-Vorgänge nicht ab, ob für Daten eine X-Sperre vorliegt. Für den SELECT-Vorgang ist immer noch eine Sch-S-Sperre erforderlich. Dieser Vorgang schlägt nur dann fehl, wenn die Tabelle geändert wird, weil eine Sch-X-Sperre vorhanden ist, die einen Konflikt verursacht.

Wenn die Isolationsstufe angegeben wurde, entspricht das Sperrverhalten aller SELECT-Anweisungen in der SQL Server Compact Edition-Sitzung dieser Isolationsstufe. Es bleibt so lange gültig, bis die Sitzung beendet wird oder bis eine andere Isolationsstufe festgelegt wird. Wenn beispielsweise als Isolationsstufe für die Transaktion SERIALIZABLE festgelegt wurde und sichergestellt werden soll, dass von gleichzeitig ausgeführten Transaktionen keine Phantomzeilen in die Employee-Tabelle eingefügt werden, verwenden Sie folgende SQL-Anweisung:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

BEGIN TRANSACTION;

SELECT EmployeeID FROM Employee;

Sie können die Isolationsstufe für eine Transaktion auch programmgesteuert festlegen. Im folgenden Beispiel wird gezeigt, wie die Isolationsstufe einer Transaktion mit ADO.NET festgelegt wird:

SqlTransaction myTrans;

myTrans = myConnection.BeginTransaction(IsolationLevel.RepeatableRead);

Siehe auch

Konzepte

Grundlegendes zu Sperren
Anzeigen von Sperrinformationen
Sperrhinweise (SQL Server Compact Edition)
Sperrtimeout

Hilfe und Information

Informationsquellen für SQL Server Compact Edition