(2) ページ
2.4 XDB のトランザクション制御
2.4.3 排他の取得期間
クションについては,UAP側で処理を再実行できるようにしてください。
図
2-9 排他の取得期間
説明
• 更新バッファ上のデータを
DB
エリアに反映するときに排他が取得されます。• 行単位(インデクスはページ単位)で排他が取得されるため,排他の取得期間中 は
A
行を参照したり,A行を更新バッファ上に読み込んだりすることはできませ ん。(1) 同じ行を同時に更新するトランザクションがある場合
同じ行を同時に更新するトランザクションがある場合の例を次の図に示します。
図
2-10 同じ行を同時に更新するトランザクションがある場合の例
説明
• スレッド
2
によるA
行の更新処理中に,スレッド1
がA
行を更新しようとしたた め,スレッド1
はエラーとなり,トランザクションがロールバックします。• スレッド
2
によるA
行の更新確定後(DBエリアへの反映確定後)に,スレッド3
によるA
行の更新処理が開始されたため,スレッド3
はA
行を更新できます。• 同一行に対するコミット処理は同時実行できません。そのため,スレッド
2
のコ ミット処理が完了したあとに,スレッド3
のコミット処理が開始されます。(2) 同じ行を更新するトランザクションと参照するトランザクションが
ある場合
図
2-11 同じ行を更新するトランザクションと参照するトランザクションがある場合の
例説明
スレッド
1
がA
行の更新を行い,スレッド2
がA
行を参照しています。この場合,スレッド
1
の更新確定前後(DBエリアへの反映確定前後)で,スレッ ド2
が取り出す値が変わります。2.4.4 SQL エラーに伴うロールバック
SQL
の実行中にエラーが発生し,トランザクションを続行できなくなった場合,XDBは このトランザクションによるデータベースの更新を無効にし,SQL連絡領域中のSQLWARN6
に'W'
を設定してUAP
に処理を戻します。SQLWARN6に'W'
が設定され た場合は,TP1/EEのライブラリ関数を発行して,このトランザクションをロールバッ クさせてください。ロールバックしない状態でSQL
を発行すると,SQLはすべてエ ラーになります。また,この状態のままTP1/EE
に制御を戻すと,同期点を取得する処 理でエラーが発生します。その場合,出力されたメッセージを参照して,エラー要因を 取り除き,該当するトランザクションのRPC
サービス要求を再実行してください。
ドキュメント内
TP1/EE/Extended Data Cache 使用の手引
(ページ 47-51)