ヘッダーをスキップ
Oracle® GoldenGate TeradataのためのOracle GoldenGateのインストールおよび構成
12c (12.1.2)
E52452-01
  目次へ移動
目次

前
 
次
 

5 TeradataデータベースへのDDL同期の構成

この章では、Oracle GoldenGateにおけるDDLサポートの理解とその構成方法について説明します。この章は、次の各項で構成されます。

5.1 この章について

この章には、Teradata環境内のOracle GoldenGateソリューションのセットアップ固有の情報が記載されています。このドキュメントは、TeradataデータベースおよびTeradata Replication Solutionsの基本的な知識を持つ読者を対象にしています。さらに、次の内容を正しく構成していることを前提とします。

Teradataデータベースにレプリケーションを構成する方法の詳細は、『Teradata Replication Solutions』のドキュメントを参照してください。

5.2 DDL同期の概要

Oracle GoldenGateでは、あるデータベースから別のデータベースへのDDL操作の同期がサポートされています。DDL同期は、次のような場合にアクティブになります。

DDLのレプリケーションおよびトランザクション・データ変更(DML)のレプリケーションをサポートするコンポーネント同士は、相互に独立しています。そのため、次のような同期が可能です。

5.3 Oracle GoldenGateにおけるDDLサポートの制限事項

このトピックでは、DDL機能の制限事項について説明します。このドキュメントの発行後に明らかになったその他の制限事項については、ソフトウェアに同梱されているOracle GoldenGateのリリース・ノートまたはreadmeファイルを参照してください。

5.3.1 DDL文の長さ

Oracle GoldenGateでは、文字数ではなく、バイト数でDDL文の長さが計測されます。サポートされる長さは約2MBで、いくつかある特性の中でも、影響を受けるオブジェクトの名前やそのDDLタイプによってサイズに幅がある内部オーバーヘッドが考慮されています。DDLがサポートされているサイズより長い場合は、Extractにより警告が発行され、DDL操作が無視されます。

5.3.2 サポートされているトポロジ

Oracle GoldenGateでは、同じ構成においてのみDDL同期がサポートされます。ソースとターゲットのオブジェクト定義は同一であることが必要です。

Oracle GoldenGateは、スタンバイ・データベースではDDLをサポートしていません。

Oracle GoldenGateでは、サポートされているすべての一方向構成、および双方向構成(2つのシステム間のみ)でDDLレプリケーションがサポートされています。

5.3.3 フィルタリング、マッピングおよび変換

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としてマップすることはできません。

5.3.4 DDLレスポンス時間

TeradataデータベースおよびOracle GoldenGateコンポーネントを含むレプリケーション・システム間の同期プロトコルに内在するレイテンシが原因で、レプリケーション用に取得されるDDL文のレスポンス時間が長くなる場合があります。レスポンス時間のオーバーヘッドは、ほとんどの条件下で1秒を超えないようにする必要があります。取得されないDDLのレスポンス時間には、大きな影響はありません。UDTまたはLOBを含む表の変更データを取得するパフォーマンス上のコストは、それらのデータ型を含まない表と比較して、データをエクスポートするその他の方法と比較できる必要があります。

5.4 DDLサポートの構成ガイドライン

次に、Oracle GoldenGateプロセスがDDLレプリケーションをサポートするよう構成する際に考慮するガイドラインを示します。

5.4.1 データベース権限

DDLの取得とレプリケーションをサポートするためにOracle GoldenGateに必要なデータベース権限については、「Oracle GoldenGateプロセス用のデータベース・ユーザー」を参照してください。

5.4.2 並列処理

Extract/Replicatの並列処理を使用している場合は、関連するDDLとDMLを同じプロセス・ストリームに保持し、データの整合性を確保します。プロセスを次のように構成します。

  • あるオブジェクトに対するすべてのDDLおよびDMLが、同じExtractグループおよび同じReplicatグループで処理されるようにします。

  • 相互に関連するすべてのオブジェクトが、同じプロセス・グループで処理されるようにします。

