PL/SQLコードによるフィルタ

この方法は、トリガーベースのキャプチャでのみ有効です。

PL/SQLコードを記述して、DDLをExtractに渡すかどうかを判断する関数にDDLに関する情報を渡します。Extractに送信するDDL操作を少なくすることでキャプチャのパフォーマンスを向上させることができます。

  1. Oracle GoldenGateのインストール・ディレクトリにあるddl_filter.sqlファイルを、これから記述するコードをテストできるテスト・マシンにコピーします。
  2. ファイルを編集用に開きます。filterDDLという名前のPL/SQL関数が含まれており、これを変更してif/thenフィルタ基準を指定できます。この関数に渡される情報は、次のとおりです。
    • ora_owner: DDLオブジェクトのスキーマ

    • ora_name: オブジェクトの定義されている名前

    • ora_objtype: オブジェクトのタイプ(TABLEINDEXなど)

    • ora_optype: 操作のタイプ(CREATEALTERなど)

    • ora_login_user: DDLを実行したユーザー

    • retVal: Extractの処理にDDLを含める場合はINCLUDE。DDLを除外する場合はEXCLUDE

    'compute retVal here'コメントの後ろに、フィルタするDDLのタイプごとにフィルタ・コードを記述します。次に、例を示します。

    if ora_owner='SYS' then
    retVal:='EXCLUDE';
    end if;
    if ora_objtype='USER' and ora_optype ='DROP' then
    retVal:='EXCLUDE';
    end if;
    if ora_owner='JOE' and ora_name like 'TEMP%' then
    retVal:='EXCLUDE';
    end if;
    

    この例では、次のDDLが、DDLトリガーによる処理から除外されます。

    • SYSによって所有されているオブジェクトに対するDDL

    • 任意のDROP USER

    • JOE.TEMP%に対する任意のDDL

  3. (オプション)フィルタリングをトレースするには、PL/SQLの各if/then文に次の構文を追加します。
    if ora_owner='JOE' and ora_name like 'TEMP%' then
    retVal:='EXCLUDE';
    if "&gg_user" .DDLReplication.trace_level >= 1 then
    "&gg_user" .trace_put_line ('DDLFILTER', 'excluded JOE.TEMP%');
    end if;
     

    説明:

    • &gg_userは、Oracle GoldenGate DDLサポート・オブジェクトのスキーマです。

    • .DDLReplication.trace_levelは、DDLトレースのレベルです。トリガー・トレースを使用するには、Extractパラメータ・ファイルでDDLまたはDDLONLYオプションを指定してTRACEまたはTRACE2パラメータを使用する必要があります。.DDLReplication.trace_levelパラメータを>=1に設定する必要があります。

    • trace_put_lineは、Extractがトレース・ファイルに書き込む、フィルタされたDDLのタイプを表すユーザー定義テキスト文字列です。

  4. コードを保存します。
  5. テスト・システムでDDLアクティビティを停止します。
  6. SQL*Plusで次のようにddl_filter.sqlファイルをコンパイルします。ここで、schema_nameは、Oracle GoldenGate DDLオブジェクトがインストールされているスキーマです。
    @ddl_filter schema_name
    
  7. テスト環境でテストし、フィルタリングが機能することを確認します。コード内のエラーによってソースとターゲットのDDLが同期しなくなることがあるため、このテストを実行することは重要です。
  8. テストが成功したら、ファイルをソース本番システムのOracle GoldenGateのインストール・ディレクトリにコピーします。
  9. ソース・システムでDDLアクティビティを停止します。
  10. 前に行ったようにddl_filter.sqlファイルをコンパイルします。
    @ddl_filter schema_name
    
  11. ソース・システムでDDLアクティビティを停止します。