主コンテンツへ
Oracle® Fusion Middleware Oracle GoldenGateリファレンスfor Windows and UNIX
12c (12.2.0.1)
E70112-04
目次へ移動
目次

前
次

3.41 DDL

適用対象

ExtractおよびReplicat

説明

DDLパラメータでは、次のことを行います。

  • DDLサポートの有効化

  • DDL操作のフィルタ

  • DDLレコードに基づく処理アクションの構成

オプションを指定せずに使用すると、DDLパラメータによるフィルタリングが実行されず、すべてのDDL操作が次のように伝播されます。

  • Extractパラメータとして、サポートされているすべてのデータベース・オブジェクトで生成された、サポートされている全DDL操作が取得されて証跡に送信されます。

  • Replicatパラメータとして、Oracle GoldenGateの証跡からすべてのDDL操作がレプリケートされ、ターゲットに適用されます。これは、このパラメータを使用しない場合のデフォルトの動作と同じです。

オプションを指定して使用すると、DDLパラメータがフィルタリング・エージェントとして機能し、次に基づいてDDL操作が含まれるか除外されます。

  • 範囲

  • オブジェクト・タイプ

  • 操作タイプ

  • オブジェクト名

  • DDLコマンド構文またはコメント、あるいはその両方の文字列

パラメータ・ファイルでは1つのDDLパラメータのみを使用できますが、DDLの複数の包含および除外オプションを組み合せて、必要なレベルまでDDLをフィルタリングすることができます。

  • DDLパラメータのフィルタリング・オプションは、トランザクション・ソースからのキャプチャを行うプライマリExtractに対しては有効ですが、データ・ポンプExtractに対しては無効です。

  • 複数のフィルタ・オプションの指定を組み合せた場合、AND文として論理的にリンクされます。

  • レプリケートされるDDL文では、複数のオプションが指定されたすべてのフィルタ基準を満たしている必要があります。

  • DDLパラメータ文で複雑なフィルタリング基準を使用する場合、本番環境で使用する前にテスト環境で構成をテストすることをお薦めします。

  • 詳細は、例1 DDLパラメータ・オプションの組合せを参照してください。

次のプロセスでは、DDLパラメータを使用しないでください。

  • Extractデータ・ポンプ

  • VAMソートExtract(Teradataソース・データベース)

これらのプロセス・タイプでは、DDLのマッピングまたは変換が許可されず、パススルー・モードで自動的にDDLレコードが伝播されます。ソース表で実行されるDDL (ALTER TABLE TableA...など)は、Replicatによって同一の名前の表に適用されます(ALTER TABLE TableA)。ALTER TABLE TableBとしてマッピングすることはできません。

Oracle GoldenGate DDLサポートの使用方法の詳細は、Oracle DatabaseのためのOracle GoldenGateのインストールおよび構成またはTeradataのためのOracle GoldenGateのインストールおよび構成を参照してください。

構文

