snapshot 独立性レベルを使用すると、独立性レベル 3 と同じレベルで一貫性を維持することができ、ブロックが発生しません。Sales Manager の文はブロックされず、Accountant は幻ローを認識しません。
前提条件
このレッスンは、受講者がこれまでのすべてのレッスンを終了していることを前提としています。レッスン 1:幻ローの作成を参照してください。
このレッスンでは、このチュートリアルの開始時に、権限のセクションで一覧されているロールと権限を持っていることを前提としています。 チュートリアル:幻ローの知識
Accountant として、次の文を実行してスナップショットアイソレーションを有効にします。
SET OPTION PUBLIC. allow_snapshot_isolation = 'On'; SET TEMPORARY OPTION isolation_level = 'snapshot'; |
次の文を実行して、すべての部署をリストします。
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 |
Sales Manager は、主に外国市場を担当する新しい部署の設置を決めました。EmployeeID 129 の Philip Chin を新しい部署の責任者にします。Sales Manager として、次の文を実行し、新しい部署用のエントリを作成します。この新しいエントリは、Sales Manager のウィンドウのテーブル下部に新しいローとして表示されます。
INSERT INTO GROUPO.Departments ( DepartmentID, DepartmentName, DepartmentHeadID ) VALUES( 600, 'Foreign Sales', 129 ); COMMIT; |
Sales Manager として次の文を実行し、すべての部署のリストを表示します。
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 |
Accountant はクエリをもう一度実行できます。また、トランザクションがコミットされていないため、新しいローを認識しません。
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 |
Sales Manager は、大企業に対して営業活動を行う新しい部署を追加したいと考えています。Sales Manager として、次の文を実行します。
INSERT INTO GROUPO.Departments ( DepartmentID, DepartmentName, DepartmentHeadID ) VALUES( 700, 'Major Account Sales', 902 ); |
Accountant がスナップショットアイソレーションを使用しているため、Sales Manager による変更はブロックされません。
Sales Manager がデータベースにコミットした変更を認識するために、Accountant はスナップショットアイソレーションを終了する必要があります。
COMMIT; SELECT * FROM GROUPO.Departments ORDER BY DepartmentID; |
Accountant は Foreign Sales 部署を認識するようになりました。ただし、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 |
SQL Anywhere サンプルデータベースが変更されないようにするため、Major Account Sales 部署のローを挿入する未完了トランザクションをロールバックし、2 つ目のトランザクションを使用して Foreign Sales 部署を削除してください。
Sales Manager として、次の文を実行して現在のトランザクションをロールバックし、以前挿入されたローを削除し、この操作をコミットします。
ROLLBACK; DELETE FROM GROUPO.Departments WHERE DepartmentID = 600; COMMIT; |
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |