Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 クライアント使用の手引 TP1/Client/W,TP1/Client/P編


2.4.2 同期点取得

〈この項の構成〉

(1) コミット

トランザクションが正常終了したときの同期点取得(コミット)は,CUPからコミット要求の関数を呼び出して行います。グローバルトランザクションは,すべてのトランザクションブランチが正常に終了したことで正常終了となります。

(a) 連鎖,非連鎖モードのコミット

トランザクション処理の同期点取得には,一つのトランザクションの終了後,同期点を取得して次のトランザクションを続けて起動する連鎖モードのコミットと,トランザクションの終了で同期点を取得したあと,新たなトランザクションを起動しない非連鎖モードのコミットがあります。

連鎖モードのコミットは,dc_trn_chained_commit_s関数を実行して要求します。

非連鎖モードのコミットは,dc_trn_unchained_commit_s関数を実行して要求します。

トランザクションの連鎖,非連鎖モードを次の図に示します。

図2‒10 トランザクションの連鎖,非連鎖モード

[図データ]

(b) コミット要求の関数を呼び出さない場合の処理

次に示すどちらかの場合,トランザクションはロールバックされます。

  • コミット要求の関数を呼び出さないで,かつdc_rpc_close_s関数またはdc_clt_cltout_s関数も発行しないでプログラムを終了したとき

  • コミット要求の関数を呼び出す前にCUPが異常終了したとき

(2) ロールバック

(a) TP1/Serverの処理でのエラーの場合

トランザクションでエラーが発生すると,コミット要求の関数がエラーリターンされます。そのトランザクションは部分回復対象としてロールバックされます。グローバルトランザクション内のどれか一つのトランザクションブランチでエラーが発生した場合でも,グローバルトランザクション全体がロールバックの対象となります。このときTP1/Serverは,トランザクションブランチをロールバック対象とみなして,部分回復処理をします。

TP1/Serverの処理でエラーが発生した場合のトランザクションのロールバックを,次の図に示します。

図2‒11 トランザクションのロールバック(TP1/Serverの処理でエラーが発生した場合)

[図データ]

(b) ロールバック要求の関数の発行

トランザクションをCUPの判断でロールバックしたいときは,CUPからロールバック要求の関数を実行します。

ロールバック要求の関数を実行した場合のトランザクションのロールバックを,次の図に示します。

図2‒12 トランザクションのロールバック(ロールバック要求の関数を呼び出した場合)

[図データ]

ロールバックには,連鎖モードのロールバック非連鎖モードのロールバックがあります。

連鎖モードのロールバックは,dc_trn_chained_rollback_s関数を実行して要求します。連鎖モードのロールバック関数を実行してロールバックした場合,このトランザクションは,ロールバック処理後も,グローバルトランザクションの範囲内にあります。

非連鎖モードのロールバックは,dc_trn_unchained_rollback_s関数を実行して要求します。非連鎖モードのロールバック関数を実行してロールバックした場合,このトランザクションは,ロールバック処理後,グローバルトランザクションの範囲外となります。

(3) ヒューリスティック発生時の処置

トランザクション処理でヒューリスティックが発生すると,CUPの同期点取得時にエラーリターンされます。この場合のリターン値について次に示します。

これらのリターン値が戻る原因,およびグローバルトランザクションの同期点の結果については,メッセージログファイルを参照してください。

ヒューリスティック発生時の処置の詳細については,マニュアル「OpenTP1 プログラム作成の手引」を参照してください。

(4) トランザクションの処理時間について

トランザクションに関する,次に示す時間をクライアント環境定義で指定できます。詳細については「7.2 クライアント環境定義の詳細」を参照してください。

(5) トランザクションブランチの統計情報取得タイプについて

トランザクションブランチごとに取得するトランザクション統計情報の取得タイプを,クライアント環境定義で指定できます。詳細については「7.2 クライアント環境定義の詳細」を参照してください。