2 フェーズ コミット (two-phase commit)

特定のビジネス ロジックの操作には、複数のコンピューター上で実行される複数のプログラムを含めることができます。 この設計では、関連するすべてのプログラムの実行が正常に完了しない限り、トランザクションは完了しているとは見なされません。 このようなプログラムで、トランザクションの一部である他のすべてのプログラムでトランザクションが完了したことを確認するには、2 フェーズ コミット (2PC) プロトコルを使用する必要があります。

トランザクションという用語 (またはトランザクションの派生語など) は、誤解を招く可能性があります。 多くの場合、トランザクションという用語では、2PC プロトコルを使用しないメインフレーム コンピューター上で実行する単一のプログラムを表します。 ただし、その他の場合、これは 2PC プロトコルを使用している複数のコンピューター上の複数のプログラムによって実行される操作を示すために使用される場合もあります。

2PC プロトコルという名前の由来は、実行される操作をコミットする前に次の 2 つのフェーズを使用するためです。

  • フェーズ 1 — 準備。 このフェーズでは、トランザクションに含まれる各プログラムから TP マネージャー (Microsoft 分散トランザクション コーディネーター (MS DTC) など) にメッセージが送信され、各自が担当する操作の部分を実行する準備ができていることが TP マネージャーに通知されます。 このフェーズは準備とも呼ばれます。変更のコミット、変更のロールバックいずれかを実行するためにプログラムが準備されるためです。 TP マネージャーが関連する各プログラムから確認を受け取ると、フェーズ 2 に進みます。

  • フェーズ 2 — コミットまたはロールバック。 このフェーズでは、TP マネージャーから各プログラムに対して、トランザクションの一部として要求された変更のすべてをコミットまたはロールバックするように指示が送られます。 正常に実行されたロールバックでは、システムが元の状態に戻ります。

Note

フェーズ 1 とフェーズ 2 の間の状態は、インダウト状態と呼ばれます。 アプリケーションで .NET を使用している開発者は、アプリケーションのどの部分で TP へのアクセスが必要か、どの部分で必要でないかを決定できます。 TI により、トランザクションを要求する呼び出しと要求しない呼び出しを処理することで、この選択がメインフレームにも拡張されます。 Windows ベースの 2 フェーズ コミットとメインフレームベースの同期レベル 2 トランザクションの間の完全な統合が必要なアプリケーションでは、TI によって必要なすべての機能が提供されます。 TI ではこれを実行するために、クライアント アプリケーションを変更する必要がなく、メインフレームに実行可能コードを配置せず、メインフレームの TP をほとんどまたはまったく変更する必要がありません。 クライアント アプリケーションでは、TI コンポーネントと他のコンポーネント参照を区別する必要がありません。

次の図は、Windows ベースのクライアント アプリケーションが暗黙的に Microsoft 分散トランザクション コーディネーター (DTC) を使用して、SQL Server と CICS TP を含む分散トランザクションの 2 フェーズ コミットを調整する仕組みを示しています。 DTC によって 2PC トランザクションが調整されます。

トランザクション インテグレーターと DTC を使用して、SQL Serverと CICS アプリケーション間の 2 フェーズ コミットを調整するクライアント アプリケーションを示す図。
トランザクション インテグレーターと DTC を使用して、SQL Server と CICS アプリケーションの間の 2 フェーズ コミットを調整するクライアント アプリケーション

Note

トランザクション インテグレーターでは、LU 6.2 (APPC) 経由で、Windows 側開始の処理でメインフレームに接続する場合にのみ、2PC がサポートされます。 TCP/IP 経由で直接接続する場合、TI を介して利用できる 2PC サポートはありません。

TI と DTC を使用するクライアント アプリケーション

2 フェーズ コミット (2PC) トランザクションには、多くのコンポーネントが含まれます。 トランザクション インテグレーター (TI) を正しく使用するには、次の 2PC コンポーネントと用語を理解する必要があります。

同期ポイント レベル 2
TP は、同期の 3 つのレベル (同期レベル 0、同期レベル 1、または同期レベル 2) のいずれかで LU6.2 プロトコルを使用することで、相互に対話できます。 これら 3 つの同期レベルのうち 1 つ (同期レベル 2) だけが 2PC プロトコルを使用します。 同期レベル 0 ではメッセージの整合性がなく、同期レベル 1 では制限付きのデータの整合性がサポートされます。

TP マネージャー
トランザクション プログラム (TP) マネージャーは、原子性を実現できるようにするためにトランザクションの結果を調整するシステム サービスです。 TP マネージャーによって、トランザクションをコミットするか中止するかについてリソース マネージャーで一貫した意思決定が行われます。 Windows TP マネージャーは MS DTC です。

再同期サービス
LU6.2 Resync Service は、MS DTC と連携して、2PC トランザクションの任意の時点で障害が発生した結果、一貫性のある状態への自動復旧を実行するホスト統合サーバーのコンポーネントです。 LU6.2 Resync サービスは、ホスト統合サーバーのインストール時に既定でインストールされます。

リソース マネージャー
リソース マネージャーは、永続的なデータを管理するシステム サービスです。 サーバー アプリケーションでは、リソース マネージャーを使用してアプリケーションの永続的な状態を維持します (使用可能な在庫、保留中の注文、売掛金に関する記録など)。 リソース マネージャーは、トランザクション マネージャーと連携して、(2PC プロトコルを使用して) アプリケーションに原子性と分離の保証を提供します。 Microsoft SQL Server™ と TI はリソース マネージャーの例です。

関連項目

Windows トランザクションとメインフレーム トランザクション
オンライン トランザクション処理