スナップショットアイソレーションを使用してブロックを回避することもできます。スナップショットアイソレーションを使用するトランザクションはコミットされたデータだけを認識するため、Accountant のトランザクションは、Sales Manager のトランザクションをブロックしません。
前提条件
このレッスンは、受講者がこれまでのすべてのレッスンを終了していることを前提としています。レッスン 1:繰り返し不可能読み出しの作成を参照してください。
このレッスンでは、このチュートリアルの開始時に、権限のセクションで一覧されているロールと権限を持っていることを前提としています。 チュートリアル:繰り返し不可能読み出しの知識
Accountant として次の文を実行して、データベースのスナップショットアイソレーションを有効にし、snapshot 独立性レベルを使用することを指定します。
SET OPTION PUBLIC.allow_snapshot_isolation = 'On'; SET TEMPORARY OPTION isolation_level = 'snapshot'; |
Accountant として、次の文を実行し、サンバイザーの価格のリストを表示します。
SELECT ID, Name, UnitPrice FROM GROUPO.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 |
... | ... | ... |
Sales Manager として、次の文を実行し、プラスチック製サンバイザーの新しい販売価格を導入します。
UPDATE GROUPO.Products SET UnitPrice = 5.95 WHERE ID = 501; COMMIT; SELECT ID, Name, UnitPrice FROM GROUPO.Products WHERE Name = 'Visor'; |
Accountant はクエリをもう一度実行しますが、最初の読み込み時にコミットされたデータがトランザクションで使用されるため、価格の変更を認識しません。
SELECT ID, Name, UnitPrice FROM GROUPO.Products; |
Sales Manager として、プラスチックバイザーを元の価格に戻します。
UPDATE GROUPO.Products SET UnitPrice = 7.00 WHERE ID = 501; COMMIT; |
データベースサーバは、Accountant が読み込み中の Products テーブルのローに読み込みロックをかけません。これは Sales Manager が Products テーブルに変更を加える前に作成された、コミットされたデータのスナップショットを Accountant が閲覧しているためです。
Accountant が価格の閲覧を終了しました。データベースを誤って変更するのを防ぐために、ROLLBACK 文でトランザクションを完了します。
ROLLBACK; |
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |