Oracle® Fusion Middleware Oracle DatabaseのためのOracle GoldenGateのインストールおよび構成 12c (12.2.0.1) E70107-04 |
|
![]() 前 |
![]() 次 |
Replicatが非統合モードの場合、トリガーとカスケード制約をOracleターゲット表で無効にする必要があります。Oracle GoldenGateには、Oracleバージョンに応じてトリガーまたはカスケード制約を自動的に処理するオプションがいくつか用意されています。
Oracle 11.2.0.2以降の11gR2の各バージョンの場合、Replicatは、セッション中、トリガーによって行われる処理を無効にします。トリガーは無効になりませんが、かわりに、トリガー本体が実行されなくなります。ただし、トリガーのWHEN
部分はコンパイルして実行し、データベース・エラーが起きないようにする必要があります。トリガーの起動を有効にするには、または手動で無効にするには、DBOPTIONS
のNOSUPPRESSTRIGGERS
オプションを使用して、USERIDALIAS
パラメータの後に文を配置します。特定のトリガーの起動を許可するには、次のデータベース・プロシージャを使用します。trigger_owner
はトリガーの所有者で、trigger_name
はトリガーの名前です。特定のトリガーに対してプロシージャがFALSE
でコールされると、そのプロシージャがTRUE
でコールされるまで設定されたままになります。
dbms_ddl.set_trigger_firing_property(trigger_owner
"trigger_name
", FALSE)
Oracle 11.2.0.2以降の11gR2の各バージョンの場合、DEFERREFCONST
オプションを指定してDBOPTIONS
パラメータを使用し、Replicatトランザクションがコミットされるまで、カスケード更新およびカスケード削除の制約のチェックおよび強制を延期できます。
他のOracleのバージョンの場合、トリガーと整合性制約を無効にするか、それらを手動で変更して、Replicatデータベース・ユーザーを無視します。
Oracle GoldenGateでは、トリガーまたはカスケード制約の発生によって生じたDMLがレプリケートされるため、Replicatが非統合モードの場合は制約を無効にする必要があります。同じトリガーや制約がターゲット表でアクティブになった場合、レプリケートされたバージョンのために重複となり、データベースでエラーが返されます。ソース表がemp_src
およびsalary_src
、ターゲット表がemp_targ
およびsalary_targ
である場合の次の例を検討してください。
emp_src
に削除が発行されます。
それによって、削除がsalary_src
にカスケードされます。
Oracle GoldenGateが、両方の削除をターゲットに送信します。
親削除が最初に到達し、emp_targ
に適用されます。
親削除によって、削除がsalary_targ
にカスケードされます。
salary_src
からカスケードされた削除がsalary_targ
に適用されます。
行は、すでに手順5で削除されているため、見つかりません。