ターゲット表に対するトリガーおよびカスケード制約の無効化
トリガー操作またはカスケード制約によって発生するDML操作をソース表から取得するようにOracle GoldenGateが構成されている場合は、ターゲット表でトリガー、カスケード削除制約およびカスケード更新制約を無効にします。
無効になっていない場合、同じトリガーまたは制約がターゲット表でアクティブになり、レプリケートされたデータのために重複となります。ソース表に
emp_srcとsalary_src、ターゲット表にemp_targとsalary_targを使用している次の例について考えます-
emp_srcに削除が発行されます -
それによって、削除が
salary_srcにカスケードされます。 -
Oracle GoldenGateが、両方の削除をターゲットに送信します。
-
親削除が最初に到達し、
emp_targに適用されます。 -
親削除によって、削除が
salary_targにカスケードされます。 -
salary_srcのカスケードされた削除が、salary_targに適用されます。 -
行は、すでにステップ5で削除されているため、見つかりません。
ReplicatのMAP文で、ソース表を適切なターゲットにマップし、ソース表がトリガーまたは外部キー・カスケード制約で参照する子表をマップします。データの整合性を保つには、トリガーおよびカスケードされた子操作を適切なターゲットにマップする必要があります。ExtractのTABLEパラメータに同じ親と子のソース表を含めます。