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

SAP Sybase SQL Anywhere 16.0 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Transaktionen und Isolationsstufen » Praktische Einführung in Isolationsstufen » Praktische Einführung: Einführung in Dirty Reads

 

Lektion 2: Dirty Reads mithilfe der Snapshot-Isolation vermeiden

Die Snapshot-Isolation verhindert Dirty Reads, indem andere Datenbankverbindungen bei Abfragen nur festgeschriebene Daten lesen können. Der Accountant kann die Snapshot-Isolation verwenden, um sicherzustellen, dass seine Abfrage nicht durch nicht festgeschriebene Daten beeinträchtigt werden.

Voraussetzungen

In dieser Lektion wird davon ausgegangen, dass Sie bereits alle vorherigen Lektionen abgeschlossen haben. Siehe Lektion 1: Dirty Read erstellen.

In dieser Lektion wird davon ausgegangen, dass Sie die Rollen und Privilegien haben, die im Abschnitt "Privilegien" am Anfang dieser praktischen Einführung aufgeführt sind: Praktische Einführung: Einführung in Dirty Reads.

 Aufgabe
  1. Führen Sie als Sales Manager die folgende Anweisung aus, um die Snapshot-Isolation für die Datenbank zu aktivieren:

    SET OPTION PUBLIC.allow_snapshot_isolation = 'ON';
  2. Erhöhen Sie als Sales Manager die Preise aller T-Shirts um $0.95:

    1. Führen Sie die folgende Anweisung aus, um den Preis zu aktualisieren:

      UPDATE GROUPO.Products
      SET UnitPrice = UnitPrice + 0.95
      WHERE Name = 'Tee Shirt';
    2. Berechnen Sie den gesamten Einzelhandelswert des Lagerbestandes, indem Sie den neuen T-Shirt-Preis für den Sales Manager verwenden:

      SELECT SUM( Quantity * UnitPrice )
       AS Inventory
         FROM GROUPO.Products;

      Das folgende Ergebnis wird zurückgegeben:

      Inventory
      6687.15
  3. Führen Sie als Accountant die folgenden Anweisungen aus, um den gesamten Einzelhandelswert des Lagerbestandes zu berechnen: Da diese Transaktion die Snapshot-Isolationsstufe verwendet, wird das Ergebnis nur für die Daten berechnet, die in der Datenbank festgeschrieben wurden.

    SET OPTION isolation_level = 'Snapshot';
    SELECT SUM( Quantity * UnitPrice )
     AS Inventory
       FROM GROUPO.Products;

    Das folgende Ergebnis wird zurückgegeben:

    Inventory
    6538.00
  4. Schreiben Sie als "Sales Manager" Ihre Änderungen der Datenbank fest, indem Sie die folgende Anweisung ausführen:

    COMMIT;
  5. Führen Sie als Accountant die folgenden Anweisungen aus, um den aktualisierten Einzelhandelswert des aktuellen Lagerbestandes anzuzeigen:

    COMMIT;
    SELECT SUM( Quantity * UnitPrice )
     AS Inventory
       FROM GROUPO.Products;

    Das folgende Ergebnis wird zurückgegeben:

    Inventory
    6687.15

    Da der Snapshot für die Transaktion des Accountant mit dem ersten Lesevorgang begann, müssen Sie eine COMMIT-Anweisung ausführen, um die Transaktion zu beenden und es dem Accountant zu ermöglichen, die Änderungen zu sehen, die nach dem Beginn der Snapshot-Transaktion für die Daten durchgeführt wurden.

  6. Führen Sie als "Sales Manager" die folgende Anweisung aus, um die Änderungen des T-Shirt-Preises rückgängig zu machen und die SQL Anywhere-Beispieldatenbank wieder in ihren Originalzustand zu versetzen:

    UPDATE GROUPO.Products
    SET UnitPrice = UnitPrice - 0.95
    WHERE Name = 'Tee Shirt';
    COMMIT;

Ergebnisse

Der Accountant hat Dirty Reads erfolgreich vermieden, indem er die Snapshot-Isolation aktiviert hat.

Nächste Schritte

(Optional) Setzen Sie die Beispieldatenbank (demo.db) in ihren ursprünglichen Zustand zurück. Siehe Neuerstellung der Beispieldatenbank (demo.db).