Oracle® Fusion Middleware Oracle DatabaseのためのOracle GoldenGateのインストールおよび構成 12c (12.2.0.1) E70107-04 |
|
![]() 前 |
![]() 次 |
次の方法を使用して、要件に応じて特定(またはすべて)のDDLがターゲット・データベースに適用されるよう、DDL操作をフィルタできます。デフォルトでは、すべてのDDLがExtractに渡されます。
PL/SQLコードによるフィルタ: トリガーベースのDDLキャプチャでのみ有効です。この方法では、DDL操作が発生するとDDLトリガーによってコールされるOracle関数を使用してDDLをExtractに送信するかどうかを判断します。PL/SQLコードによるフィルタは、DDLトリガーが使用されている場合に、ソース・データベースのパフォーマンスを改善するためにのみ使用する必要があります。組込みルールおよびDDLパラメータによるフィルタと組み合せることができます(次を参照)。DDLトリガーまたはフィルタ・ルールによってフィルタされた後でExtractに渡されるDDLを、DDL
パラメータを使用して特定のニーズにあわせてさらにフィルタできます。
組込みフィルタ・ルールによるフィルタ: トリガーベースのDDLキャプチャでのみ有効です。この方法では、フィルタ・ルールをOracle GoldenGateトリガー・ロジックに組み込むために実行するプロシージャを使用します。この方法では、Extractに送信するオブジェクトのタイプを注意深く制御でき、ルールの評価の順序付けが可能です。この方法は、DDLトリガーが使用されている場合に、ソース・データベースのパフォーマンスを改善するためにのみ使用する必要があります。組込みルールをPL/SQLおよびDDLパラメータによるフィルタと組み合せることができます。DDLトリガーまたはフィルタ・ルールによってフィルタされた後でExtractに渡されるDDLを、DDL
パラメータを使用して特定のニーズにあわせてさらにフィルタできます。
注意:
統合キャプチャ・モードで動作するExtractの場合、PL/SQLまたは組込みフィルタ・ルールによるフィルタは不要です。Extractがクラシック・モードで動作する必要がある場合に、これらのフィルタリング方法を使用する際は、フィルタ処理済オブジェクトに関連付けられている任意のトランザクション・データ(DML)に対して同じフィルタ処理を行う必要があります。たとえば、ACCOUNTS
という名前の表を作成するDDLをフィルタ処理で除外する場合は、ACCOUNTS
表がTABLE
文またはMAP
文で指定されないようにするか、適切な除外パラメータを使用してワイルドカードの解決から除外する必要があります。ワイルドカード除外パラメータのリストについては、Oracle GoldenGateリファレンスfor Windows and UNIXを参照してください。
DDLパラメータによるフィルタ: トリガーベースとネイティブDDLの両方で有効です。これは推奨されるフィルタリング方法で、Oracle GoldenGate内で実行され、ExtractとReplicatの両方でフィルタ基準を実行できます。Extractでフィルタリングを行うか、すべてのDDLを証跡に送り、Replicatでフィルタリングを行います。あるいは、異なる場所の組合せでフィルタすることもできます。DDL
パラメータでは、フィルタリングを行う場所を制御でき、DDLスコープに基づいてまとめてフィルタする(すべてのMAPPED
スコープを含めるなど)機能など、トリガーの方法よりも多くのフィルタリング・オプションがあります。
注意:
TRANSACTION
の実行中にDDL操作が失敗すると、コミットが強制されます(DDLにまたがるトランザクションが2つに分割されます)。前半はコミットされ、後半を再起動できます。リカバリが実行されると、トランザクションのヘッダーに含まれる情報がなくなるため、トランザクションの後半をフィルタすることはできません。
この方法は、トリガーベースのキャプチャでのみ有効です。
PL/SQLコードを記述して、DDLをExtractに渡すかどうかを判断する関数にDDLに関する情報を渡します。Extractに送信するDDL操作を少なくすることでキャプチャのパフォーマンスを向上させることができます。
この方法は、トリガーベースのキャプチャでのみ有効です。
選択ルールまたは除外ルールを追加して、DDLトリガーによってExtractに送信されるDDL操作を制御できます。ルールを格納し、Extractに送信するDDL操作を少なくすることでキャプチャのパフォーマンスを向上させることができます。
DDLAUX.addRule()
関数を使用して、次のガイドに則したルールを定義します。この関数は、ddl_setup.sql
スクリプトを使用してDDLオブジェクトがインストールされた後にOracle GoldenGate DDLスキーマにインストールされます。 DDLAUX.addRule()
関数の定義FUNCTION addRule( obj_name IN VARCHAR2 DEFAULT NULL, base_obj_name IN VARCHAR2 DEFAULT NULL, owner_name IN VARCHAR2 DEFAULT NULL, base_owner_name IN VARCHAR2 DEFAULT NULL, base_obj_property IN NUMBER DEFAULT NULL, obj_type IN NUMBER DEFAULT NULL, command IN VARCHAR2 DEFAULT NULL, inclusion IN boolean DEFAULT NULL , sno IN NUMBER DEFAULT NULL) RETURN NUMBER;
DDLAUX.addRule()
のパラメータこの関数に渡される情報は次のパラメータで、オブジェクトの属性と関連しています。すべてのパラメータがオプションで、複数のパラメータを指定できます。
sno
: ルールを識別するシリアル番号を指定します。ルールの評価は、シリアル番号の小さいものから大きいものの順に、一致が見つかるまで行われます。sno
を使用して除外ルールの前に選択ルールを置き、除外ルールの例外を作成できます。これはファンクションでプロシージャではないため、ルールのシリアル番号を返します。これを使用して削除するルールをDDLAUX.dropRule()
に指定します。コードの冒頭でDECLARE sno NUMBER; BEGIN sno :=
を使用して指定しないかぎり、シリアル番号は自動的に生成されます。
次に例を示します。
DECLARE sno NUMBER; BEGIN sno := tkggadmin..DDLAUX.ADDRULE(obj_name => 'GGS%' , obj_type => TYPE_TABLE); END; /
obj_name
: オブジェクト名を指定します。名前に大文字と小文字の区別がある場合は、二重引用符で囲みます。
owner_name
: オブジェクトのスキーマの名前を指定します。
base_obj_name
: DDLオブジェクトのベース・オブジェクト名を指定します(オブジェクトが索引の場合のベース表など)。名前に大文字と小文字の区別がある場合は、二重引用符で囲みます。
base_owner_name
: ベース・オブジェクトのスキーマ名を指定します。
base_obj_property
: ベース・オブジェクトのプロパティを指定します。「DDLAUX.addRule()に対して有効なDDLコンポーネント」を参照してください。
obj_type
: オブジェクト・タイプを指定します。「DDLAUX.addRule()に対して有効なDDLコンポーネント」を参照してください。
command
: コマンドを指定します。「DDLAUX.addRule()に対して有効なDDLコンポーネント」を参照してください。
inclusion = TRUE
: 指定されたオブジェクトがDDLトリガーによってキャプチャされることを示します。このパラメータが指定されない場合、ルールは除外ルールとなり、指定されたオブジェクトはキャプチャされません。除外ルールと選択ルールの両方を指定できます。DDLがルールのいずれにも一致しない場合、デフォルトで選択されます(Extractに渡されます)。パラメータなしでDDLAUX.addRule()
をコールすると、すべてのオブジェクトに対するすべてのDDLを除外する空のルールが生成されます。
関数コードで指定できる定義済DDLオブジェクト・タイプ、ベース・オブジェクト・プロパティおよびDDLコマンドは次のとおりです。
有効なオブジェクトは次のとおりです。
TYPE_INDEX
TYPE_TABLE
TYPE_VIEW
TYPE_SYNONYM
TYPE_SEQUENCE
TYPE_PROCEDURE
TYPE_FUNCTION
TYPE_PACKAGE
TYPE_TRIGGER
有効なベース・オブジェクト・プロパティは次のとおりです。
TB_IOT
TB_CLUSTER
TB_NESTED
TB_TEMP
TB_EXTERNAL
有効なコマンドは次のとおりです。
CMD_CREATE
CMD_DROP
CMD_TRUNCATE
CMD_ALTER
次の例では、名前がIMPTEMP
で始まる表以外のすべての一時表を除外します。
1. DDLAUX.ADDRULE(obj_name => 'IMPTEMP%', base_obj_property => TB_TEMP, obj_type => TYPE_TABLE, INCLUSION => TRUE); 2. DDLAUX.ADDRULE(base_obj_property => TB_TEMP, obj_type => TYPE_TABLE);
注意:
IMPTEMP%
表を含めるため、そのルールを先にします。
次の例では、名前が'GGS%
'のすべての表を除外します。
DECLARE sno NUMBER; BEGIN sno := DDLAUX.ADDRULE(obj_name => 'GGS%' , obj_type => TYPE_TABLE); END
次の例では、すべての一時表を除外します。
DDLAUX.ADDRULE(base_obj_property => TB_TEMP, obj_type => TYPE_TABLE);
次の例では、TEMP
表のすべての索引を除外します。
DDLAUX.ADDRULE(base_obj_property => TB_TEMP, obj_type => TYPE_INDEX);
次の例では、スキーマTKGGADMIN
のすべてのオブジェクトを除外します。
DDLAUX.ADDRULE(owner_name => 'TKGGADMIN');
次の例では、TEMP
表に対するTRUNCATE
操作のすべてのオブジェクトを除外します。
DDLAUX.ADDRULE(base_obj_property => TB_TEMP, obj_type => TYPE_TABLE, command => CMD_TRUNCATE)
この方法は、トリガーベースのキャプチャ・モードおよび統合キャプチャ・モードでのみ有効です。
DDL
パラメータは、ExtractおよびReplicatプロセス内でDDLをフィルタリングするための主要なOracle GoldenGateパラメータです。
オプションを指定せずに使用すると、DDL
パラメータによるフィルタリングが実行されず、すべてのDDL操作が次のように伝播されます。
Extractパラメータとして、サポートされているすべてのデータベース・オブジェクトで生成された、サポートされている全DDL操作が取得されて証跡に送信されます。
Replicatパラメータとして、Oracle GoldenGateの証跡からすべてのDDL操作がレプリケートされ、ターゲットに適用されます。これは、このパラメータを使用しない場合のデフォルトの動作と同じです。
オプションを指定して使用すると、DDL
パラメータがフィルタリング・エージェントとして機能し、次に基づいてDDL操作が含まれるか除外されます。
スコープ
オブジェクト・タイプ
操作タイプ
オブジェクト名
DDLコマンド構文またはコメント、あるいはその両方の文字列
パラメータ・ファイルで使用できるDDL
パラメータは1つのみですが、他のオプションとともに複数の選択オプションと除外オプションを組み合せて、必要なレベルまでDDLをフィルタできます。
DDL
フィルタリング・オプションは、トランザクション・ソースから取得するプライマリExtractには有効ですが、データ・ポンプExtractには無効です。
複数のフィルタ・オプションの指定を組み合せた場合、AND
文として論理的にリンクされます。
レプリケートされるDDL文では、複数のオプションが指定されたすべてのフィルタ基準を満たしている必要があります。
複雑なDDLフィルタリング基準を使用する場合、本番環境で使用する前にテスト環境で構成をテストすることをお薦めします。
DDL
パラメータ構文およびその他の使用方法のガイドラインについては、Oracle GoldenGateリファレンスfor Windows and UNIXを参照してください。
注意:
DDLサポートを構成する前に、「処理でDDLが評価される仕組み」を参照することをお薦めします。