1.41 DDL
適用対象
ノート:
DDLレプリケーションは、Oracleデータベース間およびMySQLデータベース間でのみサポートされます。説明
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「例」を参照してください。
ノート:
Extractデータ・ポンプには、DDL
パラメータを使用しないでください。これらのプロセス・タイプでは、DDLのマッピングまたは変換が許可されず、パススルー・モードで自動的にDDLレコードが伝播されます。ソース表で実行されるDDL (ALTER TABLE TableA...
など)は、Replicatによって同一の名前の表に適用されます(ALTER TABLE TableA
)。
ALTER TABLE TableB
としてマッピングすることはできません。
Oracle GoldenGate DDLサポートを使用する方法の詳細は、必要に応じて『Oracle DatabaseのためのOracle GoldenGateの使用』のDDLサポートの構成に関する項または『異種データベースのためのOracle GoldenGateの使用』を参照してください。
構文
DDL [ {INCLUDE | EXCLUDE} [, MAPPED | UNMAPPED | OTHER | ALL] [, OPTYPE type] [, OBJTYPE 'type'] [, SOURCECATALOGcatalog
| 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プロセスはこれらのオブジェクトに対する操作を認識している必要があります。それが、EXCLUDE
、TABLEEXCLUDE
またはMAPEXCLUDE
のパラメータ文を使用して、構成からこれらを明示的に除外できない理由です。-
MAPPED |UNMAPPED |OTHER | ALL
-
DDLの操作スコープに基づいて
INCLUDE
またはEXCLUDE
を適用するには、MAPPED
、UNMAPPED
、OTHER
およびALL
を使用します。-
MAPPED
では、INCLUDE
またはEXCLUDE
をMAPPED
スコープの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
-
CREATE
、ALTER
およびRENAME
など、特定タイプのDDL操作にINCLUDE
またはEXCLUDE
を適用するには、OPTYPE
を使用します。type
には、データベースに対して有効な任意のDDLコマンドを使用します。たとえば、ALTER
操作を含める場合の正しい構文は、次のとおりです。DDL INCLUDE OPTYPE ALTER
-
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
にはスキーマしかないためです。 -
SOURCECATALOG
catalog
| ALLCATALOGS
-
これらのオプションを使用して、
OBJNAME
句の未修飾のオブジェクト名が正しいコンテナに解決される方法を指定します。ソース・データベースがOracleコンテナ・データベースの場合にこれらのオプションを使用します。SOURCECATALOG
は、同じINCLUDE
またはEXCLUDE
句に指定されたすべてのオブジェクト名についてデフォルト・コンテナを指定します。有効にするには、SOURCECATALOG
をOBJNAME
の指定の前に指定する必要があります。詳細(オブジェクトの完全識別に3つの部分からなるオブジェクト名を必要とする文のうち、2つの部分からなる名前が含まれる文の使用を含む)は、SOURCECATALOGを参照してください。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
が指定されていない場合です。 -
これらのパラメータが指定されない場合は、すべてのカタログが検討されます。
-
-
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の管理』を参照してください。大/小文字を区別するオブジェクト名は二重引用符で囲みます。
大/小文字が区別されない例:
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
文はソースで次のように実行されます。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*/;
文字列を一重引用符で囲みます。文字列の検索では、大/小文字は区別されません。
INSTR
とINSTRCOMMENTS
を組み合せると、同一の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
値もサポートされません。INSTRWORDS
とINSTRCOMMENTSWORDS
を組み合せて、同じ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
-
-
例
- 例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.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
-
- 例5
-
次の例は、
ALLOWEMPTYOBJECT
とALLOWEMPTYOWNER
を組み合せて使用しています。DDL INCLUDE pdb.*.* ALLOWEMPTYOWNER ALLOWEMPTYOBJECT
親トピック: Oracle GoldenGateパラメータ