ロックとトランザクション

物理トランザクションモードで Oracle のロック機構のみを使用するときの注意事項

物理トランザクションモードのプログラムにおいて、Magic uniPaaSのロックファイル(mglock.dat)を非共用にし Oracleの並行処理制御機能のみを使用する場合、テーブルのアクセス規制はOracleの排他制御のみに依存します。

注意すべき点は、共有モードがR(=読込)の時に、Magic uniPaaSはOracleのSHAREモードのロックをかけますが、このモードでは、Magic uniPaaSの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-

(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 uniPaaSでのみデータベースを操作し、従来のアクセス規制をなるだけ引き継ぎたい場合

データソースの[データベース特性] /[MAGICロック]

「両方」

プログラムの[ロック方式]

オンラインタスクは「入力時」
バッチタスクは「即時」

ロックパス

全てのMagic uniPaaSで同じロケーション