この章では、Oracle GoldenGateにおけるDDLサポートの理解とその構成方法について説明します。この章は、次の各項で構成されます。
この章には、Teradata環境内のOracle GoldenGateソリューションのセットアップ固有の情報が記載されています。このドキュメントは、TeradataデータベースおよびTeradata Replication Solutionsの基本的な知識を持つ読者を対象にしています。さらに、次の内容を正しく構成していることを前提とします。
Relay Services Gateway (RSG)
Change Data Capture (CDC)
Teradata Access Module (TAM)
レプリケーション・グループ
Teradataデータベースにレプリケーションを構成する方法の詳細は、『Teradata Replication Solutions』のドキュメントを参照してください。
Oracle GoldenGateでは、あるデータベースから別のデータベースへのDDL操作の同期がサポートされています。DDL同期は、次のような場合にアクティブになります。
ビジネス・アプリケーションが、ソースとターゲットのオブジェクトにアクティブにアクセスし、更新している場合。
Oracle GoldenGateのトランザクション・データの同期がアクティブな場合。
DDLのレプリケーションおよびトランザクション・データ変更(DML)のレプリケーションをサポートするコンポーネント同士は、相互に独立しています。そのため、次のような同期が可能です。
DDLの変更のみ
DMLの変更のみ
DDLとDMLの両方
このトピックでは、DDL機能の制限事項について説明します。このドキュメントの発行後に明らかになったその他の制限事項については、ソフトウェアに同梱されているOracle GoldenGateのリリース・ノートまたはreadmeファイルを参照してください。
Oracle GoldenGateでは、文字数ではなく、バイト数でDDL文の長さが計測されます。サポートされる長さは約2MBで、いくつかある特性の中でも、影響を受けるオブジェクトの名前やそのDDLタイプによってサイズに幅がある内部オーバーヘッドが考慮されています。DDLがサポートされているサイズより長い場合は、Extractにより警告が発行され、DDL操作が無視されます。
Oracle GoldenGateでは、同じ構成においてのみDDL同期がサポートされます。ソースとターゲットのオブジェクト定義は同一であることが必要です。
Oracle GoldenGateは、スタンバイ・データベースではDDLをサポートしていません。
Oracle GoldenGateでは、サポートされているすべての一方向構成、および双方向構成(2つのシステム間のみ)でDDLレプリケーションがサポートされています。
DDL操作をOracle GoldenGateプロセスで変換することはできません。ただし、プライマリExtractプロセスまたはReplicatプロセスで、ソースDDLを別のターゲット・オブジェクトにマップしてフィルタすることは可能です。データ・ポンプExtractまたはVAMソートによるExtractでDDLをマッピングすることやフィルタリングすることはできないため、DDLはプライマリExtractから受信したものとして渡されます。これはPASSTHRU
モードと呼ばれます。
たとえば、ALTER TABLE TableA
がデータ・ポンプExtractまたはVAMソートによるExtractで、ALTER TABLE TableA
として処理されるとします。別の内容を指定するALTER TABLE TableB
文に関係なく、これをそのプロセスでTABLE
としてマップすることはできません。
TeradataデータベースおよびOracle GoldenGateコンポーネントを含むレプリケーション・システム間の同期プロトコルに内在するレイテンシが原因で、レプリケーション用に取得されるDDL文のレスポンス時間が長くなる場合があります。レスポンス時間のオーバーヘッドは、ほとんどの条件下で1秒を超えないようにする必要があります。取得されないDDLのレスポンス時間には、大きな影響はありません。UDTまたはLOBを含む表の変更データを取得するパフォーマンス上のコストは、それらのデータ型を含まない表と比較して、データをエクスポートするその他の方法と比較できる必要があります。
次に、Oracle GoldenGateプロセスがDDLレプリケーションをサポートするよう構成する際に考慮するガイドラインを示します。
DDLの取得とレプリケーションをサポートするためにOracle GoldenGateに必要なデータベース権限については、「Oracle GoldenGateプロセス用のデータベース・ユーザー」を参照してください。
Extract/Replicatの並列処理を使用している場合は、関連するDDLとDMLを同じプロセス・ストリームに保持し、データの整合性を確保します。プロセスを次のように構成します。
あるオブジェクトに対するすべてのDDLおよびDMLが、同じExtractグループおよび同じReplicatグループで処理されるようにします。
相互に関連するすべてのオブジェクトが、同じプロセス・グループで処理されるようにします。
たとえば、ReplicatA
がTable1
のDMLを処理する場合は、Table1
のDDLも処理する必要があります。Table2
にTable1
に対する外部キーがある場合は、そのDMLとDDLの操作もReplicatA
によって処理される必要があります。
あるExtractグループが、様々なReplicatグループによって読み取られる複数の証跡に書込みを行う場合、Extractはすべての証跡にすべてのDDLを送信します。Replicatパラメータ・ファイルにあるDDL
パラメータのフィルタ・オプションを使用してDDLをフィルタするには、各Replicatグループを使用します。
データ・ポンプExtractまたはVAMソートによるExtractを使用している場合、オブジェクトでDDLサポートが使用されているときには、DMLをPASSTHRU
モード用に構成します。DDLは、PASSTHRU
モードのデータ・ポンプExtractまたはVAMソートによるExtractを介して渡され、DMLも同様にする必要があります。DMLのフィルタリング、マッピングまたは変換は、プライマリExtractまたはReplicatによって行われる必要があります。ただし、DDLサポートを使用しない表はNOPASSTHRU
モードに構成でき、データのフィルタリングやデータ・ポンプによる操作を実行できます。
表をPASSTHRU、NOPASSTHRUまたはその両方に構成する手順
データ・ポンプExtractまたはVAMソートによるExtractのパラメータ・ファイルで、DDLサポートを使用する表を含むすべてのTABLE
文の前に、PASSTHRU
パラメータを配置します。
データのフィルタリング、マッピングまたは変換を実行する場合は、同じパラメータ・ファイルで、DDLサポートを使用しない表を含むTABLE
文の前に、NOPASSTHRU
パラメータを配置します。
データ・ポンプExtractまたはVAMソートによるExtractのDDL構成パラメータ(DDL
、DDLOPTIONS
、DDLSUBST
、DDLERROR
)、またはDDLオプションが指定されたOracle GoldenGateのトレース・パラメータは使用しないでください。
PASSTHRU
およびNOPASSTHRU
の詳細は、Oracle GoldenGateリファレンスfor Windows and UNIXを参照してください。
Oracle GoldenGateでは、データベース定義のオブジェクト名、ケースおよびキャラクタ・セットが保持されます。このサポートにより、データベース階層のすべてのレベルにおいて、シングルバイト名とマルチバイト名、記号およびアクセント文字が保持されます。オブジェクト名のサポートの詳細は、『Oracle GoldenGate Windows and UNIX管理者ガイド』を参照してください。
疑問符(?)やアスタリスク(*)のワイルドカードを使用して、DDL同期をサポートする構成パラメータにオブジェクト名を指定できます。ワイルドカードのサポートの詳細は、『Oracle GoldenGate Windows and UNIX管理者ガイド』を参照してください。ワイルドカードを正しく処理するため、WILDCARDRESOLVE
パラメータはデフォルトでDYNAMIC
に設定されています。WILDCARDRESOLVE
がそれ以外に設定されている場合、DDL操作を処理しているOracle GoldenGateプロセスが異常終了し、プロセス・レポートにエラーが書き込まれます。
DDLサポートには同一の構成が必要であるため、Replicatパラメータ・ファイルにASSUMETARGETDEFS
パラメータを使用する必要があります。オブジェクトがDDLサポート向けに構成されている場合に、SOURCEDEFS
パラメータが使用されていると、Replicatが異常終了します。ASSUMETARGETDEFS
の詳細は、『Oracle GoldenGate Windows and UNIXリファレンス・ガイド』を参照してください。
データベース・オブジェクトはスコープに分類されます。スコープは、オブジェクトに対するDDL操作がOracle GoldenGateでどのように処理されるかを定義するカテゴリです。次のスコープがあります。
MAPPED
UNMAPPED
OTHER
スコープを使用すると、DDL操作、文字列の置換およびエラー処理のフィルタリングをより詳細に制御できます。
TABLE
およびMAP
文に指定されるオブジェクトは、MAPPED
スコープです。これらの文の抽出およびレプリケーションの手順は、オーバーライド・ルールが適用される場合を除き、指定されたオブジェクトのデータ(DML)とDDLの両方に適用されます。TABLE
文およびMAP
文のオブジェクトでは、表 5–1にリストされているDDL操作がサポートされます。
表5-1 MAP文およびTABLE文にマップ可能なオブジェクト
操作 | オブジェクト |
---|---|
|
|
|
|
次に、MAPPED
スコープに適用される制限事項を示します。
TABLE
およびMAP
では、オブジェクト名に使用されている可能性がある一部の特殊文字がサポートされていません。それらの文字のリストは、Oracle GoldenGateの管理for Windows and UNIXを参照してください。サポートされていない特殊文字を含むオブジェクトは、UNMAPPED
およびOTHER
のスコープでサポートされます。
COMMENT ON
のサポートは、COMMENT ON TABLE
およびCOMMENT ON COLUMN
に適用されます。
HASH
操作およびJOIN
操作では、索引に対するDDLはサポートされていません。
Extractでは、TABLE
文の指示に従って、MAPPED
スコープによりDDL取得用のオブジェクトがマークされます。Replicatの場合は、MAPPED
スコープにより、レプリケーション用のDDLがマークされ、MAP
文のTARGET
句の所有者と名前で指定されたオブジェクトにマップされます。
次のTABLE
文、MAP
文、およびソースDDL文があるとします。
Extract (ソース) | Replicat (ターゲット) | ソースDDL |
---|---|---|
|
|
|
この例では、ソース表fin.expen
が、異なる所有者と表名にマップするTARGET
句が指定されたMAP
文に存在するため、ターゲットDDL文は次のようになります。
ALTER TABLE fin2.expen2 ADD notes varchar2(100);
同様に、次のソースおよびターゲットDDL文は、例のTABLE
文およびMAP
文の2つ目のセットに使用できます。
ソース: CREATE TABLE hr.tabPayables ... ;
ターゲット: CREATE TABLE hrBackup.bak_tabPayables ...;
オブジェクトがMAPPED
スコープの場合は、DDLサポートをさらに絞り込む場合を除き、DDL構成パラメータでそのオブジェクト名を省略できます。TABLE
文およびMAP
文でオブジェクト名を変更する必要がある場合、変更内容はそれらのオブジェクトのDDLに自動的に適用されます。
TABLE
文にはオブジェクトを指定し、MAP
文には指定しない場合、そのオブジェクトのDDLは、ソースではスコープがMAPPED
になり、ターゲットではUNMAPPED
になります。
ALTER INDEX...RENAME
コマンドを別のターゲット索引名にマップすることはできませんが、別のターゲット所有者にマップすることは可能です。次のALTER INDEX...RENAME
で考察します。
ALTER INDEX src.ind RENAME TO indnew;
このDDLは、ワイルドカードを使用して、次のようにマップできます。
MAP src.* TARGET tgt.*;
または次のように、ソースとターゲットの指定で元の索引名を使用することを確認し、明示的にマップすることも可能です。
MAP src.ind TARGET tgt.ind;
前述のケースのいずれの場合も、ターゲットDDLは次のようになります。
ALTER INDEX tgt.ind RENAME TO indnew;
次のようなMAP
文は無効です。
MAP src.ind TARGET tgt.indnew;
この文は古い名前を新しい名前にマップしており、ターゲットDDLは次のようになります。
ALTER INDEX tgt.indnew RENAME TO indnew;
TABLE
文またはMAP
文でDDL操作の使用がサポートされているが、ベース・オブジェクト名がそれらのパラメータに含まれていない場合は、UNMAPPED
スコープになります。
オブジェクト名を、ソースではUNMAPPED
スコープ(ExtractのTABLE
文には含まれない)にし、ターゲットではMAPPED
スコープ(ReplicatのMAP
文に含まれる)にすることも、その逆にすることも可能です。Replicat構成でTeradataのDDLがUNMAPPED
スコープの場合、次のいずれかの方法でターゲットに適用されます。
必要なReplicat接続パラメータTARGETDB
にDSN (tdtarg
など)のみが含まれ、データベース名が含まれない場合は、ソースDDLと同じ所有者(データベース名)とオブジェクト名のターゲット・オブジェクトに適用されます。
TARGETDB
に特定のデータベース名(db@tdtarg
など)が使用されている場合は、TARGETDB
の所有者が指定されたターゲットにすべてのDDL操作が適用されます。
デフォルトでは、DDLレプリケーション・サポートのステータスは次のようになります。
Teradata TAMによりOracle GoldenGate VAMにすべてのDDLが送信されますが、ソースでは、Oracle GoldenGateのDDLサポートはデフォルトで無効化されています。DDLを取得するには、DDL
パラメータを使用してExtractを構成する必要があります。
レプリケートされるトランザクション・データの一貫性を維持するため、ターゲットでは、DDLサポートはデフォルトで有効化されています。デフォルトで、証跡に含まれるすべてのDDL操作がReplicatにより処理されます。必要な場合は、DDL
パラメータを使用し、Replicatを構成してDDL操作を無視するかフィルタすることが可能です。
特定(またはすべて)のDDLが要件に応じてターゲット・データベースに適用されるようにするには、DDL
パラメータを使用してDDL操作をフィルタします。
オプションを指定せずに使用すると、DDL
パラメータによるフィルタリングが実行されず、すべてのDDL操作が次のように伝播されます。
Extractパラメータとして、サポートされているすべてのデータベース・オブジェクトで生成された、サポートされている全DDL操作が取得されて証跡に送信されます。
Replicatパラメータとして、Oracle GoldenGateの証跡からすべてのDDL操作がレプリケートされ、ターゲットに適用されます。これは、このパラメータを使用しない場合のデフォルトの動作と同じです。
オプションを指定して使用すると、DDL
パラメータがフィルタリング・エージェントとして機能し、次に基づいてDDL操作が含まれるか除外されます。
スコープ
オブジェクト・タイプ
操作タイプ
オブジェクト名
DDLコマンド構文またはコメント、あるいはその両方の文字列
パラメータ・ファイルに使用できるDDL
パラメータは1つのみですが、包含オプションおよび除外オプションを複数組み合せて、DDLを必要なレベルにフィルタできます。
DDL
フィルタリング・オプションは、トランザクション・ソースから取得するプライマリExtractには有効ですが、データ・ポンプExtractには無効です。
複数のフィルタ・オプションの指定を組み合せた場合、AND
文として論理的にリンクされます。
レプリケートされるDDL文では、複数のオプションが指定されたすべてのフィルタ基準を満たしている必要があります。
複雑なフィルタ基準を使用する場合は、本番で使用する前に、テスト環境で構成をテストすることをお薦めします。
次に、DDL
パラメータの構文を示します。
DDL [
{INCLUDE | EXCLUDE}
[, MAPPED | UNMAPPED | OTHER | ALL]
[, OPTYPE type]
[, OBJTYPE 'type']
[, OBJNAME name]
[, INSTR 'string']
[, INSTRWORDS 'word_list
']
[, EVENTACTIONS (action)
]
[...]
表5-2 DDLの包含オプションおよび除外オプション
オプション | 説明 |
---|---|
INCLUDE | EXCLUDE |
包含句または除外句の開始を識別するには、
包含句または除外句では、
ただし、次のいずれかを使用できます。
同じ条件を含む |
MAPPED | UNMAPPED | OTHER | ALL |
DDLの操作スコープに基づいて
|
OPTYPE type
|
|
OBJTYPE 'type'
|
特定タイプのデータベース・オブジェクトに
|
OBJNAME name
|
例:
Replicatパラメータ・ファイルに
次の例の
ターゲットでは次のようになります。
トリガーなど、導出されたオブジェクトを作成するDDLの場合、 たとえば、次のDDL文を含める場合、正しい値は
|
INSTR 'string'
|
コマンド構文内に特定の文字列が使用されているDDL文に
文字列を一重引用符で囲みます。文字列の検索では、大/小文字は区別されません。
|
INSTRWORDS 'word_list'
|
指定した語を含むDDL文に
指定するすべての語が、有効化される 例:
この例は次に一致します。
および
|
EVENTACTIONS ( |
イベント・レコードと呼ばれるトランザクション・ログまたは証跡のDDLレコードに基づき、ExtractまたはReplicatプロセスが定義されたアクションを実行します。DDLイベントは、
DDLレコードで
|
次に、DDL
パラメータ・オプションの組合せ方の例を示します。
表5-1 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.
で開始される場合のみです。
DDL EXCLUDE ALL
は特別な処理オプションで、DDL操作自体のレプリケーションをブロックしながら、Oracle GoldenGateの最新のオブジェクト・メタデータを管理します。DDL EXCLUDE ALL
は、Oracle GoldenGate以外の方法でターゲットにDDLを適用しているが、Oracle GoldenGateでターゲット・オブジェクトにデータ変更をレプリケートする必要がある場合に使用できます。現在のメタデータがオブジェクト変更としてOracle GoldenGateに提供されるため、Oracle GoldenGateプロセスの停止と開始が不要になります。DDL EXCLUDE ALL
には、次の特別な条件が適用されます。
DDL EXCLUDE ALL
では、INCLUDE
句を使用する必要がありません。
DDL EXCLUDE ALL
を使用する際には、すぐにDMLを解決できるように、WILDCARDRESOLVE
パラメータをIMMEDIATE
に設定することが必要な場合があります。
すべてのDDLメタデータおよび操作がレプリケートされないようにするには、DDL
パラメータ全体を省略します。
DDL操作には、ベース・オブジェクト名と導出オブジェクト名を含めることができます。ベース・オブジェクトは、データを含むオブジェクトです。導出オブジェクトは、ベース・オブジェクトの一部の属性を継承し、そのオブジェクトに関連する関数を実行するオブジェクトです。ベース・オブジェクトと導出オブジェクトの両方を含むDDL文は、次のとおりです。
RENAME
索引またはトリガーのCREATE
およびDROP
次のDDL文があるとします。
CREATE INDEX hr.indexPayrollDate ON TABLE hr.tabPayroll (payDate);
この場合は、表がベース・オブジェクトです。その名前(hr.tabPayroll
)がベース名で、MAPPED
スコープのTABLE
またはMAP
とのマッピング対象です。導出オブジェクトは索引で、その名前(hr.indexPayrollDate
)が導出名です。
導出名は、ベース・オブジェクトとは別に、それ自体のTABLE
またはMAP
文でマップできます。または、1つのMAP
文で両方を処理できます。MAP
の場合、ターゲットへの導出オブジェクト名の変換は、後続の項で示すようにして行われます。
5.8.1.1項「MAPがベース・オブジェクトに存在して導出オブジェクトに存在しない場合」
5.8.1.2項「MAPがベース・オブジェクトと導出オブジェクトに存在する場合」
5.8.1.3項「MAPが導出オブジェクトに存在してベース・オブジェクトに存在しない場合」
MAP
文がベース・オブジェクトに存在して、導出オブジェクトに存在しない場合、結果は導出オブジェクトの暗黙的マッピングになります。DDL
パラメータにMAPPED
が指定されているとみなされ、Replicatにより、ベース・オブジェクトと同じターゲット所有者が導出オブジェクトに指定されます。導出オブジェクトの名前は、ソース文のままです。たとえば、次のような内容があるとします。
Extract (ソース) | Replicat (ターゲット) |
---|---|
|
|
次のソースDDL文があるとします。
CREATE INDEX hr.indexPayrollDate ON TABLE hr.tabPayroll (payDate);
CREATE INDEX
文は、Replicatにより、ターゲットで次のように実行されます。
CREATE INDEX hrBackup.indexPayrollDate ON TABLE hrBackup.tabPayroll (payDate);
暗黙的マッピングのルールは、導出オブジェクトにベース・オブジェクトと同じ所有者を指定するという一般的な業界のプラクティスに基づいています。また、ベース・オブジェクトと同じターゲット所有者が索引を所有している場合、暗黙的マッピングでは、導出オブジェクト名を明示的にマップする必要がありません。
MAP
文がベース・オブジェクトと導出オブジェクトにも1つ存在する場合、結果は明示的マッピングになります。DDL
パラメータにMAPPED
が指定されているとみなされ、それ自体のTARGET
句に従って、所有者と各オブジェクトの名前がReplicatにより変換されます。たとえば、次のような内容があるとします。
Extract (ソース) | Replicat (ターゲット) |
---|---|
|
|
次のソースDDL文があるとします。
CREATE INDEX hr.indexPayrollDate ON TABLE hr.tabPayroll (payDate);
CREATE INDEX
文は、Replicatにより、ターゲットで次のように実行されます。
CREATE INDEX hrIndex.indexPayrollDate ON TABLE hrBackup.tabPayroll (payDate);
ベース・オブジェクトとは異なる所有者がターゲットの索引を所有している必要がある場合、またはターゲットの名前がソースの名前と異なる必要がある場合は、明示的マッピングを使用します。
MAP
文が導出オブジェクトに存在して、ベース・オブジェクトに存在しない場合、Replicatでは、どちらのオブジェクトに対しても名前の変換が行われません。ターゲットDDL文はソースと同じになります。導出オブジェクトをマップするには、次のいずれかを選択します。
ベース・オブジェクトに明示的MAP
文を使用します。
名前の問題がない場合は、ワイルドカードを使用して、ベース・オブジェクトと導出オブジェクトの両方を同じMAP
文にマップします。
名前をどのように変換するかに応じて、各オブジェクトのMAP
文を作成します。
次の各項では、次から作成される新しい表がOracle GoldenGateでどのように処理されるかを説明します。
RENAME
操作では、ベース・オブジェクトは常に新しい表名です。次の例において、ベース・オブジェクト名はindex_paydate
です。
RENAME hr.indexPayrollDate TO index_paydate;
導出オブジェクト名はhr.indexPayrollDate
です。
CREATE TABLE AS SELECT
文には、基礎となる任意の数のオブジェクトに影響を与えるSELECT
文とINSERT
文が含まれます。ターゲットでは、Oracle GoldenGateにより、ターゲット・データベースからAS SELECT
句のデータが取得されます。
ターゲット・データベースにはAS SELECT
句のオブジェクトが存在し、その名前がソースのものと同一であることが必要です。
MAP
文では、Oracle GoldenGateにより、新しい表の名前(CREATE TABLE
name
)のみがTARGET
の指定にマップされますが、AS SELECT
句の基礎となるオブジェクトの名前はマップされません。名前がTARGET
の指定に変換されると、データ不整合の原因となるオブジェクトに対する依存性が存在する可能性があります。
次に、ソースのCREATE TABLE AS SELECT
文と、この文がOracle GoldenGateによってターゲットにどのようにレプリケートされるかの例を示します。
CREATE TABLE a.tab1 AS SELECT * FROM a.tab2;
ReplicatのMAP
文は次のようになります。
MAP a.tab*, TARGET a.x*;
Replicatが適用するターゲットDDL文は次のようになります。
CREATE TABLE a.xtab1 AS SELECT * FROM a.tab2;
AS SELECT * FROM
句の表の名前は、ソースでの名前(tab2
)のままになります。
ソースとターゲットで、基礎となるオブジェクトのデータの一貫性を保つには、Oracle GoldenGateによるデータ・レプリケーションに備えて構成します。前述の例では、次の文を使用してこの要件に対応できます。
ソース | ターゲット |
---|---|
|
|
MAP
文のTARGET
句に従った、導出オブジェクト名の変換が行われないようにするには、その文に含まれるDDLOPTIONS
パラメータにNOMAPDERIVED
オプションを指定して使用します。NOMAPDERIVED
は、ベース・オブジェクトまたは導出オブジェクトの名前を含む明示的なMAP
文をオーバーライドします。導出オブジェクトが含まれるソースDDLは、所有者とオブジェクト名がソースと同一のターゲットにレプリケートされます。
表5-3に、MAP
文がベース・オブジェクトのみ、導出オブジェクトのみ、またはその両方に存在するかどうかに基づいて、NOMAPDERIVED
と比較したMAPDERIVED
の結果を示します。
表5-3 マッピング構成に基づいた、ターゲットにおける[NO]MAPDERIVEDの結果
ベース・オブジェクト | 導出オブジェクト | MAP/NOMAPDERIVED | MAPごとの導出オブジェクトの変換 | 導出オブジェクトにおけるベース・オブジェクトの所有者の取得 |
---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
脚注 1 「マップされている」とは、MAP文に含まれていることを示しています。
次の例では、NOMAPDERIVED
と比較したMAPDERIVED
の結果を示します。
表5-4に示されている1つ目の例では、ベース名と導出名の両方がMAPDERIVED
で変換されるため、トリガーと表のどちらもターゲットのrpt
に所有されていることを示しています。
表5-4 導出オブジェクト名のデフォルトのマッピング(MAPDERIVED)
MAP文 | Extractに取得されたソースDDL文 | Replicatにより適用されたターゲットDDL文 |
---|---|---|
|
|
|
表5-5に示されている2つ目の例では、NOMAPDERIVED
で変換ができないようになっているため、トリガーはfin
に所有されています。
表5-5 NOMAPDERIVEDを使用している場合の導出オブジェクト名のマッピング
MAP文 | Extractに取得されたソースDDL文 | Replicatにより適用されたターゲットDDL文 |
---|---|---|
|
|
|
注意:
|
Oracle GoldenGateでの処理中に、DDL操作内で文字列を置換できます。この機能により、ディレクトリ名の変更やマッピング、およびデータ構造に直接関連しないその他のことも行いやすくなります。文字列置換は、DDLSUBST
パラメータで制御します。
詳細は、Oracle GoldenGateリファレンスfor Windows and UNIXを参照してください。
ここでは、ソースおよびターゲットのシステムで、DDL文がOracle GoldenGateでどのように処理されるかを説明します。Oracle GoldenGateパラメータの異なる基準が処理される順序を示し、ExtractとReplicatがそれぞれDDLを処理する方法の違いを説明します。
ExtractによりDDL操作が取得されます。
Extractにより、DDL
パラメータが検索されます。(この例では、それが存在すると仮定します。)
Extractにより、ベース・オブジェクト名と導出オブジェクト名(存在する場合)が取得されます。
Extractにより、DDLスコープ(MAPPED
、UNMAPPED
またはOTHER
)が判断されます。次の場合にMAPPED
になります。
マッピングで操作タイプおよびオブジェクト・タイプがサポートされる場合。
および
ベース・オブジェクト名/導出オブジェクト名(RENAME
の場合)が、TABLE
パラメータに存在する場合。
次の場合にUNMAPPED
になります。
マッピングで操作タイプおよびオブジェクト・タイプがサポートされない場合。
および
ベース・オブジェクト名/導出オブジェクト名(RENAME
の場合)が、TABLE
パラメータに存在しない場合。
それ以外の場合、操作はOTHER
と識別されます。
Extractにより、INCLUDE
およびEXCLUDE
句のDDL
パラメータが確認され、それらの句のDDL
パラメータ基準が評価されます。INCLUDE
またはEXCLUDE
がTRUE
に評価されるには、すべてのオプションがTRUE
に評価される必要があります。次のようになります。
EXCLUDE
句がTRUE
に評価されると、ExtractによりDDL操作が破棄され、別のDDL操作が評価されます。この場合は、処理手順が新たに始まります。
INCLUDE
句がTRUE
に評価されるか、DDL
パラメータにINCLUDE
句またはEXCLUDE
句が存在しない場合は、ExtractにDDL操作が含まれ、処理ロジックが続行されます。
ExtractによりDDLSUBST
パラメータが検索され、INCLUDE
およびEXCLUDE
句が評価されます。これらの句の基準がTRUE
になると、Extractにより、文字列置換が実行されます。Extractにより、パラメータ・ファイルの各DDLSUBST
文に対してDDL操作が評価されます。trueのDDLSUBST
文すべてで、Extractにより、DDLSUBST
パラメータがファイルにリストされている順序で文字列置換が実行されます。
Extractにより、DDL文が証跡に書き込まれます。
Replicatは次のようにDDLを評価します。
Replicatにより、DDL操作が証跡から読み取られます。
Replicatにより、DDLの同期スコープが評価され、DDLが名前マッピングに適格であるかどうかが判断されます。その他はOTHER
スコープになります。
Replicatにより、パラメータ・ファイルのMAP
文が評価されます。(証跡から読み取る際に)このDDLのソースのベース・オブジェクト名がいずれかのMAP
文に含まれている場合、その操作のスコープはMAPPED
とマークされます。それ以外の場合、スコープはUNMAPPED
とマークされます。
Replicatにより、ソースのベース・オブジェクト名が、MAP
文のTARGET
句に指定されたベース・オブジェクト名で置換されます。
導出オブジェクトがある場合、ReplicatはDDLOPTIONS MAPDERIVED
を検索します。存在する場合は、Replicatにより、ソースの導出名がMAP
文のターゲットの導出名で置換されます。
Replicatにより、INCLUDE
およびEXCLUDE
句のDDL
パラメータが確認され、それらに含まれるDDL
パラメータ基準が評価されます。INCLUDE
またはEXCLUDE
がTRUE
に評価されるには、すべてのオプションがTRUE
に評価される必要があります。次のようになります。
いずれかのEXCLUDE
句がTRUE
に評価されると、ReplicatによりDDL操作が破棄され、別のDDL操作の評価が開始されます。この場合は、処理手順が新たに始まります。
いずれかのINCLUDE
句がTRUE
に評価されるか、DDL
パラメータにINCLUDE
句またはEXCLUDE
句が存在しない場合は、ReplicatにDDL操作が含まれ、処理ロジックが続行されます。
ReplicatによりDDLSUBST
パラメータが検索され、INCLUDE
およびEXCLUDE
句が評価されます。これらの句のオプションがTRUE
になると、Replicatにより、文字列置換が実行されます。Replicatにより、パラメータ・ファイルの各DDLSUBST
文に対してDDL操作が評価されます。trueのDDLSUBST
文すべてで、Replicatにより、DDLSUBST
パラメータがファイルにリストされている順序で文字列置換が実行されます。
Replicatにより、DDL操作がターゲット・データベースで実行されます。
エラーがない場合は、Replicatにより次のDDL文が処理されます。エラーがある場合は、Replicatにより次の手順が実行されます。
Replicatにより、ReplicatのDDLERROR
パラメータ文のINCLUDE
およびEXCLUDE
ルールが、パラメータ・ファイルに表示される順序で分析されます。Replicatによりエラー・コードのルールが検出された場合は、指定のエラー処理が適用されますが、それ以外の場合はDEFAULT
の処理が適用されます。
エラー処理を行ってもDDL操作が成功しない場合は、ルールに指定されているとおりに、異常終了、操作の無視または破棄のいずれかがReplicatにより実行されます。
注意:
|
Extractにより検出された、メタデータのないオブジェクトのエラー、およびDDLがターゲット・データベースに適用される際に発生するReplicatのエラーを処理するには、DDLERROR
パラメータを使用します。DDLERROR
オプションを使用すると、処理の停止や特定の方法によるその他のエラーの処理など、デフォルトの方法で大部分のエラーを処理できます。同じパラメータ・ファイルにDDLERROR
のインスタンスを複数使用して、予想されるすべてのエラーを処理できます。オプションと使用方法については、Oracle GoldenGateリファレンスfor Windows and UNIXを参照してください。
Oracle GoldenGateでは、デフォルトで、ExtractおよびReplicatのレポートの最後にDDL操作に関する基本統計が表示されます。拡張DDLレポートを有効化するには、DDLOPTIONS
パラメータにREPORT
オプションを指定して使用します。拡張レポートには、DDL処理に関する次の情報が含まれます。
Oracle GoldenGateにより処理されたDDL操作に関する順を追った履歴。
使用されているDDLのフィルタリング・パラメータおよび処理パラメータ。
拡張DDLレポートの情報により、レポート・ファイルのサイズが増大しますが、トラブルシューティングなどの特定の状況で役に立ちます。
レポートを表示するには、GGSCIでVIEW REPORT
コマンドを使用します。
VIEW REPORT group
Extractレポートには、次がリストされます。
取得された各DDL操作の構文全体、そのOracle GoldenGate CSN番号、Teradataの順序番号およびバイト単位の操作サイズ。
文字列置換やINCLUDE
とEXCLUDE
のフィルタリングなど、操作に処理基準がどのように適用されたかを示す後続のエントリ。
操作が証跡に書き込まれたか除外されたかを示す別のエントリ。
次に、Extractレポート・ファイルから取得された例を示します。
例5-2 ExtractレポートのDDLセクションのサンプル
2011-01-21 18:41:40 GGS INFO 2100 DDL found, operation [DROP TABLE "SMIJATOVDBS"."src13_tabtable_9" ; (size 59)], start CSN [2500FF3F0200363A], DDL seqno [00000025000000000000381500000021]. 2011-01-21 18:41:40 GGS INFO 2100 DDL operation included [include mapped objname "*"], optype [DROP], objtype [TABLE], objowner [SMIJATOVDBS], objname [SRC13_TABTABLE_9]. 2011-01-21 18:41:40 GGS INFO 2100 DDL operation written to extract trail file.
Replicatレポートには、次がリストされます。
Replicatが証跡から処理した各DDL操作の構文全体。
操作のスコープ(MAPPED
、UNMAPPED
、OTHER
)、およびオブジェクト名がターゲットのDDL
文でどのようにマップされたか(該当する場合)を示す後続のエントリ。
処理基準がどのように適用されたかを示す別のエントリ。
操作が成功したか失敗したか、およびReplicatによりエラー処理ルールが適用されたかどうかを示す追加のエントリ。
次に、Replicatレポート・ファイルから取得された例を示します。
例5-3 ReplicatレポートのDDLセクションのサンプル
2011-01-21 18:41:44 GGS INFO 2104 DDL found, operation [DROP TABLE "SMIJATOVDBS"."src13_tabtable_9" ; (size 59)]. 2011-01-21 18:41:44 GGS INFO 2100 DDL is of mapped scope, after mapping new operation [DROP TABLE "SMIJATOVDBT"."SRC13_TABTABLE_9" ; (size 59)]. 2011-01-21 18:41:44 GGS INFO 2100 Executing DDL operation. 2011-01-21 18:41:44 GGS INFO 2105 DDL operation successful.
GGSCIでSEND
コマンドを使用すると、ExtractやReplicatのレポートにDDL処理に関する現在の統計を送信できます。
SEND {EXTRACT | REPLICAT} group
REPORT
統計には、次の総数が表示されます。
すべてのDDL操作
スコープがMAPPED
の操作
スコープがUNMAPPED
の操作
スコープがOTHER
の操作
除外された操作(操作数から含まれる操作を引いた数)
エラー(Replicatのみ)
再試行されたエラー(Replicatのみ)
破棄されたエラー(Replicatのみ)
無視された操作(Replicatのみ)
サポートでサポート・ケースを開くと、トレースの有効化を依頼される場合があります。次のパラメータがDDLのトレースを制御します。
TLTRACE
はExtractトレースを制御します
TRACE
およびTRACE2
はReplicatトレースを制御します。
これらのパラメータには、DDLのトレースをDMLのトレースから分離するオプションがあります。詳細は、Oracle GoldenGateリファレンスfor Windows and UNIXを参照してください。