2.5 待機系のデータベースへの追い付き反映

XDBは,XTCと連携して,実行系のデータベースの更新内容を待機系のデータベースに逐次反映しています。これによって,系の切り替えに掛かる時間を短縮します。

実行系のデータベースが更新された場合,実行系のXDBは更新ログを生成します。この更新ログが待機系に転送され,更新ログを入力情報にして待機系のXDBがデータベースを更新します。

参考
ディスク型DBで生成されるログはデータベースのリカバリなどに使用しますが,XDBが生成する更新ログは待機系のデータベースを更新するために使用します。データベースのリカバリなどには使用しません。

待機系のデータベースへの追い付き反映処理の概要を次の図に示します。

図2-12 待機系のデータベースへの追い付き反映処理の概要

[図データ]

説明
  1. 実行系のデータベースが更新された場合,更新ログが生成されます。
  2. 生成された更新ログを待機系に転送します。この処理はXTCが行います。
  3. XDBが更新ログを入力情報にして待機系のデータベースを更新します。

各処理について次に説明します。

<この節の構成>
(1) 更新ログの生成処理
(2) 更新ログの待機系への転送処理
(3) 待機系のデータベースの更新処理
(4) 追い付き反映時の注意事項

(1) 更新ログの生成処理

TP1/EEからコミット処理の命令を受け付けると,XDBは割り当てられた領域に更新ログを格納し,更新バッファの内容をデータベースに反映します。

更新ログは,トランザクションをコミットする(データベースを更新する)ごとに生成されます。更新ログはファイルに保存されません。TP1/EEが管理するヒープ領域で生成されて,待機系への転送が完了したあとに消滅します。

更新ログは,生成されたときに,コミット通番が付与されます。待機系では,このコミット通番の順番に従って更新ログをデータベースに反映します。

参考
次に示す場合は,トランザクションがコミットしても更新ログが生成されません。
  • トランザクションによるデータベースへのアクセスがない場合
  • トランザクションによるデータ更新がない場合(参照だけの場合)
また,ロールバック処理が発生した場合,待機系に更新を反映する必要がないため,更新ログは生成されません。

(2) 更新ログの待機系への転送処理

生成された更新ログは,XTCの機能によって待機系に逐次転送されます。詳細については,マニュアル「TP1/EE/Extended Transaction Controller 使用の手引」の「CL連携による系切り替え機能」を参照してください。

(3) 待機系のデータベースの更新処理

転送された更新ログを入力情報にして待機系のデータベースを更新します。このとき,実行系で付与されたコミット通番の順番に従ってデータベースを更新します。

なお,インデクスの更新データは更新ログに含まれません。更新ログには,表の更新データだけが格納されます。このため,待機系では,インデクスの定義情報と表の更新データを基に,インデクスデータを更新します。インデクスの更新データを更新ログに含めないのは,次に示す性能上の理由によります。

また,待機系のデータベースの更新処理中にエラーが発生した場合,待機系がプロセスダウンします。実行系が待機系のプロセスダウンを検知した時点で,該当する待機系をCLサーバから切り離します。

(4) 追い付き反映時の注意事項

マシンの性能および実行環境の違いによって,実行系で発生しないエラーが待機系で発生し,追い付き反映処理が失敗することがあります。例えば,次に示すようなエラーが発生することがあります。この場合,待機系がプロセスダウンします。