9.4.1.2 2フェーズ・コミット・プロトコル
tpcommit()
関数が呼び出されると、2フェーズ・コミット・プロトコルによる通信が開始されます。このプロトコルは、その名前が示すように、次の2ステップの処理に分かれています。
- 参加する各リソース・マネージャがコミットの準備ができたことを示します。
- トランザクションのイニシエータが、参加する各リソース・マネージャにコミット許可を与えます。
トランザクションのイニシエータがtpcommit()
関数を呼び出すと、コミット・シーケンスが開始されます。指定されたコーディネータ・グループ内のOracle Tuxedo TMSサーバー・プロセスは、コミット・プロトコルの最初のフェーズを実行する各参加リソース・グループのTMSと通信を行います。次に、各グループのTMSは、そのグループのリソース・マネージャ(RM)に、トランザクション・マネージャとRM間の通信用に定義されているXAプロトコルを使用してコミットするように指示します。RMは、安定記憶域にコミット・シーケンスの前後のトランザクションの状態を書き込み、TMSに成功か失敗かを通知します。その後、TMSはトランザクション・コーディネータのTMSにレスポンスを渡します。
トランザクション・コーディネータのTMSは、すべてのグループから成功の通知を受け取ると、トランザクションのコミット中であることをログに記録し、第2フェーズのコミット通知をすべての参加リソース・グループに送信します。その後、各グループのRMはトランザクションの更新を完了します。
トランザクション・コーディネータのTMSが、グループから第1フェーズのコミットの失敗の通知を受けた場合、またはグループからの応答の受信に失敗した場合、各RMにロールバック通知を送信し、RMはすべてのトランザクション更新を以前の状態に戻します。これにより、tpcommit()
は失敗し、tperrno(5)にTPEABORT
が設定されます。