DDL
有効な対象
ExtractおよびReplicat
ノート: DDLレプリケーションは、OracleからOracleデータベース間、およびMySQLからMySQLデータベース間でのみサポートされます。
摘要
DDLパラメータでは、次のことを行います。
-
DDLサポートを有効にします -
DDL操作のフィルタ -
DDLレコードに基づく処理アクションの構成
オプションを指定せずに使用すると、DDLパラメータによってフィルタリングが実行されず、すべてのDDL操作が次のように伝播されます。
-
Extractパラメータとして、サポートされているすべてのデータベース・オブジェクトに対して生成された、サポートされているすべての
DDL操作をキャプチャし、トレイルに送信します。 -
Replicatパラメータとして、Oracle GoldenGateの証跡からすべての
DDL操作がレプリケートされ、ターゲットに適用します。これは、このパラメータを使用しないデフォルトの動作と同じです。
オプションとともに使用すると、DDLパラメータは、次の内容に基づいてDDL操作を含めるか除外するフィルタリング・エージェントとして機能します。
-
スコープ
-
オブジェクト型
-
工程タイプ
-
オブジェクトの名前
-
DDLコマンド構文またはコメント、あるいは、その両方の文字列
パラメータ・ファイルで使用できるDDLパラメータは1つのみですが、複数の包含および除外オプションを複数組み合せて、必要なレベルまでDDLをフィルタできます。
-
DDLパラメータのフィルタリング・オプションは、トランザクション・ソースからのキャプチャを行うプライマリExtractに対しては有効ですが、データ・ポンプExtractに対しては無効です。 -
複数のフィルタ・オプション指定を組み合せると、
AND文として 論理的にリンクされます。 -
レプリケートされる
DDL文では、複数のオプションが指定されたすべてのフィルタ基準を満たしている必要があります。 -
DDLパラメータ文で複雑なフィルタリング基準を使用する場合、本番環境で複雑なフィルタリング基準を使用する前に、テスト環境で構成をテストすることをお薦めします。 -
詳細は、例1「例」を参照してください。
ノート: 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を使用して、包含または除外句の始まりを示します。
-
包含句には、このパラメータが影響する
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が優先されます。複数の包含および除外句を使用できます。
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を使用するためのガイドラインは、次のとおりです。
-
CHECKPOINTBEFORE: 各DDLレコードは自律型であるため、DDLレコードは必ずトランザクションの開始になります。そのため、DDLイベント・アクションは、CHECKPOINT BEFOREイベント・アクションに対して暗黙的です。 -
IGNORE: このオプションは、DDLレコードに対して無効です。DDL操作は自律型であるため、レコードを無視することはトランザクション全体を無視することに相当します。
EVENTACTIONSでは、次のDDLオブジェクトは導出されたオブジェクトであるため、サポートされません。
-
索引
-
トリガー
-
シノニム
-
表の
RENAMEおよびALTER TABLE RENAME
MAPPED | UNMAPPED | OTHER | ALL
MAPPED、UNMAPPED、OTHERおよびALLを使用して、DDL操作のスコープに基づいてINCLUDEまたはEXCLUDEを適用します。
-
MAPPEDは、MAPPEDスコープのDDL操作にINCLUDEまたはEXCLUDEを適用します。MAPPEDフィルタリングは、他のDDLパラメータ・オプションで指定されたフィルタリングの前に実行されます。 -
UNMAPPEDは、UNMAPPEDスコープのDDL操作にINCLUDEまたはEXCLUDEを適用します。 -
OTHERは、OTHERスコープのDDL操作にINCLUDEまたはEXCLUDEを適用します。 -
ALLは、すべてのスコープのDDL操作にINCLUDEまたはEXCLUDEを適用します。
DDL EXCLUDE ALLは、DDL操作自体のレプリケーションをブロックしながら、Oracle GoldenGateの最新のオブジェクト・メタデータを保持する特別な処理オプションです。OracleGoldenGate以外の方法を使用してDDLをターゲットに適用するが、OracleGoldenGateによってデータの変更をターゲット・オブジェクトにレプリケートする場合、DDL EXCLUDE ALLを使用できます。現在のメタデータをオブジェクトの変更としてOracle GoldenGateに提供するため、Oracle GoldenGateプロセスの停止と起動の必要がなくなります。DDL EXCLUDE ALLには、次の特別な条件が適用されます。
-
DDL EXCLUDE ALLでは、INCLUDE句を使用する必要はありません。 -
DDL EXCLUDE ALLを使用する際には、WILDCARDRESOLVEパラメータをIMMEDIATEに設定し、必要に応じてただちにDMLを解決できるようにします。
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の指定の前にも後にも配置できます。
パラメータ・ファイルに様々なカタログ指定がある場合には次の優先度が適用されます。
-
INCLUDEまたはEXCLUDE句のALLCATALOGSは、INCLUDEまたはEXCLUDE句およびパラメータ・ファイルのルートのすべてのSOURCECATALOG指定よりも優先されます。また、OBJNAME句の完全修飾オブジェクト名のコンテナ指定よりも優先されます。 -
OBJNAME句の明示的なカタログ指定は、SOURCECATALOGのすべてのインスタンスよりも優先されます(ALLCATALOGS以外)。 -
INCLUDEまたはEXCLUDE句のSOURCECATALOGは、TABLEまたはMAP文のルートに指定されるグローバルSOURCECATALOGパラメータよりも優先されます。 -
グローバル
SOURCECATALOGパラメータが、OBJNAME句の修飾されていないオブジェクト名に対して有効になるのは、INCLUDEまたはEXCLUDE句にSOURCECATALOGまたはALLCATALOGSが指定されていない場合です。 -
これらのパラメータが指定されない場合は、すべてのカタログが検討されます。
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_staymetadata_onは、メタデータのバージョニングをグローバルで無効にします。 -
@ddl_staymetadata_offは、メタデータのバージョニングを再度有効にします。
どのDDLがオブジェクトのメタデータに影響を及ぼすかは必ずしも明白ではないため、このオプションは、Oracle GoldenGateのテクニカル・サポート・スタッフと相談して使用することをお薦めします。不適切に使用された場合、レプリケーション環境の整合性が損われる可能性があります。
例
次に、様々なユースケースの例をいくつか示します。
例1: DDL AUTOSCHEMAの使用
-
例A:
ソース・スキーマ
atssrcおよびターゲット・スキーマatstgtのすべての表でAUTOSCHEMAを有効にするには:DDL AUTOSCHEMA INCLUDE ALL MAP atssrc.*, TARGET atstgt.*; -
例B:
フィルタリング(例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.*;
-
例C:
すべての表に対して
AUTOSCHEMAを有効にし、カスタムTYPEMAPを使用して、すべての表に適用可能なすべてのソースint型列に対して、ターゲット表に対してbigintを使用します。DDL AUTOSCHEMA INCLUDE ALL AUTOSCHEMAOPTIONS TYPEMAP 'int'= 'bigint' MAP atssrc.*, TARGET atstgt.tgt_* -
例D:
すべての表に対して
AUTOSCHEMAを有効にし、カスタムTYPEMAPを使用して、すべての表に適用可能なすべてのソースint型列に対してターゲット表に対してbigintを使用しますが、ソースint型のすべての表のターゲット列タイプとしてsmallintを使用するには、財務スキーマ下のすべての表を使用します。DDL AUTOSCHEMA INCLUDE ALL AUTOSCHEMAOPTIONS TYPEMAP 'int'= 'bigint' MAP hr.*, TARGET hr.*; MAP finance.*, TARGET finance.*, AUTOSCHEMAOPTIONS (TYPEMAP 'smallint'='bigint');<–>
例2: 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します。 -
EXCLUDEallDDLoperation types for all tables that areMAPPEDin scope, but only if those tables are owned bytemporaryand only if their names begin withtab.
例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のカタログ名を指定する様々な方法を示します。
- 次に、
pdb1.sch1.obj1とpdb2.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
例6: ALLOWEMPTYOBJECTとALLOWEMPTYOWNERを組み合せて使用しています
次の例は、ALLOWEMPTYOBJECTとALLOWEMPTYOWNERを組み合せて使用しています。
DDL INCLUDE pdb.*.* ALLOWEMPTYOWNER ALLOWEMPTYOBJECT