たとえば、ReplicatATable1のDMLを処理する場合は、Table1のDDLも処理する必要があります。Table2Table1に対する外部キーがある場合は、そのDMLとDDLの操作もReplicatAによって処理される必要があります。

あるExtractグループが、様々なReplicatグループによって読み取られる複数の証跡に書込みを行う場合、Extractはすべての証跡にすべてのDDLを送信します。Replicatパラメータ・ファイルにあるDDLパラメータのフィルタ・オプションを使用してDDLをフィルタするには、各Replicatグループを使用します。

5.4.3 データ・ポンプExtractおよびVAMソートによるExtractのDDLとDML

データ・ポンプExtractまたはVAMソートによるExtractを使用している場合、オブジェクトでDDLサポートが使用されているときには、DMLをPASSTHRUモード用に構成します。DDLは、PASSTHRUモードのデータ・ポンプExtractまたはVAMソートによるExtractを介して渡され、DMLも同様にする必要があります。DMLのフィルタリング、マッピングまたは変換は、プライマリExtractまたはReplicatによって行われる必要があります。ただし、DDLサポートを使用しない表はNOPASSTHRUモードに構成でき、データのフィルタリングやデータ・ポンプによる操作を実行できます。

表をPASSTHRU、NOPASSTHRUまたはその両方に構成する手順

  1. データ・ポンプExtractまたはVAMソートによるExtractのパラメータ・ファイルで、DDLサポートを使用する表を含むすべてのTABLE文の前に、PASSTHRUパラメータを配置します。

  2. データのフィルタリング、マッピングまたは変換を実行する場合は、同じパラメータ・ファイルで、DDLサポートを使用しない表を含むTABLE文の前に、NOPASSTHRUパラメータを配置します。

  3. データ・ポンプExtractまたはVAMソートによるExtractのDDL構成パラメータ(DDLDDLOPTIONSDDLSUBSTDDLERROR)、またはDDLオプションが指定されたOracle GoldenGateのトレース・パラメータは使用しないでください。

PASSTHRUおよびNOPASSTHRUの詳細は、Oracle GoldenGateリファレンスfor Windows and UNIXを参照してください。

5.4.4 オブジェクト名

Oracle GoldenGateでは、データベース定義のオブジェクト名、ケースおよびキャラクタ・セットが保持されます。このサポートにより、データベース階層のすべてのレベルにおいて、シングルバイト名とマルチバイト名、記号およびアクセント文字が保持されます。オブジェクト名のサポートの詳細は、『Oracle GoldenGate Windows and UNIX管理者ガイド』を参照してください。

疑問符(?)やアスタリスク(*)のワイルドカードを使用して、DDL同期をサポートする構成パラメータにオブジェクト名を指定できます。ワイルドカードのサポートの詳細は、『Oracle GoldenGate Windows and UNIX管理者ガイド』を参照してください。ワイルドカードを正しく処理するため、WILDCARDRESOLVEパラメータはデフォルトでDYNAMICに設定されています。WILDCARDRESOLVEがそれ以外に設定されている場合、DDL操作を処理しているOracle GoldenGateプロセスが異常終了し、プロセス・レポートにエラーが書き込まれます。

5.4.5 データ定義

DDLサポートには同一の構成が必要であるため、Replicatパラメータ・ファイルにASSUMETARGETDEFSパラメータを使用する必要があります。オブジェクトがDDLサポート向けに構成されている場合に、SOURCEDEFSパラメータが使用されていると、Replicatが異常終了します。ASSUMETARGETDEFSの詳細は、『Oracle GoldenGate Windows and UNIXリファレンス・ガイド』を参照してください。

5.4.6 初期同期

DDLレプリケーションを構成するには、ソース・データベースと同期しているターゲット・データベースから開始します。DDLサポートはReplicatの初期ロード・メソッドと互換性があります。

また、DDLサポートには、Teradata FastLoadの初期同期メソッドとの互換性もあります。この機能の詳細は、Teradataのドキュメントを参照してください。

初期ロードの実行前に、DDLの抽出とレプリケーションを無効化します。DDL処理は、ExtractおよびReplicatパラメータ・ファイルのDDLパラメータで制御されます。

