Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Transaktionen geben eine Isolationsstufe an, die bestimmt, wie eine Transaktion von anderen Transaktionen isoliert ist. Isolation ist die Trennung von Ressourcen- oder Datenänderungen durch verschiedene Transaktionen. Isolationsstufen werden basierend darauf beschrieben, welche Parallelitätsnebeneffekte (wie z. B. Dirty Reads oder Phantomlesezugriffe) zulässig sind.
Transaktionsisolationsstufen steuern Folgendes:
Ob beim Lesen von Daten Sperren gesetzt werden und welche Art von Sperren angefordert wird.
Wie lange die Lesesperren aufrechterhalten werden.
Ob ein Lesevorgang auf Zeilen zugreift, die von einer anderen Transaktion geändert wurden:
Blockieren, bis die exklusive Sperre auf die Zeile freigegeben wird.
Rufen Sie die festgeschriebene Version der Zeile ab, die zum Zeitpunkt des Starts der Anweisung oder Transaktion vorhanden war.
Lesen Sie die nicht festgeschriebene Datenänderung.
Wählen einer Isolationsstufe
Das Auswählen einer Transaktionsisolationsstufe hat keine Auswirkungen auf die Sperren, die zum Schutz von Datenänderungen eingerichtet werden. Eine Transaktion erhält immer eine exklusive Sperre für alle Daten, die sie ändert. Diese Sperre gilt bis zum Abschluss der Transaktion unabhängig von der Isolationsstufe, die für diese Transaktion festgelegt ist. Bei Lesevorgängen bestimmen Transaktionsisolationsstufen hauptsächlich, wie der Vorgang vor den Auswirkungen anderer Transaktionen geschützt wird.
Eine niedrigere Isolationsstufe erhöht die Möglichkeit, dass viele Benutzer gleichzeitig auf die Daten zugreifen können. Dadurch erhöht sich jedoch die Anzahl von Parallelitätseffekten, z. B. Dirty Reads oder Verlust von Aktualisierungen, die bei Benutzern möglicherweise auftreten. Umgekehrt reduziert eine höhere Isolationsstufe die Arten von Parallelitätseffekten, die bei den Benutzern auftreten können. Sie erfordert jedoch mehr Systemressourcen und erhöht die Wahrscheinlichkeit, dass eine Transaktion eine andere blockiert. So muss bei jeder Auswahl der geeigneten Isolationsstufe eine Abwägung zwischen den Datenintegritätsanforderungen der Anwendungen einerseits und dem mit jeder Isolationsstufe verbundenen Aufwand andererseits erfolgen.
Die höchste Isolationsstufe (Serializable) garantiert, dass eine Transaktion jedes Mal, wenn sie einen Lesevorgang wiederholt, genau dieselben Daten liest. Es wird jedoch eine Sperrstufe verwendet, die sich in Mehrbenutzersystemen auf andere Benutzer auswirken kann. Mit der niedrigsten Isolationsstufe (Read Uncommitted) können Daten abgerufen werden, die von anderen Transaktionen geändert wurden, für die jedoch noch kein Commit ausgeführt wurde. Bei der Isolationsstufe „Read Uncommitted“ können sämtliche denkbaren Parallelitätsnebenwirkungen auftreten. Es erfolgen jedoch weder Lesesperren noch eine Versionsverwaltung, wodurch der Aufwand minimiert wird.
Hinweise
Die folgende Tabelle veranschaulicht, welche Parallelitätsnebeneffekte in den einzelnen Isolationsstufen zulässig sind.
| Isolationsstufe | Dirty Read (unsauberes Lesen) | Nicht wiederholbares Lesen | Phantom |
|---|---|---|---|
| Nicht bestätigte Änderungen lesen | Ja | Ja | Ja |
| Lesebestätigt | Nein | Ja | Ja |
| Wiederholbares Lesen | Nein | Nein | Ja |
| Momentaufnahme | Nein | Nein | Nein |
| Serialisierbar | Nein | Nein | Nein |
Transaktionen müssen mit mindestens der Isolationsstufe „Repeatable Read“ (Wiederholbarer Lesevorgang) ausgeführt werden, um den Verlust von Aktualisierungen zu verhindern, der auftreten kann, wenn zwei Transaktionen dieselbe Zeile abrufen. Die Transaktion aktualisiert dann später die Zeile basierend auf den ursprünglich abgerufenen Werten. Wenn die beiden Transaktionen Zeilen mithilfe einer einzelnen UPDATE-Anweisung aktualisieren und die Aktualisierung nicht auf zuvor abgerufenen Werten basiert, können auf der Standardisolationsstufe Read Committed keine verlorenen Updates auftreten.
Zum Festlegen der Isolationsstufe für eine Transaktion können Sie die setTransactionIsolation-Methode der SQLServerConnection-Klasse verwenden. Diese Methode nimmt einen ganzzahligen Wert als Argument an. Dieser basiert wie im Folgenden dargestellt auf den Verbindungskonstanten:
con.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
Zum Verwenden der neuen Snapshotisolationsstufe von SQL Server können Sie eine der SQLServerConnection-Konstanten verwenden:
con.setTransactionIsolation(SQLServerConnection.TRANSACTION_SNAPSHOT);
oder Sie können Folgendes verwenden:
con.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED + 4094);
Weitere Informationen zu SQL Server-Isolationsstufen finden Sie unter „Isolationsstufen in Datenbank-Engine“ in der SQL Server-Onlinedokumentation.
Siehe auch
Ausführen von Transaktionen mit dem JDBC-Treiber
SET TRANSACTION ISOLATION LEVEL (Transact-SQL)