XAの概要
この項では、XAの概念について簡潔に概要を示します。
X/Open DTPモデル
アプリケーションは、TXインタフェースを使用してトランザクション・マネージャと通信します。DTPモデルでは、トランザクション・マネージャが、各グローバル・トランザクションを複数のブランチに分割し、それらを別々のリソース・マネージャに分散して処理します。トランザクション・マネージャは、XAインタフェースを使用して、各トランザクション・ブランチと適切なリソース・マネージャを組み合せます。
図6-1では、X/Open DTPモデルで定義されたインタフェースを図示し、グローバル・トランザクションをトランザクション・マネージャに伝えるアプリケーションを示します。
TXおよびXAインタフェースによって提供されるグローバル・トランザクションの制御は、ネイティブのODBCインタフェースによって提供されるローカル・トランザクションの制御とは異なります。通常は、ローカル・トランザクションとグローバル・トランザクションで別々の接続を維持することをお薦めします。アプリケーションは、TimesTenリソース・マネージャに対する接続ハンドルを取得して、同じ接続上でローカル・トランザクションおよびグローバル・トランザクションの両方を開始できます。「XA接続からODBCハンドルを取得するTimesTen tt_xa_context関数」を参照してください。
2フェーズ・コミット
XAの実装では、トランザクション・マネージャは、2フェーズ・コミットのプロトコルを使用して、分散されたグローバル・トランザクションのブランチをコミットします。
-
第1フェーズでは、トランザクション・マネージャは、各リソース・マネージャに対してコミットを準備するように命令しますが、これは、グローバル・トランザクションの各ブランチがコミット可能であることを確認し、保証するためです。リソース・マネージャでブランチをコミットできない場合、トランザクション・マネージャは第2フェーズでトランザクション全体をロールバックします。
-
第2フェーズでは、トランザクション・マネージャは、各リソース・マネージャにブランチをコミットするように命令します。また、第1フェーズでコミットできなかったことがリソース・マネージャにレポートされている場合は、グローバル・トランザクションをロールバックします。
次の最適化に注意してください。
-
トランザクション・マネージャは、グローバル・トランザクションに1つのブランチのみが含まれるように指定した場合、第1フェーズをスキップして、第2フェーズでトランザクションをコミットします。
-
グローバル・トランザクション・ブランチが読取り専用で、トランザクション・ログ・レコードが生成されない場合、トランザクション・マネージャは第1フェーズでそのブランチをコミットし、ブランチの第2フェーズをスキップします。
ノート:
トランザクション・マネージャでは、すべてのブランチが正常にコミットされた場合にのみ、グローバル・トランザクションがコミットされたと認識されます。