スナップショットアイソレーションを使用してブロックを回避することもできます。スナップショットアイソレーションを使用するトランザクションはコミットされたデータだけを認識するため、Accountant のトランザクションは、Sales Manager のトランザクションをブロックしません。
Interactive SQL を起動します。
[接続] ウィンドウで、Sales Manager として SQL Anywhere サンプルデータベースに接続します。
[アクション] ドロップダウンリストから、[ODBC データソースを使用した接続] をクリックします。
[ODBC データソース名] をクリックし、その下のフィールドに SQL Anywhere 12 Demo と入力します。
必要に応じて、[詳細] をクリックし、[詳細オプション] タブを表示します。
[詳細オプション] タブをクリックし、[ConnectionName] フィールドに Sales Manager と入力します。
[接続] をクリックします。
Interactive SQL をもう 1 つ起動します。
[接続] ウィンドウで、Accountant として SQL Anywhere サンプルデータベースに接続します。
[アクション] ドロップダウンリストで、[ODBC データソースを使用した接続] をクリックします。
[ODBC データソース名] をクリックし、その下のフィールドに SQL Anywhere 12 Demo と入力します。
必要に応じて、[詳細] ボタンをクリックし、[詳細オプション] タブを表示します。
[詳細オプション] タブをクリックし、[ConnectionName] フィールドに Accountant と入力します。
[接続] をクリックします。
Accountant として次の文を実行して、データベースのスナップショットアイソレーションを有効にし、snapshot 独立性レベルを使用することを指定します。
SET OPTION PUBLIC.allow_snapshot_isolation = 'On'; SET TEMPORARY OPTION isolation_level = 'snapshot'; |
Accountant は、バイザーの価格をリストすることにします。Accountant として、次の文を実行します。
SELECT ID, Name, UnitPrice FROM 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 は、プラスチックバイザーに新価格を導入することにします。Sales Manager として、次の文を実行します。
UPDATE Products SET UnitPrice = 5.95 WHERE ID = 501; COMMIT; SELECT ID, Name, UnitPrice FROM Products WHERE Name = 'Visor'; |
Accountant はクエリをもう一度実行しますが、最初の読み込み時にコミットされたデータがトランザクションで使用されるため、価格の変更を認識しません。
SELECT ID, Name, UnitPrice FROM Products; |
Sales Manager として、プラスチックバイザーを元の価格に戻します。
UPDATE Products SET UnitPrice = 7.00 WHERE ID = 501; COMMIT; |
データベースサーバーは、Accountant が読み込み中の Products テーブルのローに読み込みロックをかけません。これは Sales Manager が Products テーブルに変更を加える前に作成された、コミットされたデータのスナップショットを Accountant が閲覧しているためです。
Accountant が価格の閲覧を終了しました。データベースを誤って変更するのを防ぐために、ROLLBACK 文でトランザクションを完了します。
ROLLBACK; |
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |