プロシージャ・レプリケーションの使用

プロシージャ・レプリケーションとその構成方法について学習します。

トピック:

プロシージャ・レプリケーションについて

プロシージャ・レプリケーションは、Oracleデータベースでのみ使用できます。Oracle GoldenGateは、プロシージャ・レプリケーションを使用して、Oracle Databaseが提供するPL/SQLプロシージャをレプリケートし、これらの操作によって通常生成される大量レコードの送信および適用を回避します。プロシージャ・レプリケーションにより、ユーザーとセッションの動作、およびディクショナリのオブジェクトの入替えを制御するディクショナリの変更が実装されます。

プロシージャ・レプリケーションはCREATEALTERおよびDROP文(DDL)のレプリケーションとは関係がなく、正確には次のようなプロシージャ・コールのレプリケーションです。

CALL procedure_name(arg1, arg2, ...);

次とは異なります:

exec procedure_name(arg1, arg2, ...)

プロシージャ・レプリケーションを有効にすると、1つのデータベースにおけるOracle Database提供パッケージのプロシージャ・コールが、1つ以上の他のデータベースにレプリケートされ、これらのデータベースで実行されます。たとえば、DBMS_REDEFINITIONパッケージのサブプログラムへのコールで、表のオンライン再定義を実行できます。いくつかのデータベースで表がレプリケートされているときに、各データベースの表に同じオンライン再定義を実行する必要がある場合、1つのデータベースでDBMS_REDEFINITIONパッケージのサブプログラムへのコールを実行すると、Oracle GoldenGateでこれらのコールを他のデータベースにレプリケートできます。

プロシージャ・レプリケーションをサポートするには、この最適化のために有効になっているプロシージャを識別できるようにOracle Databaseが構成されている必要があります。

プロシージャ・レプリケーションを使用するには、次の前提条件を満たす必要があります。

  • Oracle GoldenGateとともにExtractおよびReplicatが使用されている。

  • システムが提供するパッケージがDMLおよびDDLとの組合せのみで動作する。

プロシージャ・レプリケーション・プロセスの概要

プロシージャ・レプリケーションは、証跡レコードを使用して十分な情報をレコードとともに確実にカプセル化します。

Oracle GoldenGateのプロシージャ・レプリケーションを使用するには、この機能を有効にする必要があります。この最適化のために有効になっているプロシージャを識別するメカニズムが、Oracle Databaseに組み込まれている必要があります。

PL/SQLプラグマを使用して、レプリケートできるプロシージャを指定します。プラグマを指定すると、入力時にLogminerへのコールバックが実行されてルーチンが終了します。コールバックはプロシージャ・コールの名前と引数を指定し、プロシージャが正常に終了したかエラーで終了したかを示します。Logminerはコールバックからの情報を使用してREDOストリームを拡張します。サポートされるプロシージャの場合、プロシージャによって生成された通常のREDOは抑制され、プロシージャ・コールのみがレプリケートされます。

プロシージャ・レプリケーションを識別するために、新しい証跡レコードが生成されます。この証跡レコードでは、PL/SQLプロシージャに渡す引数に既存の証跡の列データ形式を利用します。LOBの場合、LOBに対する既存の証跡形式と同じようなチャンクとしてデータが渡されます。この証跡レコードには、ターゲットでプロシージャをそのまま再実行するために十分な情報が含まれています。

プロシージャ・レプリケーションを有効にすると、プロシージャによって影響を受ける個々のレコードの証跡ファイルへの書込みができなくなります。

PL/SQLプロシージャの適用時にエラーが発生した場合は、ReplicatがPL/SQLプロシージャ全体を再実行できます。

プロシージャ・レプリケーションがオンかどうかの判断

DBMS_GOLDENGATE_ADMパッケージのGG_PROCEDURE_REPLICATION_ON関数を使用して、Oracle GoldenGateのプロシージャ・レプリケーションがオンかオフか判別します。

Oracle Database Vault環境でプロシージャ・レプリケーションとともにOracle GoldenGateを使用する場合は、適切な権限を設定する必要があります。『Oracle Database Vault管理者ガイド』を参照してください。
プロシージャ・レプリケーションを有効にする手順:
  1. Oracle GoldenGate管理者ではなく、sys (sqlplussqlclsqldeveloper)としてデータベースに接続します。
  2. GG_PROCEDURE_REPLICATION_ON関数を実行します。

例11-18 GG_PROCEDURE_REPLICATION_ON関数の実行

SET SERVEROUTPUT ON
DECLARE
  on_or_off   NUMBER;
BEGIN
  on_or_off := DBMS_GOLDENGATE_ADM.GG_PROCEDURE_REPLICATION_ON;
  IF on_or_off=1 THEN
    DBMS_OUTPUT.PUT_LINE('Oracle GoldenGate procedural replication is ON.');
  ELSE
    DBMS_OUTPUT.PUT_LINE('Oracle GoldenGate procedural replication is OFF.');
  END IF;