5.5 DDLスコープについて

データベース・オブジェクトはスコープに分類されます。スコープは、オブジェクトに対するDDL操作がOracle GoldenGateでどのように処理されるかを定義するカテゴリです。次のスコープがあります。

スコープを使用すると、DDL操作、文字列の置換およびエラー処理のフィルタリングをより詳細に制御できます。

5.5.1 MAPPEDスコープ

TABLEおよびMAP文に指定されるオブジェクトは、MAPPEDスコープです。これらの文の抽出およびレプリケーションの手順は、オーバーライド・ルールが適用される場合を除き、指定されたオブジェクトのデータ(DML)とDDLの両方に適用されます。TABLE文およびMAP文のオブジェクトでは、表 5–1にリストされているDDL操作がサポートされます。

表5-1 MAP文およびTABLE文にマップ可能なオブジェクト

操作 オブジェクト

CREATE

ALTER

DROP

RENAME

COMMENT ON

TABLE (includes AS SELECT)

INDEX

TRIGGER

VIEW

FUNCTION

PROCEDURE

MACRO

GRANT

REVOKE

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

TABLE fin.expen;

TABLE hr.tab*;

MAP fin.expen, TARGET fin2.expen2;

MAP hr.tab*, TARGET hrBackup.bak_*;

ALTER TABLE fin.expen ADD notes varchar2(100);


この例では、ソース表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になります。

5.5.1.1 ALTER INDEXのマッピング

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; 

5.5.2 UNMAPPEDスコープ

TABLE文またはMAP文でDDL操作の使用がサポートされているが、ベース・オブジェクト名がそれらのパラメータに含まれていない場合は、UNMAPPEDスコープになります。

オブジェクト名を、ソースではUNMAPPEDスコープ(ExtractのTABLE文には含まれない)にし、ターゲットではMAPPEDスコープ(ReplicatのMAP文に含まれる)にすることも、その逆にすることも可能です。Replicat構成でTeradataのDDLがUNMAPPEDスコープの場合、次のいずれかの方法でターゲットに適用されます。

  • 必要なReplicat接続パラメータTARGETDBにDSN (tdtargなど)のみが含まれ、データベース名が含まれない場合は、ソースDDLと同じ所有者(データベース名)とオブジェクト名のターゲット・オブジェクトに適用されます。

  • TARGETDBに特定のデータベース名(db@tdtargなど)が使用されている場合は、TARGETDBの所有者が指定されたターゲットにすべてのDDL操作が適用されます。

5.5.3 OTHERスコープ

マップできないDDL操作は、OTHERスコープになります。Replicat構成でDDLがOTHERスコープの場合、ソースのDDLと所有者およびオブジェクト名が同一のターゲットに適用されます。OTHERスコープの例は、データ・ファイル名に対して操作を実行するDDLなど、システム固有の参照を行うDDL操作です。

5.6 DDLサポートの有効化

デフォルトでは、DDLレプリケーション・サポートのステータスは次のようになります。

5.7 DDLレプリケーションのフィルタリング

特定(またはすべて)のDDLが要件に応じてターゲット・データベースに適用されるようにするには、DDLパラメータを使用してDDL操作をフィルタします。

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

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

パラメータ・ファイルに使用できるDDLパラメータは1つのみですが、包含オプションおよび除外オプションを複数組み合せて、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

包含句または除外句の開始を識別するには、INCLUDEおよびEXCLUDEを使用します。

  • 包含句には、このパラメータの影響を受けるDDLを識別するフィルタ基準が含まれます。

  • 除外句には、このパラメータから特定のDDLを除外するフィルタ基準が含まれます。

包含句または除外句では、INCLUDEまたはEXCLUDEキーワードの後に、適用するパラメータのその他のオプションの有効な組合せが続いている必要があります。

EXCLUDEを使用する場合は、対応するINCLUDE句を作成する必要があります。たとえば、次は無効です。

DDL EXCLUDE OBJNAME hr.*

ただし、次のいずれかを使用できます。

DDL INCLUDE ALL, EXCLUDE OBJNAME hr.*

