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 nicht-wiederholbare Lesevorgänge

 

Lektion 2: Nicht wiederholbare Lesevorgänge mithilfe der Snapshot-Isolation vermeiden

Sie können die Snapshot-Isolation auch verwenden, um das Vermeiden von Blockierungen zu unterstützen. Da Transaktionen, welche die Snapshot-Isolation verwenden, nur festgeschriebene Daten erkennen, wird die Transaktion des "Sales Managers" durch die Transaktion des Accountant nicht blockiert.

Voraussetzungen

In dieser Lektion wird davon ausgegangen, dass Sie bereits alle vorherigen Lektionen abgeschlossen haben. Siehe Lektion 1: Nicht wiederholbaren Lesevorgang 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 nicht-wiederholbare Lesevorgänge.

 Aufgabe
  1. Führen Sie als Accountant die folgenden Anweisungen aus, um die Snapshot-Isolation für die Datenbank zu aktivieren und festzulegen, welche Snapshot-Isolationsstufe benutzt wird:

    SET OPTION PUBLIC.allow_snapshot_isolation = 'On';
    SET TEMPORARY OPTION isolation_level = 'snapshot';
  2. Führen Sie als Accountant die folgende Anweisung aus, um die Preise der Schirmmützen aufzulisten:

    SELECT ID, Name, UnitPrice
    FROM GROUPO.Products
    ORDER BY ID;
    ID Name UnitPrice
    300 Tee Shirt 9.00
    301 Tee Shirt 14.00
    302 Tee Shirt 14.00
    400 Baseball Cap 9.00
    401 Baseball Cap 10.00
    500 Visor 7.00
    501 Visor 7.00
    ... ... ...
  3. Als Sales Manager führen Sie die folgenden Anweisungen aus, um einen neuen Verkaufspreis für die Plastikschirmmütze einzuführen:

    UPDATE GROUPO.Products
    SET UnitPrice = 5.95 WHERE ID = 501;
    COMMIT;
    SELECT ID, Name, UnitPrice FROM GROUPO.Products
    WHERE Name = 'Visor';
  4. Der Accountant führt seine Abfrage erneut aus und sieht die Preisänderung nicht, da die Daten, die zum Zeitpunkt des ersten Lesevorgangs festgeschrieben waren, für die Transaktion benutzt werden.

    SELECT ID, Name, UnitPrice
    FROM GROUPO.Products;
  5. Setzen Sie als Sales Manager den Preis für die Plastik-Schirmmützen wieder auf den Originalpreis zurück:

    UPDATE GROUPO.Products
    SET UnitPrice = 7.00
    WHERE ID = 501;
    COMMIT;

    Der Datenbankserver setzt keine Lesesperren auf die Zeilen in der Tabelle "Products", die der Accountant liest, da der Accountant einen Snapshot der festgeschriebenen Daten sieht, der angefertigt wurde, bevor der Sales Manager Änderungen an der Tabelle "Products" durchgeführt hat.

  6. Der Accountant ist mit der Durchsicht der Preise fertig. Er möchte nicht riskieren, die Datenbank unbeabsichtigt zu ändern, also beendet er seine Transaktion mit einem ROLLBACK-Befehl.

    ROLLBACK;

Ergebnisse

Sie haben erfolgreich versucht, nicht wiederholbare Lesevorgänge durch die Snapshot-Isolation zu vermeiden.