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

In SQL Anywhere können Sie kontrollieren, inwieweit Vorgänge in einer Transaktion für die Vorgänge in anderen gleichzeitigen Transaktionen sichtbar sind. Dazu setzen Sie eine Datenbankoption namens Isolationsstufe.

In SQL Anywhere können Sie außerdem die Isolationsstufen einzelner Tabellen in einer Abfrage mit entsprechenden Tabellen-Hints kontrollieren. Weitere Hinweise finden Sie unter FROM-Klausel.

SQL Anywhere unterstützt die folgenden Isolationsstufen:

Isolationsstufe Merkmale
0—read uncommitted (nicht festgeschriebene Daten lesen)
  • Lesen der Zeile mit oder ohne Schreibsperre zulässig

  • Es werden keine Lesesperren angewandt.

  • Keine Garantie, dass gleichzeitige Transaktionen nicht die Zeile ändern oder Änderungen an der Zeile zurücksetzen

  • Entspricht den Tabellen-Hints NOLOCK und READUNCOMMITTED.

  • Lässt Dirty Reads, nicht wiederholbare Lesevorgänge und Phantomzeilen zu

1 - read committed (festgeschriebene Daten lesen)
  • Nur Lesen von Zeilen ohne Schreibsperre zulässig.

  • Lesesperre wird nur für die aktuelle Zeile gesetzt und gehalten, aber freigegeben, wenn der Cursor von der Zeile geht

  • Keine Garantie, dass Daten nicht während der Transaktion geändert werden

  • Entspricht dem Tabellen-Hint READCOMMITTED.

  • Verhindert Dirty Reads

  • Lässt nicht wiederholbare Lesevorgänge und Phantomzeilen zu

2 - repeatable read (wiederholbare Lesevorgänge)
  • Nur Lesen von Zeilen ohne Schreibsperre zulässig.

  • Die Lesesperre wird gesetzt, während die einzelnen Zeilen in der Ergebnismenge gelesen werden, und bis zum Ende der Transaktion gehalten.

  • Entspricht dem Tabellen-Hint REAPEATABLEREAD.

  • Verhindert Dirty Reads und nicht wiederholbare Lesevorgänge

  • Lässt Phantomzeilen zu

3 - serializable (serialisierbar)
  • Nur Lesen von Zeile ohne Schreibsperre im Ergebnis zulässig

  • Lesesperren werden gesetzt, wenn der Cursor geöffnet wird, und gehalten, bis die Transaktion endet.

  • Entspricht den Tabellen-Hints HOLDLOCK und SERIALIZABLE.

  • Verhindert Dirty Reads, nicht wiederholbare Lesevorgänge und Phantomzeilen

snapshot1
  • Es werden keine Lesesperren angewandt.

  • Lesen aller Zeilen erlaubt.

  • Ein Datenbank-Snapshot der festgeschriebenen Daten wird angefertigt, wenn die erste Zeile von der Transaktion gelesen oder aktualisiert wird.

statement-snapshot (Anweisungs-Snapshot)1
  • Es werden keine Lesesperren angewandt.

  • Lesen aller Zeilen erlaubt.

  • Ein Datenbank-Snapshot der festgeschriebenen Daten wird angefertigt, wenn die erste Zeile von der Anweisung gelesen wird.

readonly-statement-snapshot (schreibgeschützter Anweisungs-Snapshot)1
  • Es werden keine Lesesperren angewandt.

  • Lesen aller Zeilen erlaubt.

  • Ein Datenbank-Snapshot der festgeschriebenen Daten wird angefertigt, wenn die erste Zeile von einer Nur-Lesen-Anweisung gelesen wird.

  • Verwendet für eine aktualisierbase Anweisung die Isolationsstufe (0, 1, 2 oder 3), die mit der Option "updatable_statement_isolation" festgelegt wurde.

1 Snapshot-Isolation muss für die Datenbank aktiviert sein, indem Sie Option "allow_snapshot_isolation" auf "On" setzen. Weitere Hinweise finden Sie unter Snapshot-Isolation aktivieren.

Die Standardisolationsstufe ist 0, außer für Verbindungen mit Open Client, jConnect und TDS, bei denen die Standardisolationsstufe 1 ist.

Hinweise zu MobilLink-Isolationsstufen finden Sie unter MobiLink-Isolationsstufen.

Auf Sperren basierende Isolationsstufen verhindern manche oder alle Interferenzen. Stufe 3 bedeutet die höchste Isolationsstufe. Niedrigere Stufen erlauben mehr Inkonsistenzen, haben aber normalerweise eine bessere Performance. Die Standardeinstellung ist Stufe 0 (Read Uncommitted).

Die Snapshot-Isolationsstufen verhindern alle Interferenzen zwischen Lese- und Schreibvorgängen. Es kann jedoch zu Interferenzen zwischen Schreibzugriffen kommen. Einige Inkonsistenzen sind möglich und die Performance in Konfliktsituationen ist die gleiche wie auf Isolationsstufe 0. Die Performance, die nicht im Zusammenhang mit Konflikten steht, ist schlechter, da Zeilenversionen gespeichert und verwendet werden müssen.

Hinweise

Alle Isolationsstufen garantieren, dass jede Transaktion vollständig oder überhaupt nicht ausgeführt wird, und dass keine Aktualisierungen verloren gehen.

Die Isolation besteht nur zwischen Transaktionen: Mehrere Cursor innerhalb derselben Transaktion können einander überlagern.


Snapshot-Isolation
Typische Arten von Inkonsistenz
Isolationsstufe festlegen
Isolationsstufe von einer für ODBC aktivierten Anwendung aus einstellen
Isolationsstufe anzeigen