DDL INCLUDE OBJNAME fin.* EXCLUDE fin.ss

同じ条件を含むINCLUDEsより、EXCLUDEが優先されます。包含句および除外句は複数使用できます。

MAPPED | UNMAPPED | OTHER | ALL

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

  • MAPPEDでは、MAPPEDスコープのDDL操作にINCLUDEまたはEXCLUDEが適用されます。MAPPEDフィルタリングは、その他のDDLパラメータ・オプションで指定されているフィルタリングの前に実行されます。

  • UNMAPPEDでは、UNMAPPEDスコープのDDL操作にINCLUDEまたはEXCLUDEが適用されます。

  • OTHERでは、OTHERスコープのDDL操作にINCLUDEまたはEXCLUDEが適用されます。

  • ALLでは、すべてのスコープのDDL操作にINCLUDEまたはEXCLUDEが適用されます。

OPTYPE type

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

DDL INCLUDE OPTYPE ALTER

OBJTYPE 'type'

特定タイプのデータベース・オブジェクトにINCLUDEまたはEXCLUDEを適用するには、OBJTYPEを使用します。typeには、データベースに対して有効な任意のオブジェクト・タイプ(TABLEINDEXTRIGGERなど)を使用します。オブジェクト・タイプの名前は、一重引用符で囲みます。次に例を示します。

DDL INCLUDE OBJTYPE ’INDEX'

OBJNAME name

owner.table_nameなど、オブジェクトの完全修飾名にINCLUDEまたはEXCLUDEを適用するには、OBJNAMEを使用します。オブジェクト名にのみ、ワイルドカードを使用できます。

例:

DDL INCLUDE OBJNAME accounts.*

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パラメータで指定されているデータベース・ユーザーにマップされます。

トリガーなど、導出されたオブジェクトを作成する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'

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

DDL INCLUDE ALL EXCLUDE INSTR 'CREATE INDEX'

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

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

INSTRWORDS 'word_list'

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

word_listに、任意の順序で語を指定し、一重引用符で囲みます。空白を含めるには、その空白(および該当する場合は空白と語)を二重引用符で囲みます。二重引用符は、文を囲む場合にも使用できます。

指定するすべての語が、有効化されるINSTRWORDSのDDLに存在する必要があります。

例:

ALTER TABLE INCLUDE INSTRWORDS 'ALTER CONSTRAINT " xyz"

この例は次に一致します。

ALTER TABLE ADD CONSTRAINT xyz CHECK

および

ALTER TABLE DROP CONSTRAINT xyz

INSTRWORDSでは、文字列の中に一重引用符(' ')を使用することも、NULL値を使用することもできません。

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


5.7.1 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.で開始される場合のみです。

5.7.2 DDL EXCLUDE ALL

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パラメータ全体を省略します。

5.8 Oracle GoldenGateにおける導出オブジェクト名の処理方法

DDL操作には、ベース・オブジェクト名と導出オブジェクト名を含めることができます。ベース・オブジェクトは、データを含むオブジェクトです。導出オブジェクトは、ベース・オブジェクトの一部の属性を継承し、そのオブジェクトに関連する関数を実行するオブジェクトです。ベース・オブジェクトと導出オブジェクトの両方を含むDDL文は、次のとおりです。

次のDDL文があるとします。

CREATE INDEX hr.indexPayrollDate ON TABLE hr.tabPayroll (payDate);

この場合は、表がベース・オブジェクトです。その名前(hr.tabPayroll)がベース名で、MAPPEDスコープのTABLEまたはMAPとのマッピング対象です。導出オブジェクトは索引で、その名前(hr.indexPayrollDate)が導出名です。

5.8.1 導出オブジェクトのマッピング

導出名は、ベース・オブジェクトとは別に、それ自体のTABLEまたはMAP文でマップできます。または、1つのMAP文で両方を処理できます。MAPの場合、ターゲットへの導出オブジェクト名の変換は、後続の項で示すようにして行われます。

5.8.1.1項「MAPがベース・オブジェクトに存在して導出オブジェクトに存在しない場合」

