ソースからターゲットへの表展開変更の伝播

Oracle GoldenGateは、欠落している表イベントを含む表の変更をレプリケートします。AUTOSCHEMAが有効な場合、表マッピング中に欠落している表イベントが検出されます。具体的には、証跡ファイルからの表定義レコード(TDR)の処理中に検出されます。

次の手順では、このワークフローについて説明します。

  1. Replicatは、ターゲット表のメタデータの解決を試みます。メタデータ解決がobject not foundエラーで失敗した場合は、ターゲット表がターゲット・データベースに存在しないことを示します。

  2. AUTOSCHEMA機能が有効になっている場合は、欠落しているターゲット表に対するCREATE TABLE文が、TDRレコードのソース・メタデータに基づいて生成されます。

    1. ターゲット・データベース・タイプに基づくデフォルトのデータ型マッピング・テンプレートは、ターゲット表の列に適切なデータ型を選択する際に使用されます。

    2. CREATE TABLE文は、ユーザー・プリファレンス(指定されている場合)を考慮して、ターゲット・データベースのSQL構文に基づいて生成されます。次のプリファレンスを指定できます。

      1. Replicatパラメータ・ファイル内の対応するMAPステートメネットのTARGET句で指定されているターゲット表名。

      2. デフォルトでは、ターゲット表の列の名前はソース表の列と同じですが、COLMAPを使用して異なる名前を選択できます。

      3. TYPEMAPを使用して、特定のソース・データ型名(またはソース列)のカスタム・データ型名(ターゲット・データベースで使用可能)を選択できます。サポートされているデータ型(およびその制限)がソース・データベースとターゲット・データベース間で異なる可能性がある場合に適しています。

  3. 生成されたCREATE TABLE文を使用した新しい表の作成は、構成済のフィルタリング基準(INCLUDE/EXCLUDEルールなど)を満たす場合、レプリケーション・プロセスによって自動的に処理されます。一時的な問題が発生した場合、システムは、構成された再試行設定に応じて、変更を複数回適用しようとします。これらの再試行後にまだ変更を適用できない場合は、レプリケーションが停止し、エラーが報告されます。

ターゲット表での列展開の伝播

ターゲット表イベントの欠落している列は、表のマッピング中に検出されます。具体的には、表定義レコード(TDR)を処理しています。

  1. Replicatは、ターゲット表のメタデータの解決を試みます。この場合、ターゲット表が存在するため、メタデータの解決は失敗しませんが、有効なターゲット表定義構造が返されます。

  2. AUTOSCHEMAが有効な場合、ターゲット表定義のメタデータが、受信TDRレコードのソース表のメタデータと比較されます。これは、前のステップで取得したターゲット表定義で使用できない、TDRレコードのソース表メタデータ内の追加列を検出するためです。

    1. ターゲット・データベース・タイプに基づくデフォルトのデータ型マッピング・テンプレートは、ターゲット表の新しい列に最適なデータ型を選択する際に使用されます。

    2. ALTER TABLE ADD COLUMN文は、ターゲット・データベースのSQL構文に基づいて生成されます。

      特定のソース・データ型名(またはソース列)に対して、カスタム・データ型名(ターゲット・データベースで使用可能)を選択できます。サポートされているデータ型(およびその制限)がソース・データベースとターゲット・データベース間で異なる可能性がある場合に適しています。

  3. このような追加の列が識別された場合、既存のターゲット表のALTER TABLE ADD COLUMN文は、TDRレコード内のソース・メタデータ(特にTDRレコード内の追加列)に基づいて生成されます。

生成されたALTER TABLE DDLの実行は、対応するDDLがDDLファイル抽出基準(OBJTYPE/OPTYPE/OBJNAMEオプションを指定したDDL INCLUDE/EXCLUDE基準)を通過した場合にのみ、既存のDDLレプリケーション・インフラストラクチャによって実行されます。DDLレプリケーション・インフラストラクチャはAUTOSCHEMAにも使用されるため、致命的でないエラー・コードに対する再試行ロジックも使用されます。再試行ロジックには、構成可能な再試行回数と再試行間の遅延も含まれます。生成されたDDLの実行が再試行後も失敗した場合、Replicatは異常終了します。