END;
/

サプリメンタル・ロギングの有効化と無効化

Oracle GoldenGateのコマンドを使用して、手続き型サプリメンタル・ロギングを有効または無効にできます。

サプリメンタル・ロギングの有効化の手順:

  1. DBLOGINで、Oracle GoldenGate管理者としてソース・データベースに接続します。

    CONNECT https://localhost:9000 DEPLOYMENT demo AS ggadmin PASSWORD adminpw
    DBLOGIN USERIDALIAS ggeast DOMAIN OracleGoldenGate
  2. プロシージャ・レプリケーションのサプリメンタル・ロギングを追加します。

    ADD PROCEDURETRANDATA

    出力には次が表示されます:

    INFO OGG-13005 PROCEDURETRANDATA supplemental logging has been enabled.

プロシージャ・レプリケーションのサプリメンタル・ロギングが有効になります。

サプリメンタル・ロギングの無効化の手順:

  1. dbloginで、Oracle GoldenGate管理者としてソース・データベースに接続します。

    CONNECT https://localhost:9000 DEPLOYMENT demo AS ggadmin PASSWORD adminpw
    DBLOGIN USERIDALIAS ggeast DOMAIN OracleGoldenGate
  2. プロシージャ・レプリケーションのサプリメンタル・ロギングを削除します。

    DELETE PROCEDURETRANDATA

プロシージャ・レプリケーションのサプリメンタル・ロギングが無効になります。

サプリメンタル・ロギングに関する情報を表示する手順:

  1. dbloginで、Oracle GoldenGate管理者としてソース・データベースに接続します。

    CONNECT https://localhost:9000 DEPLOYMENT demo AS ggadmin PASSWORD adminpw
    DBLOGIN USERIDALIAS ggeast DOMAIN OracleGoldenGate
  2. プロシージャ・レプリケーションのサプリメンタル・ロギング情報を表示します。

    INFO PROCEDURETRANDATA

プロシージャ・レプリケーションのサプリメンタル・ロギング情報が表示されます。

プロシージャ・レプリケーションの機能のフィルタリング

プロシージャとパッケージのうち、プロシージャ・レプリケーションのために含めるものまたは除外するものを指定できます。

機能グループを使用して、サポートされるパッケージとプロシージャをグループ化します。INCLUDEまたはEXCLUDEキーワードを指定してプロシージャ・パラメータを使用し、プロシージャ・レプリケーションのための機能をフィルタできます。

プロシージャ・パラメータでは、INCLUDEまたはEXCLUDEによってフィルタリング句の開始が指定されます。レプリケートするプロシージャ(INCLUDE)またはフィルタにより除外するもの(EXCLUDE)を指定します。フィルタリング句にはINCLUDE ALL_SUPPORTEDまたはEXCLUDE ALL_SUPPORTEDキーワードを含め、その後にプロシージャ・パラメータの他のフィルタリング・オプションの有効な組合せを追加する必要があります。EXCLUDEフィルタは、同じ基準を含むINCLUDEフィルタより優先されます。

ノート:

Oracle Streamsアドバンスト・キューイング(AQ)プロシージャをレプリケートする場合、パラメータ・ファイルで次のようにRULEオプションを使用する必要があります。

PROCEDURE INCLUDE FEATURE ALL_SUPPORTED

または

PROCEDURE INCLUDE FEATURE AQ, RULE

RULEオプションを付けずにPROCEDURE INCLUDE FEATURE AQを使用しないでください

Extractで、システムが提供するすべてのパッケージを含めます。

  1. ソース・データベースでExtractに接続します。

    EXTRACT edba

    USERIDALIAS admin_dbA DOMAIN ORADEV

  2. 新しい証跡ファイルを作成します。

    EXTTRAIL ea

  3. 有効になっていない場合は、プロシージャ・レプリケーションを有効にします。

    TRANLOGOPTIONS INTEGRATEDPARAMS (ENABLE_PROCEDURAL_REPLICATION Y)

  4. プロシージャ・レプリケーションのフィルタを含めます。

    PROCEDURE INCLUDE FEATURE ALL_SUPPORTED

これで、プロシージャ・レプリケーションのために、システムが提供するすべてのパッケージが含まれました。

Replicatで特定のパッケージを除外する手順:

  1. ターゲット・データベースのReplicatに接続します。

    REPLICAT rdba

    USERIDALIAS admin_dbBDOMAIN ORADEV

  2. プロシージャ・レプリケーションのフィルタを含めます。

    PROCEDURE EXCLUDE FEATURE RLS

これで、プロシージャ・レプリケーションのために特定のパッケージが正常に除外されました。

