分離レベルは、同じトランザクションを使用して並行実行している場合の処理内容について定義したものです。並行トランザクションの分離レベルを数値で指定します。指定できる値は使用するゲートウェイによって異なります。
MS-SQL Server
0 READ UNCOMMITTED(共有ロックは実行されず、排他ロックも使用されません。このオプションが設定されている場合には、コミットされていないデータ、つまりダーティデータを読み取ることができます。トランザクションが終了する前にデータ内の値を変更でき、行がデータセットに現れたり消えたりします。)
1 READ COMMITTED(データが読み取られている間、ダーティリードを回避するために共有ロックが保持されるように指定します。しかし、トランザクションが終了する前にデータを変更することができるので、反復不能読み取りやファントムデータが発生する可能性があります。)
DB2 UDB
0 非コミット読み取り(UR:アプリケーションが他のトランザクションの非コミット変更にアクセスするのを可能にします。他のアプリケーションが表を消去または変更しようとしない限り、アプリケーションは自分が読み取っている行以外のアプリケーションをロックしません。)
1 カーソル固定(CS:カーソルが任意の行上に置かれている時に、アプリケーションのトランザクションがアクセスするその行をロックします。次の行が取り出されるか、またはトランザクションが終了するまで、そのロックは有効のままになります。行内のいずれかのデータが変更された場合、データベースに対してその変更内容がコミットされるまでロックは保持されます。
2 読み取り固定(RS:アプリケーションがトランザクション中に検索する行のみをロックします。行の読み取りの修飾がトランザクションが完了するまで他のアプリケーション・プロセスによって変更されないようにします。また、他のアプリケーション・プロセスによって変更された行の読み取りは、変更がプロセスによってコミットされるまで行われません。)
3 反復可能読み取り(RR:トランザクション中に参照される、アプリケーション内の行全てをロックします。プログラムが反復可能読み取り保護を使用する場合、プログラムによって参照される行は、そのプログラムが現行のトランザクションを終了しない限り他のプログラムによって変更できません。)
Oracle
指定は無効です。
分離レベルとトランザクション処理
以下の表は分離レベルとトランザクション処理を同時実行させた場合に起こる問題の相関関係を示します。
分離レベル/現象 |
ダーティリード |
反復不可読み取り |
ファントム |
READ UNCOMMITTED |
○ |
○ |
○ |
READ COMMITTED |
× |
○ |
○ |
読み取り固定 |
× |
× |
○ |
反復可能読み取り |
× |
× |
× |
ダーティリード 別のトランザクションによって作成された未確定レコードまたは変更レコードがSQL処理で読み込まれると、1つのトランザクション内で異なる結果が返されます。例えば、あるユーザがトランザクションをコミットする前に、別のユーザによってコミットされることで、変更されたデータによって表示が変わる場合が発生します。ロールバックが実行された場合も表示が変わります。ダーティリードでは並行性は向上しますが、一貫性は低下します。
反復不可能読み取り SQL処理でテーブルの同じ行が2回読み込まれると、1つのトランザクション内で異なる結果が返されます。反復不可能な読み取りは、トランザクションの読み込みの間に別のトランザクションが行への変更を更新して確定すると発生します。反復不可能読み取りは一貫性は向上しますが、並行性は低下します。
ファントム SQL処理で一連のデータ値が2回読み出された時に、1つのトランザクション内のさまざまな結果を返します。ファントムは、一連の読み出しの実行の間に、別のトランザクションが新しいレコードを挿入して挿入を確定すると発生します。各分離レベルは、許容する現象によって異なります。
参照: |
詳細は、「マルチユーザ環境」の 分離レベル を参照してください。 |