5.8.1.2項「MAPがベース・オブジェクトと導出オブジェクトに存在する場合」

5.8.1.3項「MAPが導出オブジェクトに存在してベース・オブジェクトに存在しない場合」

5.8.1.1 MAPがベース・オブジェクトに存在して導出オブジェクトに存在しない場合

MAP文がベース・オブジェクトに存在して、導出オブジェクトに存在しない場合、結果は導出オブジェクトの暗黙的マッピングになります。DDLパラメータにMAPPEDが指定されているとみなされ、Replicatにより、ベース・オブジェクトと同じターゲット所有者が導出オブジェクトに指定されます。導出オブジェクトの名前は、ソース文のままです。たとえば、次のような内容があるとします。

Extract (ソース) Replicat (ターゲット)

TABLE hr.tab*;

MAP hr.tab*, TARGET hrBackup.*;


次のソースDDL文があるとします。

CREATE INDEX hr.indexPayrollDate ON TABLE hr.tabPayroll (payDate);

CREATE INDEX文は、Replicatにより、ターゲットで次のように実行されます。

CREATE INDEX hrBackup.indexPayrollDate ON TABLE hrBackup.tabPayroll (payDate);

暗黙的マッピングのルールは、導出オブジェクトにベース・オブジェクトと同じ所有者を指定するという一般的な業界のプラクティスに基づいています。また、ベース・オブジェクトと同じターゲット所有者が索引を所有している場合、暗黙的マッピングでは、導出オブジェクト名を明示的にマップする必要がありません。

5.8.1.2 MAPがベース・オブジェクトと導出オブジェクトに存在する場合

MAP文がベース・オブジェクトと導出オブジェクトにも1つ存在する場合、結果は明示的マッピングになります。DDLパラメータにMAPPEDが指定されているとみなされ、それ自体のTARGET句に従って、所有者と各オブジェクトの名前がReplicatにより変換されます。たとえば、次のような内容があるとします。

Extract (ソース) Replicat (ターゲット)

TABLE hr.tab*;

TABLE hr.index*;

MAP hr.tab*, TARGET hrBackup.*;

MAP hr.index*, TARGET hrIndex.*;


次のソースDDL文があるとします。

CREATE INDEX hr.indexPayrollDate ON TABLE hr.tabPayroll (payDate);

CREATE INDEX文は、Replicatにより、ターゲットで次のように実行されます。

CREATE INDEX hrIndex.indexPayrollDate ON TABLE hrBackup.tabPayroll (payDate);

ベース・オブジェクトとは異なる所有者がターゲットの索引を所有している必要がある場合、またはターゲットの名前がソースの名前と異なる必要がある場合は、明示的マッピングを使用します。

5.8.1.3 MAPが導出オブジェクトに存在してベース・オブジェクトに存在しない場合

MAP文が導出オブジェクトに存在して、ベース・オブジェクトに存在しない場合、Replicatでは、どちらのオブジェクトに対しても名前の変換が行われません。ターゲットDDL文はソースと同じになります。導出オブジェクトをマップするには、次のいずれかを選択します。

  • ベース・オブジェクトに明示的MAP文を使用します。

  • 名前の問題がない場合は、ワイルドカードを使用して、ベース・オブジェクトと導出オブジェクトの両方を同じMAP文にマップします。

  • 名前をどのように変換するかに応じて、各オブジェクトのMAP文を作成します。

5.8.2 導出オブジェクトとしての新しい表

次の各項では、次から作成される新しい表がOracle GoldenGateでどのように処理されるかを説明します。

5.8.2.1 RENAME

RENAME操作では、ベース・オブジェクトは常に新しい表名です。次の例において、ベース・オブジェクト名はindex_paydateです。

RENAME hr.indexPayrollDate TO index_paydate;

導出オブジェクト名はhr.indexPayrollDateです。

5.8.2.2 CREATE TABLE AS SELECT

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によるデータ・レプリケーションに備えて構成します。前述の例では、次の文を使用してこの要件に対応できます。

ソース ターゲット

TABLE a.tab*;

