Sie können die Snapshot-Isolationsstufe verwenden, um die Konsistenz auf der gleichen Stufe aufrechtzuerhalten wie auf Isolationsstufe 3, ohne dass es zu Blockierungen kommt. Die Anweisung des Sales Managers wird nicht blockiert und der Accountant sieht keine Phantomzeile.
Voraussetzungen
In dieser Lektion wird davon ausgegangen, dass Sie bereits alle vorherigen Lektionen abgeschlossen haben. Siehe Lektion 1: Phantomzeilen 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 Phantomzeilen.
Führen Sie als Accountant die folgenden Anweisungen aus, um die Snapshot-Isolation zu aktivieren:
SET OPTION PUBLIC. allow_snapshot_isolation = 'On'; SET TEMPORARY OPTION isolation_level = 'snapshot'; |
Führen Sie die folgende Anweisung aus, um alle Abteilungen aufzulisten:
SELECT * FROM GROUPO.Departments ORDER BY DepartmentID; |
DepartmentID | DepartmentName | DepartmentHeadID |
---|---|---|
100 | R & D | 501 |
200 | Sales | 902 |
300 | Finance | 1293 |
400 | Marketing | 1576 |
500 | Shipping | 703 |
Der Sales Manager beschließt, eine neue Abteilung aufzubauen, die sich auf den ausländischen Markt konzentriert. Philip Chin, der die Mitarbeiternummer (EmployeeID) 129 hat, leitet die neue Abteilung. Führen Sie als Sales Manager die folgende Anweisung aus, um einen neuen Eintrag für die neue Abteilung zu erstellen, der als neue Zeile am Ende der Tabelle im Sales Manager-Fenster erscheint:
INSERT INTO GROUPO.Departments ( DepartmentID, DepartmentName, DepartmentHeadID ) VALUES( 600, 'Foreign Sales', 129 ); COMMIT; |
Führen Sie als Sales Manager die folgende Anweisung aus, um alle Abteilungen aufzulisten:
SELECT * FROM GROUPO.Departments ORDER BY DepartmentID; |
DepartmentID | DepartmentName | DepartmentHeadID |
---|---|---|
100 | R & D | 501 |
200 | Sales | 902 |
300 | Finance | 1293 |
400 | Marketing | 1576 |
500 | Shipping | 703 |
600 | Foreign Sales | 129 |
Der Accountant kann seine Abfrage erneut ausführen und sieht die neue Zeile nicht, da die Transaktion nicht festgeschrieben wurde.
SELECT * FROM GROUPO.Departments ORDER BY DepartmentID; |
DepartmentID | DepartmentName | DepartmentHeadID |
---|---|---|
100 | R & D | 501 |
200 | Sales | 902 |
300 | Finance | 1293 |
400 | Marketing | 1576 |
500 | Shipping | 703 |
Der Sales Manager möchte gerne eine zweite Abteilung hinzufügen, die sich auf Verkaufsinitiativen für Großkunden konzentriert. Führen Sie als Sales Manager die folgende Anweisung aus:
INSERT INTO GROUPO.Departments ( DepartmentID, DepartmentName, DepartmentHeadID ) VALUES( 700, 'Major Account Sales', 902 ); |
Die Änderung des Sales Managers wird nicht blockiert, da der Accountant die Snapshot-Isolation benutzt.
Der Accountant muss seine Snapshot-Transaktion beenden, um die Änderungen zu sehen, die der Sales Manager in der Datenbank festgeschrieben hat.
COMMIT; SELECT * FROM GROUPO.Departments ORDER BY DepartmentID; |
Nun sieht der Accountant die Abteilung "Foreign Sales", nicht aber die Abteilung "Major Account Sales".
DepartmentID | DepartmentName | DepartmentHeadID |
---|---|---|
100 | R & D | 501 |
200 | Sales | 902 |
300 | Finance | 1293 |
400 | Marketing | 1576 |
500 | Shipping | 703 |
600 | Foreign Sales | 129 |
Um zu vermeiden, dass die SQL Anywhere-Beispieldatenbank geändert wird, sollten Sie die unvollständige Transaktion zurücksetzen, welche die Zeile "Major Account Sales" einfügt, und eine zweite Transaktion benutzen, um die Abteilung "Foreign Sales" zu löschen.
Führen Sie als Sales Manager die folgende Anweisung aus, um die aktuelle Transaktion zurückzusetzen, die gerade eingefügte Zeile zu löschen und diesen Vorgang festzuschreiben.
ROLLBACK; DELETE FROM GROUPO.Departments WHERE DepartmentID = 600; COMMIT; |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2013, SAP AG oder ein SAP-Konzernunternehmen. - SAP Sybase SQL Anywhere 16.0 |