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

SQL Anywhere 12.0.1 (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: Vermeiden von nicht wiederholbaren Lesevorgänge

 Snapshot-Isolation zur Vermeidung von nicht wiederholbaren Lesevorgängen verwenden

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.

  1. Starten Sie Interactive SQL.

  2. Im Fenster Verbinden stellen Sie als "Sales Manager" eine Verbindung mit der SQL Anywhere-Beispieldatenbank her.

    1. Klicken Sie in der Dropdown-Liste Aktion auf Mit einer ODBC-Datenquelle verbinden.

    2. Klicken Sie auf ODBC-Datenquellenname und geben Sie im Feld darunter SQL Anywhere 12 Demo ein.

    3. Klicken Sie, falls erforderlich, auf Erweitert, um die Registerkarte Erweiterte Optionen einzublenden.

    4. Klicken Sie auf die Registerkarte Erweitert und geben Sie Sales Manager in das Feld ConnectionName ein.

    5. Klicken Sie auf Verbinden.

  3. Starten Sie eine zweite Instanz von Interactive SQL.

  4. Im Fenster Verbinden stellen Sie als "Accountant" eine Verbindung mit der SQL Anywhere-Beispieldatenbank her.

    1. Wählen Sie in der Dropdown-Liste Aktion die Option Mit ODBC-Datenquelle verbinden.

    2. Klicken Sie auf ODBC-Datenquellenname und geben Sie im Feld darunter SQL Anywhere 12 Demo ein.

    3. Klicken Sie, falls erforderlich, auf die Schaltfläche Erweitert, um die Registerkarte Erweiterte Optionen einzublenden.

    4. Klicken Sie auf die Registerkarte Erweitert und geben Sie Accountant in das Feld ConnectionName ein.

    5. Klicken Sie auf Verbinden.

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

    SET OPTION PUBLIC.allow_snapshot_isolation = 'On';
    SET TEMPORARY OPTION isolation_level = 'snapshot';
  6. Der "Accountant" beschließt, die Preise für die Schirmmützen (Visors) aufzulisten. Führen Sie als "Accountant" die folgende Anweisung aus:

    SELECT ID, Name, UnitPrice
    FROM 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
    ... ... ...
  7. Der "Sales Manager" beschließt, für die Schirmmützen einen neuen Verkaufspreis festzusetzen. Führen Sie als "Sales Manager" die folgenden Anweisungen aus:

    UPDATE Products
    SET UnitPrice = 5.95 WHERE ID = 501;
    COMMIT;
    SELECT ID, Name, UnitPrice FROM Products
    WHERE Name = 'Visor';
  8. 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 Products;
  9. Setzen Sie als "Sales Manager" den Preis für die Plastik-Schirmmützen wieder auf den Originalpreis zurück.

    UPDATE 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.

  10. 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;