スナップショットアイソレーションは、他のデータベースがクエリに対応してコミットされたデータだけに接続できるようにして、ダーティリードの発生を防ぎます。Accountant は、スナップショットアイソレーションを使用して、コミットされたデータがクエリに影響を与えないようにすることができます。
前提条件
このレッスンは、受講者がこれまでのすべてのレッスンを終了していることを前提としています。レッスン 1:ダーティリードの作成を参照してください。
このレッスンでは、このチュートリアルの開始時に、権限のセクションで一覧されているロールと権限を持っていることを前提としています。 チュートリアル:ダーティリードの知識
Sales Manager として次の文を実行し、データベースのスナップショットアイソレーションを有効にします。
SET OPTION PUBLIC.allow_snapshot_isolation = 'ON'; |
Sales Manager として、すべての T シャツの価格を 0.95 ドル上げます。
次の文を実行して価格を更新します。
UPDATE GROUPO.Products SET UnitPrice = UnitPrice + 0.95 WHERE Name = 'Tee Shirt'; |
Sales Manager 用の新しい T シャツ価格を使用して、全在庫品の小売り価格の合計を計算します。
SELECT SUM( Quantity * UnitPrice ) AS Inventory FROM GROUPO.Products; |
次の結果が返されます。
Inventory |
---|
6687.15 |
Accountant として次の文を実行し、全在庫品の小売り価格の合計を計算します。このトランザクションは snapshot 独立性レベルを使用するため、データベースにコミットされたデータのみで結果が計算されます。
SET OPTION isolation_level = 'Snapshot'; SELECT SUM( Quantity * UnitPrice ) AS Inventory FROM GROUPO.Products; |
次の結果が返されます。
Inventory |
---|
6538.00 |
Sales Manager として次の文を実行し、データベースに対する変更をコミットします。
COMMIT; |
Accountant として次の文を実行し、現在の在庫の更新後の小売り価格を表示します。
COMMIT; SELECT SUM( Quantity * UnitPrice ) AS Inventory FROM GROUPO.Products; |
次の結果が返されます。
Inventory |
---|
6687.15 |
Accountant のトランザクションで使用されるスナップショットは最初の読み込み操作で開始するため、COMMIT を実行してトランザクションを終了し、スナップショットトランザクションの開始後に加えられたデータの変更を Accountant が確認できるようにする必要があります。
Sales Manager として次の文を実行し、T シャツの価格の変更を取り消し、SQL Anywhere サンプルデータベースを元の状態に復元します。
UPDATE GROUPO.Products SET UnitPrice = UnitPrice - 0.95 WHERE Name = 'Tee Shirt'; COMMIT; |
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |