Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL の使用法 » データベースの作成 » トランザクションと独立性レベルの使用

 

独立性レベルと一貫性

SQL Anywhere では、あるトランザクションの操作が、同時に実行される他のトランザクションの操作で認識される程度を制御できます。この制御には、「独立性レベル」というデータベース・オプションを使用します。

また、対応するテーブル・ヒントを使用して、クエリ内の個々のテーブルの独立性レベルを制御することもできます。FROM 句を参照してください。

SQL Anywhere が提供するインタフェースを次に示します。

独立性レベル 特性
0 - コミットされない読み出し
  • 書き込みロックの有無にかかわらず、ローで読み込みが許可される。

  • 読み込みロックは適用されない。

  • 同時トランザクションがローを変更しないこと、またはローに対しての変更がロールバックされないことは保証されない。

  • テーブル・ヒント NOLOCK と READUNCOMMITTED に対応する。

  • ダーティ・リード、繰り返し不可能読み出し、幻ローを許可する。

1 - コミットされた読み出し
  • 書き込みロックのないローでは読み込みのみ許可される。

  • 現在のローでの読み込みに対してのみ読み込みロックが取得されて保持されるが、カーソルがローから移動すると解放される。

  • トランザクション中にデータが変更されないという保証はない。

  • テーブル・ヒント READCOMMITTED に対応する。

  • ダーティ・リードを防ぐ。

  • 繰り返し不可能読み出しと幻ローを許可する。

2 - 繰り返し可能読み出し
  • 書き込みロックのないローでは読み込みのみ許可される。

  • 結果セットの各ローとして取得された読み込みロックが読み込まれ、トランザクションが終了するまで保持される。

  • テーブル・ヒント REPEATABLEREAD に対応する。

  • ダーティ・リードと繰り返し不可能読み出しを防ぐ。

  • 幻ローを許可する。

3 - 直列化可能
  • 書き込みロックのない結果内のローに対しては読み込みのみ許可される。

  • カーソルが開いているときに取得された読み込みロックは、トランザクションの終了時まで保持される。

  • テーブル・ヒント HOLDLOCK と SERIALIZABLE に対応する。

  • ダーティ・リード、繰り返し不可能読み出し、幻ローを防ぐ。

snapshot 1
  • 読み込みロックは適用されない。

  • すべてのローで読み込みが許可される。

  • コミットされたデータのデータベース・スナップショットは、トランザクションが最初のローの読み込みまたは更新を行った時点で作成される。

statement-snapshot1
  • 読み込みロックは適用されない。

  • すべてのローで読み込みが許可される。

  • コミットされたデータのデータベース・スナップショットは、文が最初のローの読み込みを行った時点で作成される。

readonly-statement-snapshot1
  • 読み込みロックは適用されない。

  • すべてのローで読み込みが許可される。

  • コミットされたデータのデータベース・スナップショットは、読み込み専用の文が最初のローの読み込みを行った時点で作成される。

  • 更新可能な文の updatable_statement_isolation オプションで指定された独立性レベル (0、1、2、または 3) を使用する。

1 データベースで allow_snapshot_isolation が On に設定され、そのデータベースでスナップショット・アイソレーションが有効である必要があります。スナップショット・アイソレーションの有効化を参照してください。

デフォルトの独立性レベルは 0 です。ただし、Open Client、jConnect、TDS の各接続におけるデフォルトの独立性レベルは 1 です。

Mobile Link の独立性レベルの詳細については、Mobile Link 独立性レベルを参照してください。

ロックベースの独立性レベルは、一部またはすべての干渉を防ぎます。レベル 3 は最も高いレベルの独立性を提供します。2 以下のレベルでは、一貫性のレベルは低くなりますが、パフォーマンスは一般にレベル 3 より高くなります。デフォルトでは、レベルは 0 (コミットされない読み出し) に設定されています。

スナップショット・アイソレーションのレベルは、読み込みと書き込み間の干渉を防ぎます。書き込みは相互に干渉する可能性があります。一貫性のない動作が多少生じる可能性がありますが、競合のパフォーマンスは独立性レベルを 0 に設定した場合と同じです。ロー・バージョンを保存して使用する必要があるため、競合以外のパフォーマンスは低下します。

注意

どの独立性レベルにおいても、各トランザクションが完全に実行されるかまったく実行されないこと、および更新内容が失われないことが保証されます。

独立性レベルはトランザクション間にのみあります。同じトランザクション内の複数のカーソルは相互に干渉する可能性があります。


スナップショット・アイソレーション
典型的な矛盾のケース
独立性レベルの設定
ODBC 実行可能アプリケーションからの独立性レベルの設定
独立性レベルの参照