トランザクションのコミットとロールバック

トランザクション

トランザクション (transaction)とは「商品を渡して、代金を受け取る」のように「ここからここまでワンセット」な処理単位のことである。

コミット

トランザクションが成功すること、つまり整合性を保って資源を更新することを、トランザクションのコミットという。トランザクションをコミットするかどうか最終的に決定するトランザクション処理の区切りを、同期点という。資源は、同期点で更新する。

ロールバック

トランザクションが失敗して、トランザクションで更新するはずの資源の状態を、トランザクション開始直前の状態に戻すことを、トランザクションロールバックという。トランザクションをコミットできなかった場合や、処理の不整合を検出した場合には,これまでの処理をロールバックで取り消して、データの整合性を保つ。

トランザクションロールバックした要因はログに取得できる。ロールバック要因をログに取得するかどうか,トランザクション関連定義のtrn_rollback_information_putオペランドで指定する。

ローカルトランザクション

単一のリソース(コンピュータとかデータベースとか)が関わっているトランザクション)のみが関わっているトランザクションのことを指す。

グローバルトランザクション

「複数のリソース(コンピュータとかデータベースとか)が関わっているトランザクション」が「グローバルトランザクション」である。「分散トランザクション」とも言う。「ワンセットなトランザクションが複数のデータベース(とか)に分散される」のがグローバルトランザクションである。

グローバルトランザクションは複数プロセスで構成される。グローバルトランザクションを構成する各プロセスを、トランザクションブランチといいます。特に、トランザクションの開始を宣言したプロセスをルートトランザクションブランチという。

ヒューリスティックハザード

ルートトランザクションブランチがトランザクションブランチにコミットの準備を指示したあとで通信障害が発生して、ルートトランザクションブランチでの決着(結果)がトランザクションブランチに届かなくなることを、ヒューリスティックハザードという。

ヒューリスティック決着

ヒューリスティックハザードが起こった場合には、コマンドを使って、トランザクションブランチごとにトランザクションを強制的に決着できます。ルートトランザクションブランチの同期点処理を待たないで、コマンドでトランザクションブランチのトランザクションを強制的に決着することを、ヒューリスティック決着という。