分散トランザクション処理機能 OpenTP1 解説

[目次][用語][索引][前へ][次へ]

3.1.4 2相コミット

<この項の構成>
(1) 2相コミットの概要
(2) ヒューリスティック決定

(1) 2相コミットの概要

複数の資源を更新するとき,トランザクションは同期点で,2相コミットと呼ばれる方法で最終的に資源を更新するかどうか決定します。2相コミットとは,同期点処理を資源の更新準備処理(プリペア処理)と,資源の更新処理(コミット処理またはロールバック処理)の二段階に分ける方法です。同期点処理を二つの相に分けることで,複数の資源を矛盾なく更新できます。

同期点の第1相で,ルートトランザクションブランチがグローバルトランザクション内のすべてのトランザクションブランチに,コミットの準備を要求します。トランザクションブランチは,コミットの準備が完了したか,ロールバックしたかを,ルートトランザクションブランチに報告します。

同期点の第2相で,グローバルトランザクションをロールバックするかコミットするか決定します。すべてのトランザクションブランチでコミットの準備が完了すると,ルートトランザクションブランチはグローバルトランザクション全体のコミットを決定します。トランザクションブランチのどれかがロールバックしたときには,ルートトランザクションブランチはグローバルトランザクション全体のロールバックを決定します。グローバルトランザクション内のトランザクションブランチはすべて,ルートトランザクションブランチでの決定に従います。

トランザクションの決着(コミット決定,またはロールバック決定)以降にシステムに障害が発生した場合に備えて,2相コミット処理の過程でトランザクションに関する履歴情報を,システムジャーナルに取得します。

2相コミットの流れを次の図に示します。

図3-4 2相コミットの流れ

[図データ]

(2) ヒューリスティック決定

ルートトランザクションブランチがトランザクションブランチにコミットの準備を指示したあとで通信障害が発生して,ルートトランザクションブランチでの決定がトランザクションブランチに届かなくなることを,ヒューリスティックハザードといいます。ヒューリスティックハザードが起こった場合には,コマンドを使って,トランザクションブランチごとにトランザクションを強制的に決着できます。ルートトランザクションブランチの同期点処理を待たないで,コマンドでトランザクションブランチのトランザクションを強制的に決着することを,ヒューリスティック決定といいます。

ヒューリスティック決定には,次に示す種類があります。

ヒューリスティックコミットにするときにはtrncmtコマンドを,ヒューリスティックロールバックにするときにはtrnrbkコマンドを使います。コミットまたはロールバックしたトランザクションブランチを強制終了する場合は,trnfgtコマンドを使います。

コミットかロールバックかは,ルートトランザクションブランチとトランザクションブランチとで一致させてください。一致させるためには,まずルートトランザクションブランチがコミットしたかロールバックしたかをtrnlsコマンドを使って調べます。trnlsコマンドで表示した状態を参照した上で,trncmtコマンドまたはtrnrbkコマンドを実行します。

コマンドでトランザクションを決着させた場合,トランザクションの扱いについては十分考慮してください。ルートトランザクションブランチの決着とトランザクションブランチの決着とが矛盾(ヒューリスティックミックス)しないように十分注意してからtrncmtコマンド,またはtrnrbkコマンドを実行してください。

ヒューリスティック決定の操作方法については,マニュアル「OpenTP1 運用と操作」のトランザクションに関する運用の説明を参照してください。

ヒューリスティック決定の流れを次の図に示します。

図3-5 ヒューリスティック決定の流れ

[図データ]