MAPEXCLUDE a.tab2

MAP a.tab*, TARGET a.x*;

MAP a.tab2, TARGET a.tab2;


5.8.3 導出オブジェクトのマッピングの無効化

MAP文のTARGET句に従った、導出オブジェクト名の変換が行われないようにするには、その文に含まれるDDLOPTIONSパラメータにNOMAPDERIVEDオプションを指定して使用します。NOMAPDERIVEDは、ベース・オブジェクトまたは導出オブジェクトの名前を含む明示的なMAP文をオーバーライドします。導出オブジェクトが含まれるソースDDLは、所有者とオブジェクト名がソースと同一のターゲットにレプリケートされます。

表5-3に、MAP文がベース・オブジェクトのみ、導出オブジェクトのみ、またはその両方に存在するかどうかに基づいて、NOMAPDERIVEDと比較したMAPDERIVEDの結果を示します。

表5-3 マッピング構成に基づいた、ターゲットにおける[NO]MAPDERIVEDの結果

ベース・オブジェクト 導出オブジェクト MAP/NOMAPDERIVED MAPごとの導出オブジェクトの変換 導出オブジェクトにおけるベース・オブジェクトの所有者の取得

mapped脚注 1 

mapped

MAPDERIVED

yes

no

mapped

not mapped

MAPDERIVED

no

yes

not mapped

mapped

MAPDERIVED

no

no

not mapped

not mapped

MAPDERIVED

no

no

mapped

mapped

NOMAPDERIVED

no

no

mapped

not mapped

NOMAPDERIVED

no

no

not mapped

mapped

NOMAPDERIVED

no

no

not mapped

not mapped

NOMAPDERIVED

no

no


脚注 1 「マップされている」とは、MAP文に含まれていることを示しています。

次の例では、NOMAPDERIVEDと比較したMAPDERIVEDの結果を示します。

表5-4に示されている1つ目の例では、ベース名と導出名の両方がMAPDERIVEDで変換されるため、トリガーと表のどちらもターゲットのrptに所有されていることを示しています。

表5-4 導出オブジェクト名のデフォルトのマッピング(MAPDERIVED)

MAP文 Extractに取得されたソースDDL文 Replicatにより適用されたターゲットDDL文

MAP fin.*, TARGET rpt.*;

CREATE TRIGGER fin.act_trig ON fin.acct;

CREATE TRIGGER rpt.act_trig ON rpt.acct;


表5-5に示されている2つ目の例では、NOMAPDERIVEDで変換ができないようになっているため、トリガーはfinに所有されています。

表5-5 NOMAPDERIVEDを使用している場合の導出オブジェクト名のマッピング

MAP文 Extractに取得されたソースDDL文 Replicatにより適用されたターゲットDDL文

MAP fin.*, TARGET rpt.*;

CREATE TRIGGER fin.act_trig ON fin.acct;

CREATE TRIGGER fin.act_trig ON rpt.acct;



注意:

RENAME文の場合、新しい表名はベース表の名前とみなされ、古い表名は導出表の名前とみなされます。


5.9 DDL文字列置換の使用

Oracle GoldenGateでの処理中に、DDL操作内で文字列を置換できます。この機能により、ディレクトリ名の変更やマッピング、およびデータ構造に直接関連しないその他のことも行いやすくなります。文字列置換は、DDLSUBSTパラメータで制御します。

詳細は、Oracle GoldenGateリファレンスfor Windows and UNIXを参照してください。


注意:

DDLSUBSTパラメータ文を作成する前に、次の項(「処理でDDLが評価される仕組み」)を確認することをお薦めします。


5.10 処理でDDLが評価される仕組み

ここでは、ソースおよびターゲットのシステムで、DDL文がOracle GoldenGateでどのように処理されるかを説明します。Oracle GoldenGateパラメータの異なる基準が処理される順序を示し、ExtractとReplicatがそれぞれDDLを処理する方法の違いを説明します。

