Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Datenbanken erstellen » Transaktionen und Isolationsstufen verwenden » Isolationsstufen und Konsistenz

 

Typische Arten von Inkonsistenz

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.

Isolationsstufen und Dirty Reads, nicht-wiederholbare Lesevorgänge und 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.


Cursor-Instabilität