プロシージャ・レプリケーション・エラーの処理

プロシージャ・レプリケーションでは、REPERRORパラメータを使用して、プロシージャ・エラーが発生したときのReplicatの動作を構成します。

デフォルトでは、プロシージャ・レプリケーションが発生するとReplicatが異常終了するため、次のステップでエラー処理を設定してください。

  1. ターゲット・データベースのReplicatに接続します。

    REPLICAT rdba

    USERIDALIAS admin_dbBDOMAIN ORADEV

  2. プロシージャ・レプリケーションのフィルタを含めます。

    PROCEDURE EXCLUDE FEATURE RLS

  3. エラー処理パラメータを指定します。その他のオプションについては、『Oracle GoldenGateリファレンス』REPERRORに関する項を参照してください。

    REPERROR (PROCEDURE, DISCARD)

これで、プロシージャ・レプリケーションのエラーが正常に処理されました。

Oracle GoldenGateプロシージャ・レプリケーションでサポートされているプロシージャのリスト

DBA_GG_SUPPORTED_PROCEDURESビューに、Oracle GoldenGateのプロシージャ・レプリケーションでサポートされるパッケージについての情報が表示されます。

プロシージャがサポートされ、Oracle GoldenGateのプロシージャ・レプリケーションがオンの場合は、プロシージャが明確に除外されていないかぎり、プロシージャに対するコールがレプリケートされます。
  1. Oracle GoldenGate管理者ではなく、sys (sqlplussqlclsqldeveloper)としてデータベースに接続します。
  2. DBA_GG_SUPPORTED_PROCEDURESビューを問い合せます。

例11-19 Oracle GoldenGateのプロシージャ・レプリケーションでサポートされるパッケージに関する情報の表示

この問合せでパッケージに関する次の情報を表示します。

  • 各パッケージの所有者

  • 各パッケージの名前

  • 各プロシージャの名前

  • プロシージャがサポートされる最小データベース・リリース

  • 一部のデータベース・オブジェクトについてプロシージャのレプリケーションを抑制する除外ルールがあるかどうか

COLUMN OWNER FORMAT A10
COLUMN PACKAGE_NAME FORMAT A15
COLUMN PROCEDURE_NAME FORMAT A15
COLUMN MIN_DB_VERSION FORMAT A14
COLUMN EXCLUSION_RULE_EXISTS FORMAT A14

SELECT OWNER,
       PACKAGE_NAME,
       PROCEDURE_NAME,
       MIN_DB_VERSION,
       EXCLUSION_RULE_EXISTS
  FROM DBA_GG_SUPPORTED_PROCEDURES;

出力結果は次のようになります。

OWNER      PACKAGE_NAME    PROCEDURE_NAME  MIN_DB_VERSION EXCLUSION_RULE
---------- --------------- --------------- -------------- --------------
XDB        DBMS_XDB_CONFIG ADDTRUSTMAPPING 12.2           NO
CTXSYS     CTX_DDL         ALTER_INDEX     12.2           NO
SYS        DBMS_FGA        DROP_POLICY     12.2           NO
SYS        XS_ACL          DELETE_ACL      12.2           NO
.
.
.

Oracle GoldenGateプロシージャ・レプリケーションの監視

一連のデータ・ディクショナリ・ビューによってOracle GoldenGateプロシージャ・レプリケーションを監視できます。

次のビューを使用して、Oracle GoldenGateのプロシージャ・レプリケーションをモニターできます。

ビュー 説明

DBA_GG_SUPPORTED_PACKAGES

Oracle GoldenGateのプロシージャ・レプリケーションでサポートされるパッケージに関する詳細が表示されます。

パッケージがサポートされ、Oracle GoldenGateのプロシージャ・レプリケーションがオンの場合は、パッケージ内のサブプログラムに対するコールがレプリケートされます。

DBA_GG_SUPPORTED_PROCEDURES

Oracle GoldenGateのプロシージャ・レプリケーションでサポートされるプロシージャに関する詳細が表示されます。

DBA_GG_PROC_OBJECT_EXCLUSION

Oracle GoldenGateのプロシージャ・レプリケーションの除外リストに含まれるすべてのデータベース・オブジェクトに関する詳細が表示されます。

データベース・オブジェクトを除外リストに追加するには、DBMS_GOLDENGATE_ADMパッケージのINSERT_PROCREP_EXCLUSION_OBJプロシージャを使用します。データベース・オブジェクトが除外リストに含まれる場合、サブプログラムが除外されたオブジェクトに対して動作する場合は、パッケージのサブプログラムの実行はレプリケートされません。

  1. Oracle GoldenGate管理者ではなく、sys (sqlplussqlclまたはsqldeveloper)としてデータベースに接続します。
  2. Oracle GoldenGateのプロシージャ・レプリケーションに関連するビューを問い合せます。