5.10.1 ExtractがDDLを評価する仕組み

  1. ExtractによりDDL操作が取得されます。

  2. Extractにより、DDLパラメータが検索されます。(この例では、それが存在すると仮定します。)

  3. Extractにより、ベース・オブジェクト名と導出オブジェクト名(存在する場合)が取得されます。

  4. Extractにより、DDLスコープ(MAPPEDUNMAPPEDまたはOTHER)が判断されます。次の場合にMAPPEDになります。

    • マッピングで操作タイプおよびオブジェクト・タイプがサポートされる場合。

      および

    • ベース・オブジェクト名/導出オブジェクト名(RENAMEの場合)が、TABLEパラメータに存在する場合。

    次の場合にUNMAPPEDになります。

    • マッピングで操作タイプおよびオブジェクト・タイプがサポートされない場合。

      および

    • ベース・オブジェクト名/導出オブジェクト名(RENAMEの場合)が、TABLEパラメータに存在しない場合。

    それ以外の場合、操作はOTHERと識別されます。

  5. Extractにより、INCLUDEおよびEXCLUDE句のDDLパラメータが確認され、それらの句のDDLパラメータ基準が評価されます。INCLUDEまたはEXCLUDETRUEに評価されるには、すべてのオプションがTRUEに評価される必要があります。次のようになります。

    • EXCLUDE句がTRUEに評価されると、ExtractによりDDL操作が破棄され、別のDDL操作が評価されます。この場合は、処理手順が新たに始まります。

    • INCLUDE句がTRUEに評価されるか、DDLパラメータにINCLUDE句またはEXCLUDE句が存在しない場合は、ExtractにDDL操作が含まれ、処理ロジックが続行されます。

  6. ExtractによりDDLSUBSTパラメータが検索され、INCLUDEおよびEXCLUDE句が評価されます。これらの句の基準がTRUEになると、Extractにより、文字列置換が実行されます。Extractにより、パラメータ・ファイルの各DDLSUBST文に対してDDL操作が評価されます。trueのDDLSUBST文すべてで、Extractにより、DDLSUBSTパラメータがファイルにリストされている順序で文字列置換が実行されます。

  7. Extractにより、DDL文が証跡に書き込まれます。

5.10.2 ReplicatがDDLを評価する仕組み

Replicatは次のようにDDLを評価します。

  1. Replicatにより、DDL操作が証跡から読み取られます。

  2. Replicatにより、DDLの同期スコープが評価され、DDLが名前マッピングに適格であるかどうかが判断されます。その他はOTHERスコープになります。

  3. Replicatにより、パラメータ・ファイルのMAP文が評価されます。(証跡から読み取る際に)このDDLのソースのベース・オブジェクト名がいずれかのMAP文に含まれている場合、その操作のスコープはMAPPEDとマークされます。それ以外の場合、スコープはUNMAPPEDとマークされます。

  4. Replicatにより、ソースのベース・オブジェクト名が、MAP文のTARGET句に指定されたベース・オブジェクト名で置換されます。

  5. 導出オブジェクトがある場合、ReplicatはDDLOPTIONS MAPDERIVEDを検索します。存在する場合は、Replicatにより、ソースの導出名がMAP文のターゲットの導出名で置換されます。

  6. Replicatにより、INCLUDEおよびEXCLUDE句のDDLパラメータが確認され、それらに含まれるDDLパラメータ基準が評価されます。INCLUDEまたはEXCLUDETRUEに評価されるには、すべてのオプションがTRUEに評価される必要があります。次のようになります。

    • いずれかのEXCLUDE句がTRUEに評価されると、ReplicatによりDDL操作が破棄され、別のDDL操作の評価が開始されます。この場合は、処理手順が新たに始まります。

    • いずれかのINCLUDE句がTRUEに評価されるか、DDLパラメータにINCLUDE句またはEXCLUDE句が存在しない場合は、ReplicatにDDL操作が含まれ、処理ロジックが続行されます。

  7. ReplicatによりDDLSUBSTパラメータが検索され、INCLUDEおよびEXCLUDE句が評価されます。これらの句のオプションがTRUEになると、Replicatにより、文字列置換が実行されます。Replicatにより、パラメータ・ファイルの各DDLSUBST文に対してDDL操作が評価されます。trueのDDLSUBST文すべてで、Replicatにより、DDLSUBSTパラメータがファイルにリストされている順序で文字列置換が実行されます。

  8. Replicatにより、DDL操作がターゲット・データベースで実行されます。

  9. エラーがない場合は、Replicatにより次のDDL文が処理されます。エラーがある場合は、Replicatにより次の手順が実行されます。

  10. Replicatにより、ReplicatのDDLERRORパラメータ文のINCLUDEおよびEXCLUDEルールが、パラメータ・ファイルに表示される順序で分析されます。Replicatによりエラー・コードのルールが検出された場合は、指定のエラー処理が適用されますが、それ以外の場合はDEFAULTの処理が適用されます。

  11. エラー処理を行ってもDDL操作が成功しない場合は、ルールに指定されているとおりに、異常終了、操作の無視または破棄のいずれかがReplicatにより実行されます。


