Oracle パブリッシャのトランザクション レプリケーション ワークフロー
Oracle パブリッシャ用のトランザクション レプリケーションは、Microsoft SQL Server のトランザクション レプリケーション パブリッシング アーキテクチャ上に構築されていますが、パブリッシャでの変更を追跡し、それをディストリビュータに配信する処理は、標準的なトランザクション レプリケーションとは大きく異なります。違いにかかわらず、Oracle データベースで実行されたトランザクションは、一貫したトランザクション グループ内のサブスクライバで適用されます。テーブル間で外部キー参照を持つテーブルは、変更が配信されてもデータの関係が維持されます (外部キーはサブスクライバにはコピーされません)。
注 |
---|
Large Object (LOB) 型は、他のデータ型とは異なる方法で追跡されます。詳細については、「Oracle パブリッシャの設計上の注意点および制限」の「Large Object の注意点」を参照してください。 |
以下のワークフローは、Oracle パブリッシャからの変更の追跡と配信に関する主な手順の概要を示します。
変更の追跡
ユーザーまたはアプリケーションが、レプリケーション用にパブリッシュされた 1 つ以上の Oracle テーブルに対して挿入、更新、削除を行います。
パブリッシュされた各 Oracle テーブルの行が変更されると、レプリケーションによりインストールされた行レベル トリガが起動され、変更に関する情報を、テーブルに関連付けられたアーティクル ログ テーブルに格納します。
行レベル トリガが起動すると、HREPL_seq シーケンスから番号が取得され、DML 操作を示すログ テーブル行に割り当てられます。これにより、変更コマンドがサブスクライバ上で正しい順序で適用されることが保証されます。
主キーが更新された場合は、テーブルにインストールされたステートメント レベル トリガも起動され、同じステートメント中で起きる複数の主キーの更新を互いに関連付けます。ステートメント ID は、HREPL_Stmt シーケンスから取得します。これにより、サブスクライバ上で主キーの更新が正しく処理されます。
パブリッシュされた Oracle テーブルで挿入または削除された各行に対し、関連付けられたアーティクル ログ テーブルに 1 行のデータが挿入されます。Oracle テーブルの各行の更新に対し、行の以前の状態に関する情報がレプリケーションで必要かどうかに応じて、1 行 (後イメージ) または 2 行 (前イメージと後イメージ) のデータがログ テーブルに挿入されます。
ディストリビュータへの変更の配信
ログ リーダー エージェントは、ポーリング間隔にまだ関連していないアーティクル ログから、トランザクション的に一貫性を持つ変更のセットを識別し、ログ テーブル エントリの行 ID を一時的に HREPL_Poll テーブルに格納します。シーケンス HREPL_Pollid から取得した ID により、各変更エントリが、トランザクション的に一貫性を持つセットのメンバとしてマークされ、そのセットと他のセットとの相対的な処理順序が保証されます。
パブリッシュされたテーブルの変更を処理する際、行はログ テーブルから取得されます。HREPL_Pollid から取得した現在のポーリング ID を使用して、これら処理対象の行を識別します。
ログ テーブルからの変更は一括で、単一のトランザクションとしてディストリビューション データベース内でコミットされ、MSrepl_commands テーブルと MSrepl_transactions テーブルに格納されます。
その後、標準のトランザクション レプリケーションと同様に、ディストリビューション エージェントによってディストリビューション データベースから変更が読み取られ、サブスクライバに配信されます。