Es gibt drei typische Arten von Inkonsistenz, die bei der Ausführung von gleichzeitigen Transaktionen auftreten können. Diese Liste ist nicht vollständig, da auch andere Inkonsistenzen vorkommen. Die hier beschriebenen drei Arten werden aber im ISO SQL/2003-Standard erwähnt und sind wichtig, da das Verhalten bei niedrigeren Isolationsstufen durch sie festgelegt wird.
Dirty Reads Transaktion A ändert eine Zeile; diese Änderung wird aber nicht festgeschrieben oder zurückgesetzt. Transaktion B liest die geänderte Zeile. Transaktion A ändert entweder die Zeile nochmals, bevor sie festgeschrieben wird, oder setzt die Änderung zurück. In beiden Fällen hat Transaktion B die Zeile in einem Status gesehen, der niemals festgeschrieben wurde.
Weitere Hinweise zu Dirty Reads finden Sie unter Praktische Einführung: Dirty Reads.
Nicht-wiederholbare Lesevorgänge Transaktion A liest eine Zeile. Transaktion B ändert oder löscht die Zeile und gibt einen COMMIT-Befehl ein. Wenn Transaktion A danach versucht, dieselbe Zeile wieder zu lesen, wird die Zeile geändert oder gelöscht sein.
Weitere Hinweise zu nicht-wiederholbaren Lesevorgängen finden Sie unter Praktische Einführung: Nicht-wiederholbare Lesevorgänge.
Phantomzeilen Transaktion A liest eine Reihe von Zeilen, die einige Bedingungen erfüllen. Transaktion B führt dann einen INSERT- oder UPDATE-Befehl für eine Zeile aus, die vorher die Bedingungen von A nicht erfüllt hat. Transaktion B schreibt diese Änderungen fest. Diese neu festgeschriebenen Zeilen erfüllen nun die Bedingungen der Transaktion A. Falls Transaktion A den Lesevorgang wiederholt, erhält sie die aktualisierte Menge von Zeilen.
Weitere Hinweise zu Phantomzeilen finden Sie unter Praktische Einführung: Phantomzeilen.
SQL Anywhere erlaubt Dirty Reads, nicht wiederholbare Lesevorgänge und Phantomzeilen, abhängig von der verwendeten Isolationsstufe. In der folgenden Tabelle wird durch ein X angezeigt, dass das Verhalten für die jeweilige Isolationsstufe erlaubt ist.
Isolationsstufe | Dirty Reads | Nicht-wiederholbare Lesevorgänge | Phantomzeilen |
---|---|---|---|
0-read uncommitted (nicht festgeschriebene Daten lesen) | X | X | X |
readonly-statement-snapshot | X1 | X2 | X3 |
1-read committed (festgeschriebene Daten lesen) | X | X | |
statement-snapshot | X2 | X3 | |
2-repeatable read (wiederholbare Lesevorgänge) | X | ||
3-serializable (serialisierbar) | |||
snapshot |
1 Dirty Reads können bei aktualisierbaren Anweisungen innerhalb einer Transaktion auftreten, wenn die Isolationsstufe, die durch die Option "updatable_statement_isolation" festgelegt wurde, die Dirty Reads nicht verhindert.
2 Nicht wiederholbare Lesevorgänge können bei Anweisungen innerhalb einer Transaktion auftreten, wenn die Isolationsstufe, die durch die Option "updatable_statement_isolation" festgelegt wurde, die nicht wiederholbaren Lesevorgänge nicht verhindert. Nicht wiederholbare Lesevorgänge können vorkommen, weil jede Anweisung einen neuen Snapshot beginnt, sodass eine Anweisung möglicherweise Änderungen erkennt, die eine andere Anweisung nicht erkennt.
3 Phantomzeilen können bei Anweisungen innerhalb einer Transaktion auftreten, wenn die Isolationsstufe, die durch die Option "updatable_statement_isolation" festgelegt wurde, die Phantomzeilen nicht verhindert. Phantomzeilen können vorkommen, weil jede Anweisung einen neuen Snapshot beginnt, sodass eine Anweisung möglicherweise Änderungen erkennt, die eine andere Anweisung nicht erkennt.
Diese Tabelle illustriert zwei Punkte:
Jede Isolationsstufe eliminiert eine der drei typischen Inkonsistenzarten.
Jede Stufe eliminiert die Inkonsistenzarten, die auf allen niedrigeren Stufen eliminiert werden.
Bei Snapshot-Isolationsstufen für Anweisungen können nicht wiederholbare Lesevorgänge und Phantomzeilen innerhalb einer Transaktion vorkommen, nicht aber innerhalb einer einzelnen Anweisung in einer Transaktion.
Die Isolationsstufen haben verschiedene Namen unter ODBC. Diese Namen basieren auf den Namen der Inkonsistenzarten, die sie verhindern. Weitere Hinweise finden Sie unter Der Parameter ValuePtr.
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 |