注意:

MAP文に同じソースに対する複数のターゲットが存在する場合は、それぞれに対して処理ロジックが実行されます。


5.11 DDL処理エラーの処理

Extractにより検出された、メタデータのないオブジェクトのエラー、およびDDLがターゲット・データベースに適用される際に発生するReplicatのエラーを処理するには、DDLERRORパラメータを使用します。DDLERRORオプションを使用すると、処理の停止や特定の方法によるその他のエラーの処理など、デフォルトの方法で大部分のエラーを処理できます。同じパラメータ・ファイルにDDLERRORのインスタンスを複数使用して、予想されるすべてのエラーを処理できます。オプションと使用方法については、Oracle GoldenGateリファレンスfor Windows and UNIXを参照してください。

5.12 DDLレポート情報の表示

Oracle GoldenGateでは、デフォルトで、ExtractおよびReplicatのレポートの最後にDDL操作に関する基本統計が表示されます。拡張DDLレポートを有効化するには、DDLOPTIONSパラメータにREPORTオプションを指定して使用します。拡張レポートには、DDL処理に関する次の情報が含まれます。

拡張DDLレポートの情報により、レポート・ファイルのサイズが増大しますが、トラブルシューティングなどの特定の状況で役に立ちます。

レポートを表示するには、GGSCIでVIEW REPORTコマンドを使用します。

VIEW REPORT group

5.12.1 Extract DDLレポート

Extractレポートには、次がリストされます。

  • 取得された各DDL操作の構文全体、そのOracle GoldenGate CSN番号、Teradataの順序番号およびバイト単位の操作サイズ。

  • 文字列置換やINCLUDEEXCLUDEのフィルタリングなど、操作に処理基準がどのように適用されたかを示す後続のエントリ。

  • 操作が証跡に書き込まれたか除外されたかを示す別のエントリ。

次に、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.

5.12.2 Replicat DDLレポート

Replicatレポートには、次がリストされます。

  • Replicatが証跡から処理した各DDL操作の構文全体。

  • 操作のスコープ(MAPPEDUNMAPPEDOTHER)、およびオブジェクト名がターゲットの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.

5.12.3 プロセス・レポートの統計

GGSCIでSENDコマンドを使用すると、ExtractやReplicatのレポートにDDL処理に関する現在の統計を送信できます。

SEND {EXTRACT | REPLICAT} group REPORT

統計には、次の総数が表示されます。

  • すべてのDDL操作

  • スコープがMAPPEDの操作

  • スコープがUNMAPPEDの操作

  • スコープがOTHERの操作

  • 除外された操作(操作数から含まれる操作を引いた数)

  • エラー(Replicatのみ)

  • 再試行されたエラー(Replicatのみ)

  • 破棄されたエラー(Replicatのみ)

  • 無視された操作(Replicatのみ)

5.13 DDL処理のトレース

サポートでサポート・ケースを開くと、トレースの有効化を依頼される場合があります。次のパラメータがDDLのトレースを制御します。

これらのパラメータには、DDLのトレースをDMLのトレースから分離するオプションがあります。詳細は、Oracle GoldenGateリファレンスfor Windows and UNIXを参照してください。