SQL 解説書

分離レベル

アプリケーション・プロセスに関連する分離レベル は、 並行して実行している他のアプリケーション・プロセスからそのアプリケーション・プロセスを分離する度合いを定義します。

したがって、アプリケーション・プロセスの分離レベル P は、以下を指定します。

分離レベルは、パッケージの属性として指定され、 そのパッケージを使用するアプリケーション・プロセスに適用されます。 分離レベルは、プログラム準備処理で指定されます。 これによって、並行アプリケーション・プロセスによるデータ・アクセスは、 ロックの種類に応じて制限または禁止されます。 各種ロックのタイプおよび属性の詳細については、管理の手引き を参照してください。 宣言済み一時表と宣言済み一時表の行は、 一時表を宣言したアプリケーションによってのみアクセス可能なものなので、 ロックされることはありません。 したがって、ロックおよび分離レベルに関する以下の説明は、宣言済み一時表には当てはまりません。

データベース・マネージャーでは、 大きく分けて次の 3 つのロックがサポートされています。

共用
並行アプリケーション・プロセスの操作を、 読み取り専用のデータ操作だけに制限します。

更新
並行アプリケーション・プロセスが行の更新を宣言したのでない限り、 データへの読み取り専用操作に限定されます。 データベース・マネージャーは、 現在その行を見ているプロセスは行を更新するものとみなします。

排他
並行アプリケーション・プロセスがどのような方法であってもデータにアクセスしないようにします。 ただし、データの読み取りは可能であるが変更はできない非コミット読み取り の分離レベルのアプリケーション・プロセスを除きます。

(非コミット読み取り (UR)を参照。)

ロックは基礎表の行について行われます。 しかし、データベース・マネージャーが複数の行ロックを単一の表ロックに置き換えることがあります。 これをロック・エスカレーション といいます。 アプリケーション・プロセスには、 少なくとも最低要求されるロック・レベルが保証されます。

DB2 ユニバーサル・データベース データベース・マネージャーは、4 つの分離レベルをサポートしています。 分離レベルとは関係なく、データベース・マネージャーは、 挿入、更新、または削除の対象となる行のすべてに排他ロックをかけます。 このため、どの分離レベルでも、 このアプリケーション・プロセスが 1 作業単位中に変更する行は、 その作業単位が終了するまで他のアプリケーション・プロセスから変更されないことが保証されます。 分離レベルには、以下のものがあります。

反復可能読み取り (RR)

レベル RR では次のようになります。

RR では、単独読み取り行 (「読み取り固定」の説明を参照) の出現は許されません。

RR レベルで実行しているアプリケーション・プロセスは、 排他ロック以外に、参照するすべての行に対して共有ロックを獲得します。 さらに、アプリケーション・プロセスが並行アプリケーション・プロセスの影響から完全に分離されるようにロックが実行されます。

読み取り固定 (RS)

RR レベルと同様に、RS レベルでは、以下が保証されます。

RR とは異なり RS では、アプリケーション・プロセスは、 他の並行アプリケーション・プロセスの影響から完全には分離されません。 RS レベルでは、 同じ照会を複数回発行するアプリケーション・プロセスで行が追加されていくという場合があります。 このような付加行は単独読み取り行 と呼ばれます。

単独読み取り行は、たとえば次のような状況で発生します。

  1. アプリケーションのプロセス P1 が、 探索条件を満たす一連の n 個の行を読み取る。
  2. 次にアプリケーション・プロセス P2 が、 探索条件を満たす 1 つまたは複数の行を挿入 (INSERT) し、 それらの挿入行をコミット (COMMIT) する。
  3. P1 が同じ探索条件で一連の行を再度読み取り、 元の行と P2 によって挿入された行を両方とも獲得する。

RS レベルで実行しているアプリケーション・プロセスは、排他ロック以外に、 条件に合うすべての行に対して少なくとも共用ロックを獲得します。

カーソル固定 (CS)

CS レベルは RR レベルと次の点で類似しています。

CS レベルは RR レベルと次の点で異なっています。

CS レベルで実行しているアプリケーション・プロセスは、排他ロックに加えて、 すべてのカーソルの現在行に対して少なくとも共用ロックを獲得します。

非コミット読み取り (UR)

SELECT INTO、読み取り専用カーソルによる FETCH、INSERT で使用される全選択、 UPDATE での行の全選択、 またはスカラーの全選択が使用されているなら、UR レベルでは以下のことが可能です。

これ以外の点では、CS レベルの規則が適用されます。

分離レベルの比較

4 つの分離レベルの比較については、付録 I, 分離レベルの比較で説明されています。


脚注:

6
行は、 対応する OPEN ステートメントと同じ作業単位で読み取られなければなりません。 DECLARE CURSOR の WITH HOLD の説明を参照してください。

7
CLOSE ステートメントに任意選択の WITH RELEASE 文節を使用すると、 反復不能読み取りおよび単独読み取りに対する保証は、カーソルが再オープンされる場合、 以前にアクセスされた行には適用されなくなります。

8
CLOSE ステートメントに任意選択の WITH RELEASE 文節を使用すると、 反復不能読み取りに対する保証は、カーソルが再オープンされる場合、 以前にアクセスした行には適用されなくなります。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]