この章では、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を参照してください。