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) » UltraLite - Datenbankverwaltung » Einführung in UltraLite » UltraLite-Isolationsstufen

 

Nebenwirkungen von Isolationsstufen

Da UltraLite standardmäßig auf Isolationsstufe 0 ausgeführt wird, sind folgende Nebenwirkungen möglich:

  • Bei der Ausführung einer SELECT-Anweisung sind keine Sperrvorgänge erforderlich.

  • Anwendungen können auf nicht festgeschriebene Daten zugreifen (so genannte Dirty Reads). In diesem Szenario kann eine Anwendung auf Zeilen in der Datenbank zugreifen, die nicht festgeschrieben sind und von einer anderen Transaktion noch zurückgesetzt werden können. Phantomzeilen sind möglich (Zeilen, die nach der ursprünglichen Abfrage hinzugefügt werden, sodass bei einer Wiederholung der Abfrage eine andere Ergebnismenge zurückgegeben wird).

    Eine praktische Einführung, in der die Nebenwirkungen von Dirty Reads veranschaulicht werden, finden Sie unter Praktische Einführung: Dirty Reads. Eine praktische Einführung mit einem Beispiel einer Phantomzeile finden Sie unter Praktische Einführung: Phantomzeilen.

  • Anwendungen können nicht wiederholbare Lesevorgänge ausführen. In diesem Szenario liest eine Anwendung eine Zeile aus der Datenbank und führt dann andere Vorgänge aus. Anschließend aktualisiert bzw. löscht eine zweite Anwendung die Zeile und schreibt die Änderung fest. Wenn die erste Anwendung versucht, die ursprüngliche Zeile erneut zu lesen, erhält sie entweder die aktualisierten Informationen oder stellt fest, dass die ursprüngliche Zeile gelöscht wurde.

    Eine praktische Einführung, in der Auswirkungen von nicht wiederholbaren Lesevorgängen gezeigt werden, finden Sie unter Praktische Einführung: Nicht-wiederholbare Lesevorgänge.

Beispiel

Die beiden Verbindungen A und B haben jeweils eine eigene Transaktion.

  1. Wenn die Verbindung A mit der Ergebnismenge einer Abfrage arbeitet, ruft UltraLite eine Kopie der aktuellen Zeile in einen Puffer ab.

    Hinweis

    Durch das Lesen oder Abrufen einer Zeile wird diese Zeile nicht festgeschrieben. Wenn Verbindung A eine Zeile abruft, aber nicht ändert, kann diese Zeile von Verbindung B noch geändert werden.

  2. Wenn A die aktuelle Zeile bearbeitet, wird die Kopie im Puffer geändert. Die Kopie im Puffer wird in die Datenbank zurückgeschrieben, wenn die Verbindung A eine Aktualisierungsmethode aufruft oder die Ergebnismenge schließt.

  3. Es wird eine Schreibsperre für die Zeile gesetzt, damit andere Transaktionen diese Zeile nicht ändern können. Diese Änderung wird erst festgeschrieben, wenn die Verbindung A einen Commit-Vorgang ausführt.

  4. Abhängig von der Änderung stellt die Verbindung B beim Abrufen der aktuellen Zeile möglicherweise Folgendes fest:

    Änderung der Verbindung A Ergebnis1
    Zeile wurde gelöscht. Verbindung B ruft die nächste Zeile in der Ergebnismenge ab.
    Zeile wurde geändert. Verbindung B ruft die letzte Kopie der Zeile ab.

    1 Von Verbindung A und B verwendete Abfragen enthalten keine temporären Tabellen. Temporäre Tabellen können andere Auswirkungen haben.

Siehe auch