Verschiedene Isolationsstufen können für verschiedene Teile einer einzelnen Transaktion geeignet sein. SQL Anywhere gibt Ihnen die Möglichkeit, die Isolationsstufe Ihrer Datenbank während einer Transaktion zu ändern.
Wenn Sie die Option "isolation_level" während einer Transaktion ändern, wirkt sich die neue Einstellung nur auf die folgenden Elemente aus:
Auf Cursor, die nach der Änderung geöffnet werden.
Auf Anweisungen, die nach der Änderung ausgeführt werden.
Es kann sinnvoll sein, die Isolationsstufe während einer Transaktion zu ändern, um zu steuern, wie viele Sperren Ihre Transaktion setzt. Es kann auch sein, dass eine Transaktion eine umfangreiche Tabelle lesen muss, sich im Detail aber nur mit wenigen Zeilen befasst. Wenn sich eine Inkonsistenz nicht ernsthaft auf Ihre Transaktion auswirkt, sollten Sie eine niedrige Isolationsstufe einstellen, während Sie eine große Tabelle lesen, damit Sie nicht die Arbeit von anderen Benutzern verzögern.
Außerdem empfiehlt es sich in gewissen Fällen, die Isolationsstufe während der Transaktion zu ändern, wenn zum Beispiel nur eine Tabelle oder Gruppe von Tabellen einen serialisierten Zugriff erfordert.
Ein Beispiel, bei dem die Isolationsstufe während einer Transaktion geändert wird, finden Sie unter Praktische Einführung: Phantomzeilen.
Sie können auch die Isolationsstufe (nur Stufen 0 bis 3) mit Tabellen-Hints festlegen, aber dies ist eine erweiterte Funktion, die nur bei Bedarf verwendet werden sollte. Weitere Informationen finden Sie im Abschnitt zum WITH Tabellen_Hint unter FROM-Klausel.
Wenn Sie die Snapshot-Isolation verwenden, können Sie die Isolationsstufe innerhalb einer Transaktion ändern. Sie können dies durchführen, indem Sie die Einstellung der Option "isolation_level" ändern oder indem Sie Tabellen-Hints benutzen, die sich auf die Isolationsstufe in einer Abfrage auswirken. Sie können jederzeit die Stufen statement-snapshot, readonly-statement-snapshot sowie die Isolationsstufen 0 bis 3 verwenden. Sie können die Snapshot-Isolationsstufe jedoch nicht in einer Transaktion benutzen, wenn sie auf einer anderen Isolationsstufe begann als "Snapshot". Eine Transaktion wird durch eine Aktualisierung initialisiert und dauert bis zum nächsten COMMIT oder ROLLBACK an. Falls die erste Aktualisierung auf einer anderen Isolationsstufe als "Snapshot" stattfindet, liefert jede Anweisung, die versucht, die Snapshot-Isolationsstufe zu benutzen, bevor die Transaktion festgeschrieben oder zurückgesetzt wird, den Fehler "-1065 NON_SNAPSHOT_TRANSACTION". Zum Beispiel:
SET OPTION PUBLIC.allow_snapshot_isolation = 'On'; BEGIN TRANSACTION SET OPTION isolation_level = 3; INSERT INTO Departments ( DepartmentID, DepartmentName, DepartmentHeadID ) VALUES( 700, 'Foreign Sales', 129 ); SET TEMPORARY OPTION isolation_level = 'snapshot'; SELECT * FROM Departments; |
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |