プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle DatabaseのためのOracle GoldenGateのインストールおよび構成
12c (12.2.0.1)
E70107-04
目次へ移動
目次

前
次

12.1 ターゲット表でのトリガーと参照カスケード制約の無効化

Replicatが非統合モードの場合、トリガーとカスケード制約をOracleターゲット表で無効にする必要があります。Oracle GoldenGateには、Oracleバージョンに応じてトリガーまたはカスケード制約を自動的に処理するオプションがいくつか用意されています。

  • Oracle 11.2.0.2以降の11gR2の各バージョンの場合、Replicatは、セッション中、トリガーによって行われる処理を無効にします。トリガーは無効になりませんが、かわりに、トリガー本体が実行されなくなります。ただし、トリガーのWHEN部分はコンパイルして実行し、データベース・エラーが起きないようにする必要があります。トリガーの起動を有効にするには、または手動で無効にするには、DBOPTIONSNOSUPPRESSTRIGGERSオプションを使用して、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である場合の次の例を検討してください。

  1. emp_srcに削除が発行されます。

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

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

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

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

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

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