物理トランザクションモードで Oracle のロック機構のみを使用するときの注意事項
物理トランザクションモードのプログラムにおいて、Magic xpaのロックファイル(mglock.dat)を非共用にし Oracleの並行処理制御機能のみを使用する場合、テーブルのアクセス規制はOracleの排他制御のみに依存します。
注意すべき点は、共有モードがR(=読込)の時に、Magic xpaはOracleのSHAREモードのロックをかけますが、このモードでは、Magic xpaのRモードと異なり、他の端末から処理(W=書出)モードでのアクセス(ファイルのオープン)を許可することです。 その際、後の端末がレコードへの書き出しを行い、レコードロックをかけようとする時に、先に共有Rモード、すなわちSHAREモードでロックをかけた端末が終了しない限り、後の端末は待ちの状態が発生します。また下表の特定の場合によっては、先のSHAREモードの端末側でデッドロックが発生することがあります。
以下にアクセス規制を挙げます。 なお、下表は、処理A から先にアクセスされたテーブルに対して、処理Bが後からアクセスした場合のアクセス規制を示しています。 この表中、次の記号を使っています。
記号 |
意味 |
---|---|
T- |
テーブルアクセスに制限があります(テーブルがオープンできません)。 |
R- |
レコードアクセスに制限があります(レコードロックがかかります)。 |
(1) タスクレベルのトランザクションの場合
|
処理A |
|||||||
---|---|---|---|---|---|---|---|---|
処理B |
アクセスモード |
読込(R) |
書出(W) |
|||||
|
共有 |
読込(R) |
書出(W) |
なし(N) |
読込(R) |
書出(W) |
なし(N) |
|
読込(R) |
読込(R) |
|
|
T- |
注2 |
注2 |
T- |
|
書出(W) |
|
|
|
|
|
|
||
なし(N) |
T- |
|
T- |
注2 |
注2 |
T- |
||
書出(W) |
読込(R) |
注3 |
|
T- |
注2,3,4 |
注2,4 |
T- |
|
書出(W) |
注3 |
|
|
注3 |
注1 |
注1 |
||
なし(N) |
T- |
|
T- |
T- |
注2 |
T- |
注1: T+R- ですが、レコードロックが解除されるタイミングは処理AのPGを終了する時です。
注2: 処理A側でレコードに書込みを行うと、テーブルロックがかかります。
注3: レコードに書込みを行うと、処理Aがテーブルを閉じるまで黙り状態になることがあります。
注4: 処理Aでレコードの書込みを行う前に処理Bが実行された場合、いずれかでレコードの書込みのタイミングで「ORA-00060:デッドロック」のエラーが発生するか、フリーズすることがあります。
(2) レコードレベルでのトランザクションの場合
|
処理A |
|||||||
---|---|---|---|---|---|---|---|---|
処理B |
アクセスモード |
読込(R) |
書出(W) |
|||||
|
共有 |
読込(R) |
書出(W) |
なし(N) |
読込(R) |
書出(W) |
なし(N) |
|
読込(R) |
読込(R) |
|
|
T- |
|
|
T- |
|
書出(W) |
|
|
|
|
|
|
||
なし(N) |
T- |
|
T- |
T- |
|
T- |
||
書出(W) |
読込(R) |
注1 |
|
T- |
注1 |
|
T- |
|
書出(W) |
注1 |
|
R- |
注1 |
|
R- |
||
なし(N) |
T- |
|
T- |
T- |
|
T- |
注1:処理Aで行移動したときに書き込みが行われます。
物理トランザクションモードでのDBテーブル/共有パラメータと Oracleに発行されるSQL文の関係
共有モードW |
(ロックコマンドは発行されません) |
---|---|
共有モードR |
lock table ... in share mode |
共有モードN |
lock table ... in exclusive mode |
入力時(即時)ロック |
select ... for update |
物理トランザクションモードで推奨する環境設定
(1) 他のアプリケーションとのデータベースの共有を行う場合
データソースの[データベース特性] /[MAGICロック] |
「テーブル」 |
---|---|
プログラムの[ロック方式] |
オンラインタスクは「入力時」 |
ロックパス |
環境ごとに違うロケーション |
(2) Magic xpaでのみデータベースを操作し、従来のアクセス規制をなるだけ引き継ぎたい場合
データソースの[データベース特性] /[MAGICロック] |
「両方」 |
---|---|
プログラムの[ロック方式] |
オンラインタスクは「入力時」 |
ロックパス |
全てのMagic xpaで同じロケーション |