3.2.4 同期点処理
トランザクションをコミットするかどうかを最終的に決定する同期点での処理について説明します。
- 〈この項の構成〉
(1) 2相コミット
(a) 2相コミットの概要
複数の資源を更新するとき,トランザクションは同期点で,2相コミットと呼ばれる方法で最終的に資源を更新するかどうか決定します。2相コミットとは,同期点処理を資源の更新準備処理(プリペア処理)と,資源の更新処理(コミット処理またはロールバック処理)の二段階に分ける方法です。同期点処理を二つの相に分けることで,複数の資源を矛盾なく更新できます。
2相コミットの詳細については,マニュアル「TP1/Server Base Enterprise Option プログラム作成の手引」を参照してください。
(b) ヒューリスティック決着
ルートトランザクションブランチがトランザクションブランチにコミットの準備を指示したあとで通信障害が発生して,ルートトランザクションブランチでの決着がトランザクションブランチに届かなくなることを,ヒューリスティックハザードといいます。ヒューリスティックハザードが起こった場合には,コマンドを使って,トランザクションブランチごとにトランザクションを強制的に決着できます。ルートトランザクションブランチの同期点処理を待たないで,コマンドでトランザクションブランチのトランザクションを強制的に決着することを,ヒューリスティック決着といいます。
ヒューリスティック決着の詳細については,マニュアル「TP1/Server Base Enterprise Option プログラム作成の手引」を,ヒューリスティック決着の操作方法については,「6.4.2 トランザクションの強制決着」を参照してください。
(2) トランザクションの最適化
TP1/EEのトランザクションマネジャは,トランザクション処理の性能を上げるため,トランザクション関連定義の指定に従って次に示す最適化の処理をしています。
トランザクションの最適化は,クライアント側のトランザクションブランチとサーバ側のトランザクションブランチとの間で,同期点処理の効率を上げることを目的としています。一つのグローバルトランザクション内で複数の最適化を混在できます。
トランザクションの最適化の詳細については,マニュアル「TP1/Server Base Enterprise Option プログラム作成の手引」を参照してください。
(3) タイムアウト時の処理
TP1/EEがサービスを要求したあと,サービス要求先でアドレス未解決,異常終了などが発生すると,応答待ちタイムアウトが発生します。
応答待ちタイムアウト発生時の処理の流れを次に示します。
|
TP1/EEは,TP1/EE(SPP1)およびTP1/EE(SPP2)にサービスを要求したあと,同期点処理をするためにTP1/EE(SPP1)およびTP1/EE(SPP2)からの応答を待ちます。TP1/EE(SPP2)のアドレス未解決,異常終了などが原因でTP1/EE(SPP2)が応答に失敗した場合,TP1/EEは応答待ちタイムアウトとなり,TP1/EE(SPP2)に対してロールバック要求を送信しないでTP1/EEおよびTP1/EE(SPP1)のロールバック処理だけをします。TP1/EE(SPP2)は,同期点メッセージ受信待ちタイムアウトを検知して,TP1/EE(SPP2)のロールバック処理をします。ロールバック処理が完了すると,コミット決着失敗通知(ERRTRNR)が登録されます。