DDL [
{INCLUDE | EXCLUDE}
  [, MAPPED | UNMAPPED | OTHER | ALL]
  [, OPTYPE type]
  [, OBJTYPE 'type']
  [, SOURCECATALOG catalog | ALLCATALOGS]
  [, ALLOWEMPTYOBJECT]
  [, ALLOWEMPTYOWNER]
  [, OBJNAME name]
  [, INSTR 'string']
  [, INSTRWORDS 'word_list']
  [, INSTRCOMMENTS 'comment_string']
  [, INSTRCOMMENTSWORDS 'word_list']
  [, STAYMETADATA]
  [, EVENTACTIONS (action)
]
[...]

DDLのフィルタリング・オプション

Oracle GoldenGateによってレプリケートされるDDLに対するフィルタリングと操作の構文オプションを次に示します。これらのオプションは、DDLレプリケーションをサポートするDDLパラメータのINCLUDE句およびEXCLUDE句に適用されます。

INCLUDE | EXCLUDE

INCLUDEまたはEXCLUDEを使用して、包含または除外句の始まりを示します。

  • 包含句には、このパラメータの影響を受けるDDLを識別するフィルタ基準が含まれます。

  • 除外句には、このパラメータから特定のDDLを除外するフィルタ基準が含まれます。

包含句または除外句は、INCLUDEまたはEXCLUDEキーワードに、DDLパラメータの他のフィルタリング・オプションの有効な組合せを続けて構成する必要があります。

EXCLUDEを使用する場合は、対応するINCLUDE句を作成する必要があります。たとえば、次は無効です。

DDL EXCLUDE OBJNAME hr.*

ただし、次のいずれかを使用できます。

DDL INCLUDE ALL, EXCLUDE OBJNAME hr.*
DDL INCLUDE OBJNAME fin.* EXCLUDE OBJNAME fin.ss

同じ条件を含むINCLUDEsより、EXCLUDEが優先されます。包含句および除外句は複数使用できます。

DDLパラメータ、TABLEパラメータまたはMAPパラメータにも、TABLEEXCLUDEパラメータまたはMAPEXCLUDEパラメータにもOracle GoldenGateによってインストールされるDDLオブジェクトを含めないでください。それらのパラメータのワイルドカード指定にOracle GoldenGateによってインストールされるDDLオブジェクトが含まれていないことを確認します。これらのオブジェクトはOracle GoldenGate構成に含まれませんが、Extractプロセスはこれらのオブジェクトに対する操作を認識している必要があります。それが、EXCLUDETABLEEXCLUDEまたはMAPEXCLUDEのパラメータ文を使用して、構成からこれらを明示的に除外できない理由です。

MAPPED |UNMAPPED |OTHER | ALL

DDLの操作スコープに基づいてINCLUDEまたはEXCLUDEを適用するには、MAPPEDUNMAPPEDOTHERおよびALLを使用します。

  • MAPPEDでは、INCLUDEまたはEXCLUDEMAPPEDスコープのDDL操作に適用します。MAPPEDフィルタリングは、他のDDLパラメータ・オプションを使用して指定されたフィルタリングの前に実行されます。

  • UNMAPPEDでは、UNMAPPEDスコープのDDL操作にINCLUDEまたはEXCLUDEが適用されます。

  • OTHERでは、OTHERスコープのDDL操作にINCLUDEまたはEXCLUDEが適用されます。

  • ALLでは、すべてのスコープのDDL操作にINCLUDEまたはEXCLUDEが適用されます。

DDL EXCLUDE ALLは、DDL操作自体のレプリケーションは回避しつつ、Oracle GoldenGateのオブジェクト・メタデータを最新に保つ特別な処理オプションです。Oracle GoldenGate以外の方法を使用してDDLをターゲットに適用するが、Oracle GoldenGateによってデータの変更をターゲット・オブジェクトにレプリケートする場合、DDL EXCLUDE ALLを使用できます。現在のメタデータをオブジェクトの変更としてOracle GoldenGateに提供するため、Oracle GoldenGateプロセスの停止と起動の必要がなくなります。次の特別な条件がDDL EXCLUDE ALLに適用されます。

  • DDL EXCLUDE ALLでは、INCLUDE句を使用する必要がありません。

  • DDL EXCLUDE ALLを使用する場合、WILDCARDRESOLVEパラメータをIMMEDIATEに設定し、必要に応じてただちにDMLを解決できるようにします。

OPTYPE type

CREATEALTERおよびRENAMEなど、特定タイプのDDL操作にINCLUDEまたはEXCLUDEを適用するには、OPTYPEを使用します。typeには、データベースに対して有効な任意のDDLコマンドを使用します。たとえば、ALTER操作を含める場合の正しい構文は、次のとおりです。

DDL INCLUDE OPTYPE ALTER
OBJTYPE 'type'

特定タイプのデータベース・オブジェクトにINCLUDEまたはEXCLUDEを適用するには、OBJTYPEを使用します。typeには、データベースに対して有効な任意のオブジェクト・タイプ(TABLEINDEXTRIGGERなど)を使用します。Oracleマテリアライズド・ビューとマテリアライズド・ビュー・ログの場合、正しいタイプはそれぞれsnapshotおよびsnapshot logです。オブジェクト・タイプの名前は、一重引用符で囲みます。例:

DDL INCLUDE OBJTYPE 'INDEX'
DDL INCLUDE OBJTYPE 'SNAPSHOT'

Oracleオブジェクト・タイプUSERにはOBJNAMEオプションを使用しないでください。これは、OBJNAMEowner.objectまたはcontainer.owner.objectが必要ですが、USERにはスキーマしかないためです。

SOURCECATALOG catalog | ALLCATALOGS

これらのオプションを使用して、OBJNAME句の未修飾のオブジェクト名が正しいコンテナに解決される方法を指定します。ソース・データベースがOracleコンテナ・データベースの場合にこれらのオプションを使用します。

SOURCECATALOGは、同じINCLUDEまたはEXCLUDE句に指定されたすべてのオブジェクト名についてデフォルト・コンテナを指定します。有効にするには、SOURCECATALOGOBJNAMEの指定の前に指定する必要があります。詳細(オブジェクトの完全識別に3つの部分からなるオブジェクト名を必要とする文のうち、2つの部分からなる名前が含まれる文の使用を含む)は、SOURCECATALOGを参照してください。

ALLCATALOGSは、同じINCLUDEまたはEXCLUDE句に指定されるオブジェクト名を解決するときに、データベースのコンテナすべてを検討する必要があることを指定します。ALLCATALOGSは、OBJNAMEの指定の前にも後にも配置できます。

パラメータ・ファイルに様々なカタログ指定がある場合には次の優先度が適用されます。

  1. INCLUDEまたはEXCLUDE句のALLCATALOGSは、INCLUDEまたはEXCLUDE句およびパラメータ・ファイルのルートのすべてのSOURCECATALOG指定よりも優先されます。また、OBJNAME句の完全修飾オブジェクト名のコンテナ指定よりも優先されます。

  2. OBJNAME句の明示的なカタログ指定は、SOURCECATALOGのすべてのインスタンスよりも優先されます(ALLCATALOGS以外)。

  3. INCLUDEまたはEXCLUDE句のSOURCECATALOGは、TABLEまたはMAP文のルートに指定されるグローバルSOURCECATALOGパラメータよりも優先されます。

  4. グローバルSOURCECATALOGパラメータが、OBJNAME句の修飾されていないオブジェクト名に対して有効になるのは、INCLUDEまたはEXCLUDE句にSOURCECATALOGまたはALLCATALOGSが指定されていない場合です。

  5. これらのパラメータが指定されない場合は、すべてのカタログが検討されます。

ALLOWEMPTYOBJECT

ALLOWEMPTYOBJECTを使用すると、オブジェクト名を含まないDDLをOBJNAME指定で処理できます。例:

DDL INCLUDE OBJNAME sch.* ALLOWEMPTYOBJECT
ALLOWEMPTYOWNER

ALLOWEMPTYOWNERを使用すると、所有者名を含まないDDLをOBJNAME指定で処理できます。例:

DDL INCLUDE OBJNAME pdb.sch.* ALLOWEMPTYOWNER
OBJNAME name

OBJNAMEを使用して、INCLUDEまたはEXCLUDEをオブジェクトの完全修飾名に適用します。2つの部分または3つの部分からなるオブジェクト名やワイルドカードを正しく指定するには、Oracle GoldenGateの管理for Windows and UNIXを参照してください。

大/小文字を区別するオブジェクト名は二重引用符で囲みます。

大/小文字が区別されない例:

DDL INCLUDE OBJNAME accounts.*

大/小文字が区別される例:

DDL INCLUDE OBJNAME accounts."cust"

Oracle USERオブジェクトにはOBJNAMEを使用しないでください。これは、OBJNAMEowner.objectまたはcontainer.owner.objectが必要ですが、USERにはスキーマしかないためです。

Replicatパラメータ・ファイルにMAPPEDを指定したOBJNAMEを使用する場合、OBJNAMEの値は、MAP文のTARGET句で指定された名前を参照する必要があります。たとえば、次のMAP文の場合、正しい値はOBJNAME fin2.*です。

MAP fin.exp_*, TARGET fin2.*;

次の例では、CREATE TABLE文はソースで次のように実行されます。

CREATE TABLE fin.exp_phone;

同じ文が、ターゲットでは次のように実行されます。

CREATE TABLE fin2.exp_phone;

ターゲットの所有者がMAP文で指定されていない場合、Replicatによって、USERIDまたはUSERIDALIASパラメータで指定されたデータベース・ユーザーにマップされます。

トリガーなど、導出されたオブジェクトを作成するDDLの場合、OBJNAMEの値は、導出されたオブジェクトの名前ではなく、ベース・オブジェクトの名前にする必要があります。

たとえば、次のDDL文を含める場合、正しい値はhr.insert_trigではなく、hr.accountsです。

CREATE TRIGGER hr.insert_trig ON hr.accounts;

RENAME操作の場合、OBJNAMEの値は新しい表名にする必要があります。たとえば、次のDDL文を含める場合、正しい値はhr.acctです。

ALTER TABLE hr.accounts RENAME TO acct;
INSTR 'string'

INSTRを使用して、INCLUDEまたはEXCLUDEを、コマンド構文内に特定の文字列を含む(コメント内には含まない)DDL文に適用します。たとえば、次では索引を作成するDDLが除外されます。

DDL INCLUDE ALL EXCLUDE INSTR 'CREATE INDEX'

文字列を一重引用符で囲みます。文字列の検索では、大/小文字は区別されません。

INSTRでは、文字列の中に一重引用符(' ')を使用することも、NULL値を使用することもできません。

INSTRCOMMENTS 'comment_string'

(Oracleに有効)INSTRCOMMENTSでは、DDLコマンド内ではなくコメント内に特定の文字列を含むDDL文に、INCLUDEまたはEXCLUDEを適用します。INSTRCOMMENTSを使用すると、コメントをフィルタリング・エージェントとして使用できます。

たとえば、次の文ではコメント内に文字列"source only"を含むDDL文を除外します。

DDL INCLUDE ALL EXCLUDE INSTRCOMMENTS 'SOURCE ONLY'

この例では、次のようなDDL文はレプリケートされません。

CREATE USER john IDENTIFIED BY john /*source only*/;

文字列を一重引用符で囲みます。文字列の検索では、大/小文字は区別されません。INSTRINSTRCOMMENTSを組み合せると、同一のDDL文のコマンド構文およびコメントの文字列でフィルタリングできます。

INSTRCOMMENTSでは、文字列内の一重引用符(' ')はサポートされません。また、NULL値もサポートされません。

INSTRWORDS 'word_list'

指定した語を含むDDL文にINCLUDEまたはEXCLUDEを適用するには、INSTRWORDSを使用します。

word_listに、任意の順序で語を指定し、一重引用符で囲みます。空白を含めるには、その空白(および該当する場合は空白と語)を二重引用符で囲みます。二重引用符は、文を囲む場合にも使用できます。

指定するすべての語が、有効化されるINSTRWORDSのDDLに存在する必要があります。

例:

DDL INCLUDE OPTYPE ALTER OBJTEYP 'TABLE' INSTRWORDS 'ALTER CONSTRAINT " xyz"'

この例は次のDDL文と一致します。

ALTER TABLE ADD CONSTRAINT xyz CHECK
ALTER TABLE DROP CONSTRAINT xyz

INSTRWORDSでは、文字列の中に一重引用符(' ')を使用することも、NULL値を使用することもできません。

INSTRCOMMENTSWORDS 'word_list'

(Oracleに有効)INSTRWORDSと同様に機能しますが、DDL構文自体ではなく、DDL文内のコメントのみに適用します。INSTRCOMMENTSを使用すると、コメントをフィルタリング・エージェントとして使用できます。

INSTRCOMMENTSWORDSでは、文字列内の一重引用符(' ')はサポートされません。また、NULL値もサポートされません。

INSTRWORDSINSTRCOMMENTSWORDSを組み合せて、同じDDL文のコマンド構文内とコメント内の文字列に対してフィルタできます。

STAYMETADATA

(Oracleに有効です)。メタデータがExtractによって取得されたり、Replicatによって適用されたりしないようにします。

Extractが表で最初にDMLを検出すると、その表のメタデータが取得されます。表でDDLが検出されると、古いメタデータは無効化されます。その表の次のDMLは新しいメタデータと一致するため、ターゲット表の構造は、ソースの構造とともに常に最新です。

ただし、特定のDDL操作が表のメタデータに影響を及ぼさないことがわかっている場合、STAYMETADATAを使用して、現在のメタデータが取得またはレプリケートされないようにできます。これにより、インポートやエクスポートのような操作の際に役立つパフォーマンスの向上が可能になり、切捨てなどのDDLおよび制約の無効化がよく実行されます。表構造は後続のデータ・レプリケーションの整合性に関連するため、これらの操作は表構造に影響せず、このような場合に無視することができます。たとえば、ALTER TABLE ADD FOREIGN KEYによって表のメタデータは影響を受けません。

これを選択的に適用する方法の例は、次のとおりです。

DDL INCLUDE ALL INCLUDE STAYMETADATA OBJNAME xyz

この例は、すべてのDDLをレプリケーションに含めるが、オブジェクトxyzを操作するDDLのみSTAYMETADATAの対象となることを指定しています。

STAYMETADATAは、EXCLUDE句でも同様に使用できます。

STAYMETADATAは、メタデータの整合性を保証するために、ソースとターゲットで同じように使用される必要があります。

STAYMETADATAが使用される場合、メッセージがレポート・ファイルに追加されます。DDLレポーティングは、REPORTオプションを指定したDDLOPTIONSパラメータによって制御されます。

次のように@ddl_staymetadataスクリプトを使用して、ソースで検出されるすべてのDDLに同じ機能をグローバルに適用できます。

  • @ddl_staymetadata_onは、メタデータのバージョニングをグローバルで無効にします。

  • @ddl_staymetadata_offは、メタデータのバージョニングを再度有効にします。

どのDDLがオブジェクトのメタデータに影響するかは必ずしも明白ではないため、このオプションは、Oracle GoldenGateのテクニカル・サポート・スタッフと相談して使用することをお薦めします。不適切に使用された場合、レプリケーション環境の整合性が損われる可能性があります。

EVENTACTIONS (action)

イベント・レコードと呼ばれるトランザクション・ログまたは証跡のDDLレコードに基づき、ExtractまたはReplicatプロセスが定義されたアクションを実行します。DDLイベントは、DDLパラメータのその他のフィルタリング・オプションによって決められたとおりに、DDLレコードをExtractまたはデータ・ポンプで証跡に書き込める場合、またはReplicatで実行可能な場合にトリガーされます。このシステムを使用し、データベース・イベントに基づいて処理をカスタマイズできます。

actionについては、MAPおよびTABLEパラメータのEVENTACTIONSの項を参照してください。

DDLレコードでEVENTACTIONSを使用するためのガイドラインは、次のとおりです。

  • CHECKPOINTBEFORE: 各DDLレコードは自律型であるため、DDLレコードは必ずトランザクションの開始になります。そのため、CHECKPOINT BEFOREイベント・アクションは、DDLレコードに対して暗黙的です。

  • IGNORE: このオプションは、DDLレコードに対して無効です。DDL操作は自律型であるため、レコードを無視することは、トランザクション全体を無視することと同じです。

EVENTACTIONSは導出されたオブジェクトであるため、次のDDLオブジェクトがサポートされていません。

  • 索引

  • トリガー

  • シノニム

  • 表のRENAMEおよびALTER TABLE RENAME

Extractが最大保護モードで構成されているTeradata構成では、VAMソートExtractグループでEVENTACTIONSのみを使用します。この構成のプライマリExtractではこれはサポートされていません。同時変更は、処理ストリームのこの時点ではトランザクション順でソートされないためです。詳細は、TeradataのためのOracle GoldenGateのインストールおよび構成を参照してください。

例1   DDLパラメータ・オプションの組合せ

DDLパラメータ・オプションの組合せ方の例を次に示します。

DDL  &
INCLUDE UNMAPPED &
    OPTYPE alter &
    OBJTYPE 'table' &
    OBJNAME users.tab* &
INCLUDE MAPPED OBJNAME * &
EXCLUDE MAPPED OBJNAME temporary.tab

この文で組み合せたフィルタ基準は、次を指定します。

  • TABLEまたはMAP文でマップされていない表(UNMAPPEDスコープ)のすべてのALTER TABLE文がINCLUDEされますが、それはそれらの表の所有者がusersである場合およびその名前がtabで開始される場合のみです

  • TABLEまたはMAP文でマップされる(MAPPEDスコープ)すべての表に対するすべてのDDL操作タイプをINCLUDE

  • MAPPEDスコープのすべての表に対するすべてのDDL操作タイプをEXCLUDE (表がtemporaryによって所有され、名前がtabで始まる場合のみ)。

例2   イベント・アクションの包含

次の例では、すべてのDDLレコードに対するREPORTのイベント・アクションを指定します。

DDL INCLUDE ALL EVENTACTIONS (REPORT)
例3   DDLのサブセットでのイベント・アクションの使用

次に、EVENTACTIONSをDDLのサブセットで使用する方法の例を示します。すべてのDDLがレプリケートされますが、明示的に名前が付けられたオブジェクトで実行されるDDLのみが、REPORTおよびLOGのイベント・アクションのトリガー対象となります。

DDL INCLUDE ALL &
    INCLUDE OBJNAME sales.t* EVENTACTIONS (REPORT) &
    INCLUDE OBJNAME fin.my_tab EVENTACTIONS (LOG) &
例4   

次の例は、ソースOracleコンテナ・データベース内のオブジェクトに対して発行されるDDLのカタログ名を指定する様々な方法を示します。

  • 次の例では、pdb1.sch1.obj1pdb2.sch2.obj2がDDL処理に含められます。

    SOURCECATALOG pdb1 
    DDL INCLUDE OBJNAME sch1.obj1 INCLUDE SOURCECATALOG pdb2 OBJNAME sch2.obj2
    
  • 次の例では、すべてのカタログ内の名前がsch.objのすべてのオブジェクトがDDL処理に含めれられます。

    DDL INCLUDE ALLCATALOGS OBJNAME sch.obj
    
  • 次の例でも、すべてのカタログ内の名前がsch.objのすべてのオブジェクトがDDL処理に含められます。ALLCATALOGSは他のカタログ指定よりも優先されるためです。

    DDL INCLUDE ALLCATALOGS OBJNAME pdb.sch.obj
    
例5   

次の例は、ALLOWEMPTYOBJECTALLOWEMPTYOWNERを組み合せて使用しています。

DDL INCLUDE pdb.*.* ALLOWEMPTYOWNER ALLOWEMPTYOBJECT