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.
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'; |
Erhöhen Sie als Sales Manager die Preise aller T-Shirts um $0.95:
Führen Sie die folgende Anweisung aus, um den Preis zu aktualisieren:
UPDATE GROUPO.Products SET UnitPrice = UnitPrice + 0.95 WHERE Name = 'Tee Shirt'; |
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 |
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 |
Schreiben Sie als "Sales Manager" Ihre Änderungen der Datenbank fest, indem Sie die folgende Anweisung ausführen:
COMMIT; |
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.
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; |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2013, SAP AG oder ein SAP-Konzernunternehmen. - SAP Sybase SQL Anywhere 16.0 |