管理の手引き


2 フェーズ・コミット・プロセスについて

図 42 は複数サイト更新に関連したステップを示しています。 トランザクションが管理される仕方を理解しておけば、 2 フェーズ・コミット処理中にエラーが発生した場合に問題の解決に役立ちます。

図 42. 複数のデータベースの更新


複数のデータベースの更新

(0)
アプリケーションは 2 フェーズ・コミットに備えて準備済みになります。 これは事前コンパイル・オプションを使用して行われます (詳細については、アプリケーション開発の手引き を参照してください)。 また、DB2 CLI (コール・レベル・インターフェース) 構成を使用してこれを 行うこともできます (詳細については、コール・レベル・インターフェースの手引きおよび解説書 を参照してください)。

(1)
データベース・クライアントがデータベース SAVINGS_DB に接続しようとするとき、 まず内部でトランザクション・マネージャー (TM) データベースに接続します。 TM データベースは、データベース・クライアントに対し肯定応答を戻します。 データベース・マネージャー構成パラメーター tm_database1ST_CONN に設定されていれば、 このアプリケーション・インスタンスの存続期間中は SAVINGS_DB が トランザクション・マネージャーになります。

(2)
データベース SAVINGS_DB に対する接続が行われ、肯定応答が受信されます。

(3)
データベース・クライアントは SAVINGS_ACCOUNT 表の更新を開始します。 これにより、作業単位が始まります。 TM データベースはデータベース・クライアントに対し応答し、 作業単位のトランザクション ID を送信します。 作業単位が登録されるのは、接続の確立時ではなく、 作業単位内の最初の SQL ステートメントの実行時であることに注意してください。

(4)
データベース・クライアントは、トランザクション ID を受信すると、 この作業単位を SAVINGS_ACCOUNT 表を含むデータベースに登録します。 作業単位登録が正常完了したことを通知する応答がクライアントに送り返されます。

(5)
データベース SAVINGS_DB に対し出された SQL ステートメントは、 通常の方法で処理されます。 各ステートメントに対する応答は、 プログラムに組み込まれている SQL ステートメントの処理時に SQLCA に戻されます。 (SQLCA については、アプリケーション開発の手引き および SQL 解説書 で説明されています。)

(6)
作業単位中で最初にそのデータベースにアクセスするとき、 TRANSACTION_FEE 表が入っている FEE_DB データベースにトランザクション ID が登録されます。

(7)
FEE_DB データベースに対するすべての SQL ステートメントが通常の方法で処理されます。

(8)
接続を適切に設定することによって、 データベース SAVINGS_DB に対してさらに SQL ステートメントを実行できます。 作業単位はすでにデータベース SAVINGS_DB に登録されているため (4)、 データベース・クライアントは再び登録ステップを実行する必要はありません。

(9)
データベース CHECKING_DB に接続してそれを使用する方法は、 (6) および (7) と同じ規則に従います。

(10)
データベース・クライアントからこの作業単位をコミットするよう要求が出されると、 この作業単位に関係しているすべてのデータベースに対して準備 メッセージが送信されます。 各データベースは "PREPARED" レコードをログ・ファイルに書き込み、 データベース・クライアントに対して応答を戻します。

(11)
すべてのデータベースから肯定応答を受信すると、 データベース・クライアントはトランザクション・マネージャー・データベースにメッセージを送信して、 作業単位のコミット準備が完了した (PREPARED) ことを通知します。 トランザクション・マネージャー・データベースは、 "PREPARED" レコードをそのログ・ファイルに書き込み、 クライアントにメッセージを送信して、 コミット・プロセスの第 2 フェーズが開始可能になったことを通知します。

(12)
コミット・プロセスの第 2 フェーズ実行時に、 データベース・クライアントはすべての参加データベースに、 コミットするよう依頼するメッセージを送信します。 それぞれのデータベースが "COMMITTED" レコードをそのログ・ファイルに書き込み、 この作業単位に保持していたロックを解放します。 データベースが変更内容のコミットを完了すると、クライアントに応答を送信します。

(13)
すべての参加データベースから肯定応答を受信すると、 データベース・クライアントはトランザクション・マネージャー・データベースに対して、 作業単位が完了したことを通知するメッセージを送ります。 その後、トランザクション・マネージャー・データベースは作業単位が完了したことを 示す "COMMITTED" レコードをログ・ファイルに記録し、 クライアントに対して作業単位が完了したという応答を送ります。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]