DDL

有効な対象

ExtractおよびReplicat

ノート: DDLレプリケーションは、OracleからOracleデータベース間、およびMySQLからMySQLデータベース間でのみサポートされます。

摘要

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

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

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

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

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

Oracle GoldenGate DDLサポートを使用する方法の詳細は、Oracle GoldenGate MicroservicesドキュメントのOracle: DDLレプリケーションおよびMySQL: DDLレプリケーションを参照してください。

構文

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

AUTOSCHEMA

MySQLからOracleへのReplicat、OracleからMySQLへのReplicatおよびMySQLからMySQLへのデータ・レプリケーションに有効です。

DDL AUTOSCHEMAパラメータ・オプションは、スキーマの自動展開機能を有効にするために使用されます。デフォルトでは、このオプションは無効です。

構文

DDL AUTOSCHEMA

MAPPED DDL操作のみが、スキーマの自動展開に関連します。したがって、包含/除外基準でOBJNAME句の一部として指定されたオブジェクト名は、ターゲット表名(ソース表名ではなく)に対応している必要があります。

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

詳細は、「スキーマの自動展開の使用」を参照してください

INCLUDE | EXCLUDE

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

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

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

包含句または除外句は、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が優先されます。複数の包含および除外句を使用できます。

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

ALLOWEMPTYOBJECT

ALLOWEMPTYOBJECTを使用すると、オブジェクト名を含まないDDLをOBJNAME指定で処理できるようになります。たとえば:

DDL INCLUDE OBJNAME sch.* ALLOWEMPTYOBJECT

ALLOWEMPTYOWNER

ALLOWEMPTYOWNERを使用すると、所有者名を含まないDDLをOBJNAME指定で処理できるようになります。たとえば:

DDL INCLUDE OBJNAME pdb.sch.* ALLOWEMPTYOWNER

EVENTACTIONS (action)

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

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

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

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

MAPPED | UNMAPPED | OTHER | ALL

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

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

OBJNAME name

OBJNAMEを使用して、INCLUDEまたはEXCLUDEをオブジェクトの完全修飾名に適用します。2つの部分からなるオブジェクト名や3つの部分からなるワイルドカードを正しく指定するには、コマンド引数でのワイルドカードの使用を参照してください。

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

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

DDL INCLUDE OBJNAME accounts.*

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

DDL INCLUDE OBJNAME accounts."cust"

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

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

MAP fin.exp_*, TARGET fin2.*;

次の例では、CREATE TABLE文は<source>で次のように実行されます。

CREATE TABLE fin.exp_phone;

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

CREATE TABLE fin2.exp_phone;

ターゲットの所有者がMAP文で指定されていない場合、Replicatによって、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;

OBJTYPE <type>

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

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

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

OPTYPE <type>

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

DDL INCLUDE OPTYPE ALTER

INSTR string

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

DDL INCLUDE ALL EXCLUDE INSTR 'CREATE INDEX'

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

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

INSTRCOMMENTS comment_string

(Valid for Oracle) Use INSTRCOMMENTS to apply INCLUDE or EXCLUDE to DDL statements that contain a specific character string within a comment, but not within the DDL command itself. INSTRCOMMENTSを使用すると、コメントはフィルタリング・エージェントとして使用できます。

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

DDL INCLUDE ALL EXCLUDE INSTRCOMMENTS 'SOURCE ONLY'

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

CREATE USER john IDENTIFIED BY john /<source only>/;

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

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

INSTRWORDS word_list

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

<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値 もサポートされない。

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

SOURCECATALOG catalog | ALLCATALOGS

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

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

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. これらのパラメータが指定されない場合は、すべてのカタログが検討されます。

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レポーティングは、DDLOPTIONSパラメータを指定したREPORTパラメータによって制御します。

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

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

例

次に、様々なユースケースの例をいくつか示します。

例1: DDL AUTOSCHEMAの使用

フィルタリング(例1と同様)は、DDL AUTOSCHEMA INCLUDE/EXCLUDE OPTYPE句を使用して、DDLタイプに基づいて有効にすることもできます。

たとえば、hrスキーマに対してAUTOSCHEMAを有効にし、financeスキーマを除外するには、次のスクリプトを使用します。

 DDL AUTOSCHEMA &
 INCLUDE OBJNAME hr.* &
 EXCLUDE OBJNAME finance.*

 MAP hr.*, TARGET hr.*;
 MAP finance.*, TARGET finance.*;

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

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

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

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

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

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

DDL INCLUDE ALL EVENTACTIONS (REPORT)

例4: DDLのサブセットでのイベント・アクションの使用

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

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

例5: <source> Oracleコンテナ・データベース内のオブジェクトに対して発行されるDDLの<catalog>名を指定する異なる方法

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

SOURCECATALOG pdb1
DDL INCLUDE OBJNAME sch1.obj1 INCLUDE SOURCECATALOG pdb2 OBJNAME sch2.obj2
DDL INCLUDE ALLCATALOGS OBJNAME sch.obj
DDL INCLUDE ALLCATALOGS OBJNAME pdb.sch.obj

例6: ALLOWEMPTYOBJECTとALLOWEMPTYOWNERを組み合せて使用しています

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

DDL INCLUDE pdb.*.* ALLOWEMPTYOWNER ALLOWEMPTYOBJECT