処理のための表の準備

次の表属性は、PostgreSQLのOracle GoldenGate環境で対処する必要があります。

ターゲット表に対するトリガーおよびカスケード制約の無効化

トリガー操作またはカスケード制約によって発生するDML操作をソース表から取得するようにOracle GoldenGateが構成されている場合は、ターゲット表でトリガー、カスケード削除制約およびカスケード更新制約を無効にします。

無効になっていない場合、同じトリガーまたは制約がターゲット表でアクティブになり、レプリケートされたデータのために重複となります。ソース表にemp_srcsalary_src、ターゲット表にemp_targsalary_targを使用している次の例について考えます
  1. emp_srcに削除が発行されます

  2. それによって、削除がsalary_srcにカスケードされます。

  3. Oracle GoldenGateが、両方の削除をターゲットに送信します。

  4. 親削除が最初に到達し、emp_targに適用されます。

  5. 親削除によって、削除がsalary_targにカスケードされます。

  6. salary_srcのカスケードされた削除が、salary_targに適用されます。

  7. 行は、すでにステップ5で削除されているため、見つかりません。

ReplicatのMAP文で、ソース表を適切なターゲットにマップし、ソース表がトリガーまたは外部キー・カスケード制約で参照する子表をマップします。データの整合性を保つには、トリガーおよびカスケードされた子操作を適切なターゲットにマップする必要があります。ExtractのTABLEパラメータに同じ親と子のソース表を含めます。

表における行の一意性の保証

Oracle GoldenGateでは、レプリケートされた更新および削除に対して正しいターゲット行を見つけるために、ソース表とターゲット表にある形式の一意の行識別子が必要です。

TABLEまたはMAP文でKEYCOLS句が使用されないかぎり、Oracle GoldenGateは、使用する行識別子を次の優先順位に従って選択します。
  1. 主キー

  2. タイムスタンプまたはマテリアライズされていない計算結果列を含まない英数字順で最初の一意キー。

  3. 前述のキー・タイプのいずれも存在しない場合(その他の種類のキーが表に定義されている場合でも)、Oracle GoldenGateは、データベースで一意キーでの使用を許可されているすべての列(キー内での使用がOracle GoldenGateでサポートされていない列やOracle GoldenGate構成から除外されている列は除く)で疑似キーを作成します。PostgreSQL LOBタイプ(textxmlbyteacharvarcharなど)の場合、Oracle GoldenGateでは、長さ8191バイトまで、これらの列がソース表またはターゲット表の主キーとしてサポートされます。

    ノート:

    表に使用可能な他のキーがない場合や、表にキーがまったくない場合、Oracle GoldenGateは該当するメッセージをレポート・ファイルに記録します。すべての列からキーを作成すると、ソース・システムのOracle GoldenGateのパフォーマンスが低下します。ターゲットでは、このキーはReplicatであまり効率的でないより大きいWHERE句が使用される原因となります。

    表に一意性がなく、同じ値を含む繰返し行が存在する場合、Replicatは、これらの行の更新および削除操作時に異常終了します。

  4. 表に適切なキーがない場合、あるいは既存のキーを使用しない場合は、表に一意の値が常に含まれる列があれば、代替キーを定義できます。ExtractのTABLEパラメータおよびReplicatのMAPパラメータ内にKEYCOLS句を含めることで、この代替キーを定義します。指定したキーにより、Oracle GoldenGateで検出される既存の主キーまたは一意キーはオーバーライドされます。Oracle GoldenGateリファレンスTABLE | MAPを参照してください。

表レベルのサプリメンタル・ロギングの有効化

サプリメンタル・ロギングの有効化のプロセスでは、Oracle GoldenGateにより、ソース・データベースの表レベルのロギングが、ソースDML操作のチェンジ・データ・キャプチャをサポートするように設定され、ロギングのレベルに応じて、競合の検出と解決が構成された双方向レプリケーションなどの場合に必要となる、変更されない追加の列が含められます。

PostgreSQLには、表のREPLICA IDENTITY設定に相当する4つのレベルの表レベルのロギングがあり、これらのレベルにはNOTHINGUSING INDEXDEFAULTおよびFULLが含まれます。

Oracle GoldenGateでは、非圧縮の証跡レコードおよび競合の検出と解決を必要とするユースケースにFULLロギングが必要ですが、単純な単方向構成で変更がレプリケートされる主キーまたは一意索引が表に存在する場合、またはイメージ前レコードや非圧縮レコード全体が不要である場合は、DEFAULTレベルを使用できます。NOTHINGおよびUSING INDEXロギング・レベルはOracle GoldenGateでサポートされておらず、ADD TRANDATAでは設定できません。

次に、GGSCIからADD TRANDATAを発行する構文を示します。
GGSCI> DBLOGIN SOURCEDB dsn_name USERIDALIAS alias_name
GGSCI> ADD TRANDATA schema.tablename ALLCOLS

ノート:

主キーまたは一意索引が存在する表では、表に対してFULLロギングを設定するためにALLCOLSオプションが必要であり、それ以外の場合は、DEFAULTロギングが設定されます。

FULLロギングは、ALLCOLSが指定されているかどうかに関係なく、主キーまたは一意索引が存在しない表に対して常に設定されます。

サプリメンタル・ロギングのレベルをチェックするには、次のようにします。
GGSCI> INFO TRANDATA schema.tablename