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.
Starten Sie Interactive SQL.
Im Fenster Verbinden stellen Sie als "Sales Manager" eine Verbindung mit der SQL Anywhere-Beispieldatenbank her.
Klicken Sie in der Dropdown-Liste Aktion auf Mit einer ODBC-Datenquelle verbinden.
Klicken Sie auf ODBC-Datenquellenname und geben Sie im Feld darunter SQL Anywhere 12 Demo ein.
Klicken Sie, falls erforderlich, auf Erweitert, um die Registerkarte Erweiterte Optionen einzublenden.
Klicken Sie auf die Registerkarte Erweitert und geben Sie Sales Manager in das Feld ConnectionName ein.
Klicken Sie auf Verbinden.
Starten Sie eine zweite Instanz von Interactive SQL.
Im Fenster Verbinden stellen Sie als "Accountant" eine Verbindung mit der SQL Anywhere-Beispieldatenbank her.
Wählen Sie in der Dropdown-Liste Aktion die Option Mit ODBC-Datenquelle verbinden.
Klicken Sie auf ODBC-Datenquellenname und geben Sie im Feld darunter SQL Anywhere 12 Demo ein.
Klicken Sie, falls erforderlich, auf die Schaltfläche Erweitert, um die Registerkarte Erweiterte Optionen einzublenden.
Klicken Sie auf die Registerkarte Erweitert und geben Sie Accountant in das Feld ConnectionName ein.
Klicken Sie auf Verbinden.
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'; |
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 |
... | ... | ... |
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'; |
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; |
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.
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; |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |