TABLE | MAP

有効な対象

TABLEは、Extractに有効です。Replicatでは、EVENTACTIONSパラメータを指定した場合にのみTABLEを使用できます。MAPは、Replicatと特定の状況のExtractに有効です。詳細は、「Extract用MAP」を参照してください。

摘要

TABLEパラメータおよびMAPパラメータは、Oracle GoldenGateプロセスによって影響を受けるオブジェクトの選択、マッピングおよび操作を制御します。これらのパラメータは次のように機能します。

TABLEおよびMAPは、初期ロード構成と、トランザクション変更のレプリケーションをサポートするように構成されたオンライン・プロセスに対して有効です。

TABLEおよびMAPでは、次のオブジェクトを処理できます。

Extractによる取得の順序を指定するには、SEQUENCEパラメータを使用します。

ノート: Oracle GoldenGateは、Oracleマテリアライズド・ビューの実際のデータ値のレプリケーションをサポートしています。

ワイルドカードの有無にかかわらず、1つ以上のTABLE文またはMAP文をパラメータ・ファイルで使用して、処理するすべてのオブジェクトを指定できます。

次のパラメータを使用して、ワイルドカードを使用したTABLE文またはMAP文からオブジェクトを除外できます。

デフォルト

なし

TABLEの構文

表に対しては、すべてのTABLEオプションを使用できます。表以外のオブジェクトに対しては、TABLEでは取得するオブジェクトの指定のみを行います。

TABLE <source_table>[, TARGET <target_table>]
[, ATTRCHARSET (<charset>)]
[, CHARSET <character_set>]
[, COLCHARSET <character_set>]
[, COLMAP (<column_mapping>)]
[, {COLS | COLSEXCEPT} (<column_list>)]
[, {DEF | TARGETDEF} <template>]
[, EVENTACTIONS <action>]
[, EXITPARAM '<parameter>']
[, {FETCHCOLS | FETCHCOLSEXCEPT} (<column_list>)]
[, {FETCHMODCOLS | FETCHMODCOLSEXCEPT} (<column_list>)]
[, FETCHBEFOREFILTER]
[, FILTER (<filter_clause>)]
[, GETBEFORECOLS (<column_specification>)]
[, KEYCOLS (<columns>)]
[, SQLEXEC (<SQL_specification>)]
[, SQLPREDICATE 'WHERE <where_clause>']
[, TOKENS (<token_definition>)]
[, TRIMSPACES | NOTRIMSPACES]
[, TRIMVARSPACES | NOTRIMVARSPACES]
[, WHERE (<clause>)]
[, <container>.]<schema.table> PARTITIONOBJID <ptn_object_ID> [, <ptn_object_ID>]
;

MAPの構文

MAP <source_table>, TARGET <target_table>
[, MOD_COMPARE_COLS( <tgt_col> = <source> )]
[, COLMAP (<column_mapping>)]
[, COMPARECOLS (<column_specification>)]
[, COORDINATED]
[, {DEF | TARGETDEF} <template>]
[, EXCEPTIONSONLY]
[, EXITPARAM '<parameter>']
[, EVENTACTIONS (<action>)]
[, FILTER (<filter_clause>)]
[, HANDLECOLLISIONS | NOHANDLECOLLISIONS]
[, INSERTALLRECORDS]
[, INSERTAPPEND | NOINSERTAPPEND]
[, KEYCOLS (<columns>)]
[, MAPALLCOLUMNS | NOMAPALLCOLUMNS]
[, MAPEXCEPTION (<exceptions_mapping>)]
[, MAPINVISIBLECOLUMNS | NOMAPINVISIBLECOLUMNS]
[, REPERROR (<error>, <response>)]
[, RESOLVECONFLICT (<conflict_resolution_specification>)]
[, SQLEXEC (<SQL_specification>)]
[, THREAD (<thread_ID>)]
[, THREADRANGE (<thread_range>[, <column_list>])]
[, TRIMSPACES | NOTRIMSPACES]
[, TRIMVARSPACES | NOTRIMVARSPACES]
[, WHERE (<clause>)]
[, <container>.]<schema.table> PARTITIONOBJID <ptn_object_ID> [, <ptn_object_ID>]
;

TABLEおよびMAPのオプション

次に、TABLEパラメータとMAPパラメータで使用できるオプションをまとめた表を示します。すべてのオプションが両方のパラメータに対して有効とはかぎりません。

表11 TABLEおよびMAPの構文コンポーネントの概要

コンポーネント 摘要 有効な対象
MAP MOD_COMPARE_COL( tgt_col = source [,...] ) これはReplicat専用のパラメータです。指定したソース値をターゲット列のビフォア・イメージにキー値として割り当てます。この値はWHERE句で使用されます。 MAP
TABLE <source_table>[, TARGET <target>] Extractに対するTABLE文でソース・オブジェクトを指定し、ターゲット・オブジェクトへのマッピングをオプションで指定します。Extractパラメータ・ファイルで使用します。 TABLE
MAP source_table, TARGET target_table Replicatプロセスに対してソース-ターゲットのオブジェクト・マッピングを指定します。Replicatパラメータ・ファイルで使用します。 MAP
ATTRCHARSET (charset) UDT属性レベルのソース文字セット情報を指定します。 TABLE
COLCHARSET character_set サポートされている文字セットを指定します。 TABLE
COLMAP (column_mapping) 異なるソース列およびターゲット列間でレコードをマップします。 TABLEおよびMAP
{COLS \| COLSEXCEPT} (column_list) 処理する列を選択または除外します。 TABLE
COMPARECOLS (column_specification) 競合の検出および解決に使用する列を指定します。 TABLEおよびMAP
COORDINATED トランザクションをバリア・トランザクションとして処理させます。 MAP
{DEF | TARGETDEF} template ソース定義またはターゲット定義テンプレートを指定します。 TABLEおよびMAP
EXCEPTIONSONLY MAP文が例外MAP文であることを指定します。 MAP
EVENTACTIONS (action) 指定されているフィルタ・ルールを満たすレコードに基づいて、アクションをトリガーします。 TABLEおよびMAP
EXITPARAM 'parameter' リテラル文字列形式でパラメータをユーザー・イグジットに渡します。 TABLEおよびMAP
FETCHBEFOREFILTER フィルタの実行前に、FETCHCOLSまたはFETCHCOLSEXCEPTアクションを実行します。 TABLE
{FETCHCOLS | FETCHCOLSEXCEPT} (column_list) トランザクション・レコードに値が存在しない場合に、ソース・データベースからの列値のフェッチを有効にします。 TABLE
{FETCHMODCOLS | FETCHMODCOLSEXCEPT} (column_list) トランザクション・ログに列が存在する場合でも、データベースから列値をフェッチさせます。 TABLE
FILTER (filter_clause) 数値に基づいてレコードを選択します。FILTERは、WHEREよりも柔軟に使用できます。 TABLEおよびMAP
GETBEFORECOLS (column_specification) 列のビフォア・イメージを取得させ、トレイルに書き込ませます。 TABLE
HANDLECOLLISIONS \| NOHANDLECOLLISIONS 初期ロード・プロセスでターゲット表に適用された変更の結果と、変更同期グループによって適用された変更を調整します。 MAP
INSERTALLRECORDS すべての行変更を挿入として適用します。 MAP
INSERTAPPEND \| NOINSERTAPPEND ReplicatがINSERT文でOracle APPENDヒントを使用するかどうかを制御します。 MAP
KEYCOLS (columns) 行を一意に特定する列を指定します。 TABLEおよびMAP
MAPALLCOLUMNS | NOMAPALLCOLUMNS Replicatがキー以外の列を取得するかどうかを制御します。 NA
MAPEXCEPTION (exceptions_mapping) MAP文にワイルドカード指定された表を処理する例外が含まれていることを指定します。 MAP
MAPINVISIBLECOLUMNS | NOMAPINVISIBLECOLUMNS Replicatがデフォルトの列マッピングでOracleターゲット表に非表示列を含めるかどうかを制御します。明示的な列マッピングを使用しているOracleターゲット表では非表示列が常にマップされるので、このオプションは不要です。 MAP
REPERROR (error, response) MAP文の実行時にReplicatがエラーに対応する方法を制御します。 MAP
RESOLVECONFLICT (conflict_resolution_specification) 競合解決のルールを指定します。 MAP
SQLEXEC (SQL_specification) ストアド・プロシージャおよび問合せを実行します。 TABLEおよびMAP
SQLPREDICATE 'WHERE where_clause' 初期ロードのためにWHERE句を使用して行を選択します。 TABLE
THREAD (thread_ID) 調整モードのReplicatに有効です。MAP文が指定のReplicatスレッドで処理されることを指定します。 MAP
THREADRANGE (thread_range, column_list) 調整モードのReplicatに有効です。MAP文が指定範囲のReplicatスレッドで処理されることを指定します。 MAP
TOKENS (token_definition) ユーザー・トークンを定義します。 TABLE
TRIMSPACES \| NOTRIMSPACES CHAR列をVARCHAR列にマッピングする際に、末尾の空白を切り捨てるかどうかを制御します。 TABLEおよびMAP
TRIMVARSPACES \| NOTRIMVARSPACES VARCHAR列をCHARまたはVARCHAR列にマッピングする際に、末尾の空白を切り捨てるかどうかを制御します。 TABLEおよびMAP
WHERE (clause) 条件演算子に基づいてレコードを選択します。 TABLEおよびMAP
; (セミコロン) TABLE文またはMAP文を終了します(必須)。 TABLEおよびMAP
PARTITIONOBJID 統合Extractに使用可能。このオプションは、パーティション化表のためにキャプチャされるパーティションのオブジェクトIDを指定するために使用されます。 TABLEおよびMAP

MAP MOD_COMPARE_COL( tgt_col = source [、…] )

tgt_colにはターゲット表の列名を指定し、正しく作るためにはキー列であることが必要。sourceには、ソース表の列、定数値(数値または文字列)、列マッピング・ファンクションまたはSQLEXEC結果を指定できます。たとえば、source col1は、イメージ値が1になる前にtarget col 1. source col1にマップされます。これは、セキュリティのためにDBAによってマスクされるため、ダミー値です。Replicatは、target col1の実際のビフォア画像値をSQLEXECで問い合せることができます。MOD_COMPARE_COLS()を使用すると、Replicatはダミーのsource col1値をSQLEXEC結果で置き換え、これによってUPDATEまたはDELETE操作が正常に機能するようになります。

TABLE <source_table>[, TARGET <target>]

TABLEは、Extractパラメータ・ファイルで有効です。

TABLEでは、Extractでデータを取得するソース・オブジェクトを指定します。<schema.table>や<catalog.schema.table>など、2つの部分からなる完全修飾オブジェクト名または3つの部分からなる名前を指定します。ワイルドカードを使用すると、1つのTABLE文で複数のオブジェクトを指定できます。オブジェクト名やワイルドを正しく指定するには、Oracle GoldenGate Microservicesドキュメントのデータベース・オブジェクト名でのワイルド・カードの使用およびコマンド引数におけるワイルド・カードの使用を参照してください。

TARGETオプションは、Extractが変換を実行するためにターゲット定義ファイル(TARGETDEFSパラメータで指定)を参照する必要がある場合またはCOLMAPオプションを使用して列をマップする場合にのみ使用します。それ以外の場合は、TABLEパラメータから省略できます。COLMAPによる列マッピングおよび変換処理は通常、ソース・システムでのレプリケーション・アクティビティの影響を最小限に抑えるためにターゲット・システムで実行しますが、必要に応じてソース・システムで実行できます。たとえば、列マッピングおよび変換は、複数のソースに対して1つのターゲットがある構成では、ソース・システムで実行できます。このような場合、特に新しい定義ファイルの生成が必要になる頻繁なアプリケーション変更が発生するときは、ソース・データベースごとに1つの定義ファイルを管理するよりも、1つのターゲット定義ファイルを管理する方が簡単です。

TABLEパラメータでTARGETを使用することによって、定義ファイルまたは列マップに指定されているレコードの構造を反映して、ソース構造ではなくターゲット構造に基づいて抽出データのメタデータを特定します。ターゲットのOracleコンテナ・データベースの表をTARGETで指定する場合は、3つの部分からなる名前を使用しないでください。Replicat can only connect to one container or catalog, so it is assumed that the container or catalog portion of the name is the same as the one that Replicat logs into (as specified with USERIDALIAS, depending on the database).

指定したソース・データの処理に他のTABLE構文オプションが不要な場合は、単純なTABLE文を使用できます(文は必ずセミコロンで終わります)。

 TABLE sales.customers;

次に、複数の表を指定する場合のワイルドカードの使用例を示します。

 TABLE sales.*;

先行するTABLE文により、指定したオブジェクトについて、Extractはすべてのサポートされる列データを取得し、フィルタリング、変換、またはその他の操作を実行せずに、トレイルに書き込みます。

MAP <source_table>, TARGET <target_table>

MAP文は、Replicatパラメータ・ファイルで有効です。Extractパラメータ・ファイルでは、Oracle GoldenGateが表に保存するトランザクションの名前を変更するためにMAPを使用することもできます。参照

MAPではソース・オブジェクトを指定し、TARGETではReplicatがレプリケート済のソース・データを適用するターゲット・オブジェクトを指定します。MAP句とTARGET句を合せて、マッピングを構成します。

次に、複数の表を指定する場合のワイルドカードの使用例を示します。TARGET句では、ワイルドカードの前にtab接頭辞を挿入しないことに注意してください。ワイルドカードはsales.tabtab1、sales.tabtab2というように解決されるため、接頭辞の指定は無効になります。

 MAP sales.tab*, TARGET sales.*;

オブジェクトについてフィルタリング、マッピングまたはその他の処理が不要な場合は、次のような単純なMAP文を使用できます(各文は必ずセミコロンで終わります)。

MAP sales.customers, TARGET sales.customers;
MAP fin.*, TARGET fin.*;

ATTRCHARSET <(charset)>

ATTRCHARSETは、TABLEに有効です。

ATTRCHARSET句では、UDT属性レベルのソース文字セット情報を指定します。証跡ファイル内に定義された文字セット、あるいはSOURCECHARSET、CHARSETまたはCOLCHARSETパラメータで指定された文字セットよりも優先されます。

有効な値は文字セット名および有効なUDT属性名です。ワイルドカード属性名はサポートされます。たとえば:

TABLE SCHEMA.T*,
  ATTRCHARSET(WE8DEC, col*.attr1, col1.attr*.attr3);

COLCHARSET <character_set>

COLCHARSETは、TABLEに有効です。

COLCHARSET句では、サポートされている任意の文字セットを指定します。詳細は、「COLCHARSET」を参照してください。

COLMAP <(column_mapping)>

COLMAPは、TABLEおよびMAPに有効です。

COLMAPでは、次のことを行います。

COLMAPでは、ソース列からターゲット列に対して列データを選択、変換および移動するための指示を提供します。ノート: 後続のMAP文のすべての表に適用される列マッピングのグローバル・ルールを作成するには、COLMATCHパラメータを使用します。

列マッピングの構成のその他の情報

COLMAPを使用するには、ソースとターゲットの列構造が同一か異なるか、グローバル列マッピング・パラメータが十分かどうかなど、関連する構成のガイドラインを検討する必要があります。

構文

COLMAP (
[USEDEFAULTS, ]
<target_column> = <source_expression> [BINARYINPUT]
[, ...]
)

USEDEFAULTS

明示的な列マッピングで指定されていない場合に、同一の名前を持つソースおよびターゲット列を自動的にマップします。データ型は必要に応じて、ローカル・データ定義ファイルに基づいて自動的に変換されます。USEDEFAULTSにより、これらの列の名前が同じ場合は明示的な列マッピングの必要性がなくなるため、データのフィルタリングや変換は不要です。

COLMAP句の明示的な列マッピングの前にUSEDEFAULTSを指定します。

<target_column = source_expression>

明示的なソース- ターゲット列マッピングを定義します。

<target_column>

ターゲット列の名前を指定します。列名でサポートされている文字については、サポートされている文字セットを参照してください。

<source_expression>

次のいずれかを指定できます。

BINARYINPUT

BINARYINPUTは、ターゲット列がRAWまたはBLOBなどのバイナリ・データ型として定義されているが、ソース入力のデータの中にバイナリ・ゼロが含まれている場合に使用します。ソース入力はバイナリ入力として処理され、データ値の置換は抑止されます。

例1

MAP ggs.tran, TARGET ggs.tran2, COLMAP (loc2 = loc, type2 = type);

例2

TABLE ggs.tran, COLMAP (SECTION = @STRCAT('\u00a7', SECTION ));

{COLS | COLSEXCEPT} (<column_list>)

COLSおよびCOLSEXCEPTは、TABLEに有効です。

COLSおよびCOLSEXCEPTでは、取得するデータの列を制御します。

次に、COLSを使用するための条件を示します。

主キーや一意キーがない場合またはTABLE文内にKEYCOLS句がない場合、Oracle GoldenGateは表のすべての列を使用するため、COLSの指定は不要になります。

ノート: データ・ポンプExtractグループにパススルー・モードで処理されている表には、このオプションを使用しないでください。

構文

{COLS | COLSEXCEPT} (<column> [, ...])

<column>

列の名前。複数の<columns>を指定するには、カンマ区切りリストを作成します。たとえば:

COLS (name, city, state, phone)

ノート:データベースが更新操作で変更された列の値しか記録しない場合、COLSで取得するために指定した列が使用できないことがあります。このような列値を使用するには、TABLE文のFETCHCOLSオプションを使用するか、列のサプリメンタル・ロギングを有効にします。

例

この例では、COLS <clause>句は<columns> 1と3のみを取得しますが、COLSEXCEPT <clause>句は<columns> 1と3を除くすべての<columns>を取得します。

TABLE hq.acct, COLS (col1, col3);
TABLE hq.sales, COLSEXCEPT (col1, col3);

COMPARECOLS (<column_specification>)

COMPARECOLSは、MAPに有効です。

COMPARECOLSでは、マルチマスター構成でMAPのRESOLVECONFLICTオプションを使用して構成する場合、更新または削除の競合を検出および解決するためにReplicatが使用する列を指定します。競合は、トレイル内のレコードのビフォワ・イメージと、ターゲット表の正しいデータとの不一致です。

COMPARECOLSを使用するには、ExtractのTABLE文のGETBEFORECOLSパラメータを使用して、証跡レコードでビフォア・イメージを使用できる必要があります。指定した列は、ターゲット・データベースに存在し、Replicat構成の一部でもある必要があります(COLMAP句の有無にかかわらずTARGET指定を満たします)。

スカラー・データ型のみ、比較列としてCOMPARECOLSによってサポートされます。スカラー・データ型はWHERE句で使用でき、単一のアトミック値を持ち、内部コンポーネントがありません。Oracle GoldenGateでサポートされているスカラー・データ型には、次のものがありますが、LOBは含まれません。

非スカラ・データ型の例には、空間データ、ユーザー定義のデータ型、ラージ・オブジェクト(LOB)、XML、参照データ型、RAWなどがあります。CDRが考慮されている行には、競合が非スカラー・データ自体に存在しないかぎり、非スカラー・データを含めることができます。

競合解決ルーチンを指定するには、MAPのRESOLVECONFLICTオプションを使用します。COMPARECOLSおよびRESOLVECONFLICTは、MAP文に任意の順序で指定できます。

CDR機能の構成に関するその他の情報

競合検出および解消の構成の詳細は、自動競合検出および解消または手動競合検出および解消を参照してください。

構文

COMPARECOLS(
{ON UPDATE | ON DELETE}
{ALL | KEY | KEYINCLUDING (<col>[,...]) | ALLEXCLUDING (<col>[,...]) }
[,...]
)
{ON UPDATE ON DELETE}

指定した列のビフォア・イメージを、更新または削除のために比較するかどうかを指定します。ON UPDATEのみ、またはON DELETEのみ、または両方を使用できます。両方使用する場合、同じCOMPARECOLS句の中に指定します。両方使用する方法は、例を参照してください。

{ALL | KEY | KEYINCLUDING (<col>[,...]) | ALLEXCLUDING (<col>[,...])}

ビフォア・イメージを取得する列を指定します。

ALL

ターゲット表内のすべての列を使用して比較します。対応するビフォア・イメージがトレイルで使用できない場合、エラーが生成されます。ALLを使用すると、Replicatに最も高い処理負荷がかかりますが、すべての列を使用して競合検出の比較を実行し、正確性を最大にすることができます。

KEY

主キー列のみを比較します。このオプションは最速ですが、キーは一致していても非キー列は異なる可能性があるため、最も正確な競合検出は不可能です。

KEYINCLUDING

主キー列および指定した列を比較します。これは、速度と検出の正確性との間での妥当な方法です。

ALLEXCLUDING

指定した列を除くすべての列を比較します。多数の列が含まれる表では、KEYINCLUDINGよりもALLEXCLUDINGのほうが効率的な場合があります。キー列は除外しないでください。

例1

次の例では、キー列に加えて、name、address、およびsalary各列を競合のために比較します。

MAP src, TARGET tgt
COMPARECOLS (
ON UPDATE KEYINCLUDING (name, address, salary),
ON DELETE KEYINCLUDING (name, address, salary));

例2

次の例では、comment列は無視して、他のすべての列を競合のために比較します。

MAP src, TARGET tgt
COMPARECOLS (ON UPDATE ALLEXCLUDING (comment))

COORDINATED

COORDINATEDは、MAPに有効です。このオプションは、Replicatが調整モードである場合に有効です。

COORDINATEDオプションでは、同じMAP文のオブジェクトで作成されたトランザクションをバリア・トランザクションとして処理させます。これにより、すべてのMAP文ですべてのスレッドが同じトレイルの場所に同期します。同期される位置は、COORDINATEDキーワードを含むMAPを満たすレコードを含むトランザクションの先頭です。トランザクションは、その後単一のスレッドによってアトミックスに適用されます。このスレッドは、現在実行されているスレッドの中でスレッドIDが最も大きいスレッドであるか、USEDEDICATEDCOORDINATIONTHREADがパラメータ・ファイルで指定されている場合、IDが0 (ゼロ)の専用スレッドのいずれかです。

COORDINATEDと組み合せて指定されたTHREAD句およびTHREADRANGE句は、指定したスレッドによってレコードが適用されないため、無視されます。COORDINATEDキーワードにより、一時的に並列処理が中断され、強制的に調整されたトランザクションが適用される前にターゲット表は一貫性のある状態になります。この時点以降、並列実行が再開されます。

デフォルトでは、Replicatは、主キーが更新されるトランザクション、DDLを実行するトランザクションおよび特定のEVENTACTIONSアクションを調整します。COORDINATEDは、明示的な調整を指定します。

詳細は、「調整Replicatについて」を参照してください。

構文

COORDINATED

例

次に、COORDINATEDオプションの使用例を示します。この例のビジネス・ルールでは、MAP文に指定されたオブジェクトに対するSQLEXEC操作を含むトランザクションをReplicatが実行する前に、ターゲット表が一貫性のある状態になる必要があります。この場合は、並列処理を順次SQL処理に一時的に変更する必要があります。

次のMAP文の場合、スレッド1によるt1への挿入が実行される前に、別のスレッドがt2にcol_valの値が100のレコードを挿入すると、SQLEXECはその行を削除します。他のスレッドが値100のレコードを依然として処理している場合、SQLEXECは失敗します。そのため、このMAP文の結果は予測できません。

MAP u1.t1, TARGET u2.t1 SQLEXEC (ID test2, QUERY ' delete from u2.t2 where col_val =100 ', NOPARAMS)), THREAD(1);

逆に、COORDINATEDを使用すると、col_val=100レコードを処理するスレッドを含め、すべてのスレッドが共通ポイントで同期するため、結果は明瞭になります。

MAP u1.t1, TARGET u2.t1 SQLEXEC (ID test2, QUERY ' delete from u2.t2 where col_val =100 ', NOPARAMS)), THREAD(1), COORDINATED;

{DEF| TARGETDEF}<template>

DEFおよびTARGETDEFは、TABLEおよびMAPに有効です。

DEFおよびTARGETDEFでは、DEFGENユーティリティで作成された定義テンプレートの名前を指定します。

テンプレートは、特定の表の定義に基づいています。テンプレートにより、元の表と同じ定義を持つ新しい表は、DEFGENを実行したり、Oracle GoldenGateプロセスを停止して起動する必要もなく、Oracle GoldenGate構成に追加できます。テンプレートの定義は、定義の参照に使用します。

構文

{DEF | TARGETDEF} <template>

<template>

DEFGENユーティリティによって生成される次の定義テンプレートのいずれかの名前。

テンプレートに含まれる定義は、同じTABLEまたはMAP文に指定されている表の定義と同一である必要があります。

データベースに保存されるのと同じ方法で名前が指定される場合、テンプレート名の大/小文字は区別されます。このTABLEまたはMAP文のDEFまたはTARGETDEF句と、テンプレートを作成したDEFGENパラメータ・ファイルの両方で、テンプレート名が同じ方法で指定されていることを確認してください。

例1

次に、大/小文字を区別するテンプレート名を指定する例を示します。

MAP acct.cust*, TARGET acct.cust*, DEF custdef;

例2

次に、大/小文字を区別するのに引用符が必要になるデータベースの場合に、大/小文字を区別するテンプレート名を指定する例を示します。

  TABLE acct.cust*, DEF "CustDef";

例3

次に、DEFとTARGETDEFの両方を使用する例を示します。

  MAP acct.cust*, TARGET acc.cust*, DEF custdef, TARGETDEF tcustdef;

例外のみ

EXCEPTIONSONLYは、MAPに有効です。

EXCEPTIONSONLYは、エラーを処理するための例外MAP文で使用します。例外MAP文は、エラーが発生する可能性があるMAP文に続ける必要があります。例外MAP文は、先行する標準のMAP文で処理された最後のレコードでエラーが発生した場合にのみ実行されます。

EXCEPTIONSONLYを使用するには、標準のMAP文内、またはパラメータ・ファイルのルートで、REPERROR文とEXCEPTIONオプションを指定します。詳細は、REPERRORを参照してください。ノート: Oracle GoldenGateの競合の検出および解決(CDR)機能を使用する場合、REPERRORとEXCEPTIONは必要ありません。CDRでは、エラーを引き起こすすべての操作を、例外MAP文に自動的に送信します。

例外MAP文では、標準のMAP文と同じソース表を指定する必要がありますが、例外MAP文のターゲット表は例外表である必要があります。

ノート:ワイルドカードを使用したオブジェクト名をサポートするには、「MAPEXCEPTION (exceptions_mapping)」を参照してください。

構文

EXCEPTIONSONLY

EVENTACTIONS (<action>)

EVENTACTIONSは、TABLEおよびMAPに有効です。オプションには、どちらかのパラメータにしか適用されないものがあり、説明で示します。

EVENTACTIONSでは、特定のフィルタ・ルールに適する、トレイル内のレコード(イベント・レコードと呼ばれる)に基づいて、プロセスに定義済のアクションを実行させます。このシステム(イベント・マーカー・システム(またはイベント・マーカー・インフラストラクチャ)と呼ばれる)を使用すると、データベース・イベントに基づいて処理をカスタマイズできます。たとえば、変換の実行または統計のレポートを行うために、プロセスを一時停止できます。イベント・マーカー機能は、データ変更のレプリケーションではサポートされていますが、初期ロードではサポートされていません。

ターゲット表へのデータ適用を必要としないアクションをトリガーするには、Replicat TABLEパラメータとEVENTACTIONSをサポートしているフィルタリング・オプションを使用できます。詳細は、「Replicat用TABLE」を参照してください。

目的の達成のために、複数のアクションを組み合せる必要がある場合があります。複数のアクションを組み合せると、まずEVENTACTIONS文全体が解析された後、指定したオプションが優先度順に実行されます。次に、優先度の順序を示します。Process the recordの前にリストされたアクションは、レコードが証跡に書き込まれる前またはターゲットに適用される前に発生します(プロセスによって異なります)。Process the recordの後にリストされたアクションは、レコードの処理後に実行されます。

標準の方法でイベント・レコード自体の処理を防ぐには、IGNOREまたはDISCARDオプションを使用します。IGNOREおよびDISCARDは、レコードより先に評価されるため、これらを使用してイベント・レコードの処理を防ぐことができます。これらのオプションが指定されていない場合、ExtractのEVENTACTIONSはトレイルにレコードを書き込み、ReplicatのEVENTACTIONSはその操作をターゲット・データベースに適用します。

1つのトランザクションに、イベント・アクションをトリガーするレコードが複数含まれている可能性があることに注意してください。そのようなケースでは、指定されている特定のEVENTACTIONSが複数回実行されることがあります。たとえば、2回の連続するROLLOVERアクションをトリガーする2つの対象レコードを検出すると、Extractはトレイルを2回ロールオーバーするため、2つのファイルのうち1つはトランザクション・データがないままです。

また、GETUPDATEBEFORESパラメータが有効な場合、UPDATE操作に対して2つのレコード、つまりビフォア・イメージが含まれるレコードとアフター・イメージが含まれるレコードが生成されることにも注意してください。操作によってイベント・レコードとして特定されると、これらのレコードごとにイベント・アクションがトリガーされます。FILTER句でGGHEADER列変換ファンクションのBEFOREAFTERINDICATORトークンをフィルタとして使用すると、(両方ではなく)BEFOREレコードまたはAFTERレコードのいずれかで、イベント・アクションが1回のみトリガーされるようにレコードを特定できます。

次に、BEFOREインジケータでのフィルタ例を示します。EVENTACTIONは、ECHOシェル・コマンドを発行して文字列'Triggered on BEFORE'をBEFOREレコードに出力します。

TABLE qasource.test, &
FILTER(@STRFIND('BEFORE', @GETENV('GGHEADER' , 'BEFOREAFTERINDICATOR')) > 0), &
EVENTACTIONS ( shell ('echo --== Triggered on BEFORE ==-- '), LOG);

次に、イベント<action>の結果を示します。

013-03-06 17:59:31  INFO    OGG-05301  Shell command output: '--== Triggered
on AFTER ==--'

次に、AFTERインジケータの場合で同じ事象の例を示します。

 TABLE qasource.test, &
 FILTER(@STRFIND('AFTER', @GETENV('GGHEADER' , 'BEFOREAFTERINDICATOR')) > 0), &
 EVENTACTIONS ( shell ('echo --== Triggered on AFTER ==-- '), LOG);

構文

EVENTACTIONS (
[STOP | SUSPEND | ABORT | FORCESTOP]
[IGNORE [RECORD | TRANSACTION [INCLUDEVENT]]
[DISCARD]
[LOG [INFO | WARNING]]
[REPORT]
[ROLLOVER]
[SHELL '<command>' | SHELL ('<command>', VAR <variable> = {<column_name> | <expression>}
  [, ...]) ]
[TRACE[2] <file> [TRANSACTION] [DDL[INCLUDE] | DDLONLY] [PURGE | APPEND]]
[CHECKPOINT [BEFORE | AFTER | BOTH]]
[, ...]
)

STOP

Extract用TABLEおよびReplicat用MAPで有効です。

指定のイベント・レコードが検出されたときにプロセスを正常に停止させます。プロセスは、イベント・トランザクション内の他の操作が完了するまで待機してから停止します。Replicatによってグループ化されたトランザクション、またはバッチ・トランザクションの場合、プロセスは、現在のトランザクション・グループが適用されてから正常に停止します。イベント・レコードがトランザクションの終了点であることも示している場合、プロセスはイベント・レコードの次のレコードで再開します。

プロセスは、トランザクションがまだオープンしているために即座に停止できない場合、メッセージを記録します。ただし、長時間オープンしているトランザクションの中にイベント・レコードが検出された場合、そのトランザクションのコミットされていない状態を通知する警告メッセージは出ません。したがって、STOPイベントが発生しても、プロセスが長時間実行中になる場合があります。

STOPは、ABORTおよびFORCESTOPを除く、他のEVENTACTIONSオプションと組み合せることができます。

SUSPEND

Extract用TABLEおよびReplicat用MAPで有効です。

現在の実行のアクティブ・コンテキストを保持し、管理クライアントで発行されるSENDコマンドに応答できるように、プロセスを一時停止します。プロセスが一時停止すると、INFOコマンドによってRUNNINGと示され、RBAフィールドに最後のチェックポイントの位置が表示されます。

処理を再開するには、SENDコマンドをRESUMEオプションとともに発行します。

CHECKPOINT BEFOREオプションをSUSPENDとあわせて使用するには、イベント・レコードを、SUSPENDが発生するトランザクションの開始にする必要があります。これにより、一時停止状態の間にプロセスが中断した場合、SUSPENDアクションのイベント・レコードは、再起動時に再処理する最初のレコードになります。CHECKPOINT BEROREおよびSUSPENDの両方を指定しましたが、イベント・レコードがトランザクションの開始ではない場合、SUSPENDが発生する前にプロセスは異常終了します。

CHECKPOINT AFTERオプションをSUSPENDと合せて使用するには、チェックポイントが発生する前にRESUMEコマンドを発行する必要があり、イベント・レコードをCOMMITレコードにする必要があります。SUSPEND状態の間プロセスが終了した場合、プロセスは再起動時に最後にチェックポイントが設定された位置からトランザクションを再処理します。

SUSPENDは、ABORTと組み合せることはできませんが、他のすべてのオプションと組み合せることができます。

ABORT

Extract用TABLEおよびReplicat用MAPで有効です。

オープンしているトランザクションの有無にかかわらず、指定のイベント・レコードが検出されたときに即座にプロセスを終了させます。イベント・レコードは処理されません。ログに致命的なエラーが書き込まれ、DISCARDも指定している場合には破棄ファイルにイベント・レコードが書き込まれます。このプロセスでは、起動時にリカバリが行われます。

ABORTは、CHECKPOINT BEFORE、DISCARD、SHELLおよびREPORTとのみ組み合せることができます。

FORCESTOP

Extract用TABLEおよびReplicat用MAPで有効です。

指定のイベントが検出され、イベント・レコードがトランザクションの最後の操作またはトランザクションの唯一のレコードの場合にのみ、プロセスを正常に停止させます。レコードは正常に書き込まれます。

長時間オープンしているトランザクション内でイベント・レコードが検出された場合、プロセスはログに警告メッセージを記録し、ABORTと同様に即座に終了します。このケースでは、起動時にリカバリが必要です。長時間に及ぶトランザクションの途中でFORCESTOPアクションがトリガーされると、プロセスは警告メッセージを出さずに終了します。

FORCESTOPは、ABORT、STOP、CHECKPOINT AFTERおよびCHECKPOINT BOTHを除く、他のEVENTACTIONSオプションと組み合せることができます。ROLLOVERとともに使用する場合、ロールオーバーはプロセスが正常に停止したときにのみ行われます。

IGNORE [RECORD TRANSACTION [INCLUDEVENT]]

Extract用TABLEおよびReplicat用MAPで有効です。

選択したアクションに応じて、トランザクションの一部またはすべてを無視します。

IGNOREは、ABORTおよびDISCARDを除く、他のすべてのEVENTACTIONSオプションと組み合せることができます。

IGNOREアクションは、修飾、フィルタリング、マッピングおよびユーザー・イグジットのすべての操作が処理された後に処理されます。レコードまたはトランザクションは最後の出力フェーズで無視され、レコードまたはトランザクションが出力ターゲット(Extractの場合のトレイルまたはReplicatの場合のデータベース)に書き込まれることが阻止されます。したがって、特定の式(たとえば、SQLEXEC操作を含む式は)では、SQLEXECはIGNOREが処理される前に実行されます。つまり、レコードがトレイルまたはターゲット・データベースに書き込まれない一方で、修飾、フィルタリング、マッピングおよびユーザー・イグジットによってレコードを処理するすべての効果が発生します。

このアクションは、DDLレコードには無効です。DDL操作は自律型であるため、レコードを無視することはトランザクション全体を無視することに相当します。

DISCARD

Extract用TABLEおよびReplicat用MAPで有効です。

プロセスに次のことを実行させます。

プロセスは、トレイルの次のレコードから処理を再開します。

DISCARDは、IGNOREを除く、他のすべてのEVENTACTIONSオプションと組み合せることができます。

LOG [INFO WARNING]

Extract用TABLEおよびReplicat用MAPで有効です。

指定のイベント・レコードが検出されたときに、プロセスにこのイベントを記録させます。レポート・ファイル、Oracle GoldenGateエラー・ログ、およびシステム・イベント・ログにメッセージが書き込まれます。

次のオプションを使用して、メッセージの重大度を指定します。

LOGは、ABORTを除く、他のすべてのEVENTACTIONSオプションと組み合せることができます。ABORTを使用する場合は、プロセスが終了する前にABORTによって致命的なエラーが記録されるため、LOGは不要です。

REPORT

Extract用TABLEおよびReplicat用MAPで有効です。

指定のイベント・レコードが検出されたときにプロセスにレポート・ファイルを生成させます。GGSCIでSENDコマンドとREPORTオプションを使用する場合と同じ結果になります。

(DISCARD、IGNOREまたはABORTを使用している場合を除き) REPORTメッセージは、イベント・レコードが処理された後に発生するので、レポート・データにはイベント・レコードが含まれます。

REPORTは、他のすべてのEVENTACTIONSオプションと組み合せることができます。

ROLLOVER

Extract用TABLEで有効です。

指定のイベント・レコードが検出されたときに、Extractにトレイルの新しいファイルにロールオーバーさせます。ROLLOVERアクションは、Extractがトレイル・ファイルにイベント・レコードを書き込む前に発生するので、DISCARD、IGNOREまたはABORTも使用されている場合を除き、イベント・レコードが新しいファイルの最初のレコードになります。

ROLLOVERは、ABORTを除く、他のすべてのEVENTACTIONSオプションと組み合せることができます。ROLLOVERを使用するとプロセスがチェックポイントの書込みを行わず、ROLLOVERはABORTよりも先に発生するため、ROLLOVERはABORTと組み合せることができません。

ROLLOVERのチェックポイントがない場合にABORTを使用すると、Extractは再起動時に前回のトレイル・ファイル内の前回のチェックポイントから再開します。そのため、実質上ロールオーバーがキャンセルされます。

SHELL '<command>'

Extract用TABLEおよびReplicat用MAPで有効です。

イベント・レコードが検出されたときに、指定したシェル・コマンドをプロセスに実行させます。SHELL '<command'>は、基本的なシェル・コマンドを実行します。コマンド文字列は、リテラル値で取得され、その方法でシステムに送信されます。コマンドでは、大/小文字が区別されます。コマンド文字列は、次のような一重引用符で囲みます。

 EVENTACTIONS (SHELL 'echo hello world! > output.txt')

シェル・コマンドが成功した場合、プロセスはレポート・ファイルおよびイベント・ログに情報メッセージを書き込みます。コマンドの成功は、UNIXシェル言語に従って、コマンドの終了ステータスで判断します。その言語では、0が成功を表します。

システム・コールが成功しなかった場合、プロセスは致命的なエラーとともに異常終了します。UNIXシェル言語では、0以外は失敗を表します。エラー・メッセージは、SHELLコマンド自体の実行にのみ関連し、従属するコマンドの終了ステータスには関連しないことに注意してください。たとえば、SHELLはスクリプトを正常に実行できますが、そのスクリプト内のコマンドは失敗することがあります。

SHELLは、他のすべてのEVENTACTIONSオプションと組み合せることができます。

SHELL ('<command>', VAR <variable> = {<column_name> | <expression>} [, ...])

Extract用TABLEおよびReplicat用MAPで有効です。

イベント・レコードが検出されたときに、指定したシェル・コマンドをプロセスで実行させ、パラメータの受渡しをサポートします。コマンドおよびパラメータは、大/小文字が区別されます。

SHELLを引数とともに使用する場合、<command>および引数の文字列全体をカッコで囲む必要があります。たとえば、次のようになります。

 EVENTACTIONS (SHELL
 ('Current timestamp: $1  SQLEXEC result is $2 ',VAR $1 = @GETENV('JULIANTIMESTAMP'),
 VAR $2 = mytest.description));

入力内容は次のようになります。

<command>

システムにリテラルに渡されるコマンドです。

VAR

パラメータ入力を開始する必須のキーワードです。

<variable>

ランタイム変数の値に置き換えられる、プレースホルダ変数のユーザー定義名です。コマンドで使用されない余分な変数は無視されます。VAR変数名に一致するSHELLコマンド内のリテラルは、置換済のVARの値によって置き換えられることに注意してください。これは、予期しない結果になる可能性があるため、本番環境に移行する前にコードのテストを実行してください。

<column_name>

列値の前または後(現在)のイメージになります。

<expression>

列データやDDLの処理の有無に応じて、次のようになります。

<TRACE[2]file> [TRANSACTION] [DDL[INCLUDE] | DDLONLY] [PURGE | APPEND]

Extract用TABLEおよびReplicat用MAPで有効です。

指定のイベント・レコードが検出されたときに、トレース情報をトレース・ファイルに書き込ませます。TRACEは、ステップバイステップの処理情報を提供します。TRACE2では、プロセスが最も時間を費やすコード・セグメントを特定します。

デフォルト(オプションなし)では、トランザクション境界を認識しない標準的なDMLトレースは、プロセスが終了するまで有効になります。

TRACEは、ABORTを除く、他のすべてのEVENTACTIONSオプションと組み合せることができます。

指定したトレース・ファイルへのトレースを無効にするには、GGSCIのSENDプロセス・コマンドとTRACE OFF <file_name>オプションを発行します。

CHECKPOINT [BEFORE AFTER BOTH]

Extract用TABLEおよびReplicat用MAPで有効です。

指定のイベント・レコードが検出されたときに、プロセスにチェックポイントを書き込ませます。チェックポイント・アクションは、TABLEまたはMAP文に定義されている処理の前後のコンテキストを提供します。このコンテキストは開始点と終了点を持つため、SQLEXECおよびユーザー・イグジットで実行されるファンクションをマッピングするための同期点を提供します。

BEFORE

Extractプロセス用のBEFOREでは、Extractがトレイルにイベント・レコードを書き込む前にチェックポイントを書き込みます。Replicatプロセス用のBEFOREでは、レコードに含まれているSQL操作をReplicatがターゲットに適用する前にチェックポイントを書き込みます。

BEFOREを使用する場合は、イベント・レコードをトランザクションの最初のレコードにする必要があります。イベント・レコードが最初のレコードでない場合、プロセスは異常終了します。BEFOREを使用することで、イベント・レコードから始まるトランザクション以前のすべてのトランザクションを確実にコミットできます。

DDLレコードにEVENTACTIONSを使用する場合、各DDLレコードは自律型であるため、DDLレコードはトランザクションの開始であることが保証されます。そのため、CHECKPOINT BEFOREイベント・アクションはDDLレコードに対して暗黙的です。

CHECKPOINT BEFOREは、すべてのEVENTACTIONSオプションと組み合せることができます。

AFTER

Extract用のAFTERでは、Extractがトレイルにイベント・レコードを書き込んだ後にチェックポイントを書き込みます。Replicat用のAFTERでは、レコードに含まれているSQL操作をReplicatがターゲットに適用した後にチェックポイントを書き込みます。

AFTERは、チェックポイント・リクエストに注意としてフラグを立て、プロセスが次の可能な機会にのみチェックポイントを発行することを示します。たとえば、イベント・レコードがマルチレコード・トランザクションの1つである場合、チェックポイントは、Oracle GoldenGateデータ整合性モデルに従って、次のトランザクションの境界で発生します。

When using EVENTACTIONS for a DDL record, note that since each DDL record is autonomous, the DDL record is guaranteed to be the end (boundary) of a transaction; therefore the CHECKPOINT AFTER event action is implied for a DDL record.

CHECKPOINT AFTERは、ABORTを除く、すべてのEVENTACTIONSオプションと組み合せることができます。

BOTH

BOTHは、BEFOREおよびAFTERの組合せです。ExtractまたはReplicatプロセスは、イベント・レコードの処理前および処理後にチェックポイントを書き込みます。

CHECKPOINT BOTHは、ABORTを除く、すべてのEVENTACTIONSオプションと組み合せることができます。

CHECKPOINTは、CPに短縮できます。

例1

次に、特定のレコードを無視するようにプロセスを構成する方法の例を示します。Extractは、name = abcを持つトレイル・レコードを処理するときに、このレコードを無視します。

TABLE fin.cust, &
WHERE (name = 'abc'), &
EVENTACTIONS (ignore);

例2

EVENTACTIONSオプションの互換性および優先度ルールでは、DISCARDはABORTよりも優先されるため、この例では、イベント・レコードはプロセスが異常終了する前に破棄ファイルに書き込まれます。

MAP fin.cust, TARGET fin.cust2, &
WHERE (name = 'abc'), &
EVENTACTIONS (DISCARD, ABORT);

例3

次の例では、SHELLアクションを実行します。SQLEXEC問合せの結果を取得し、現在のタイムスタンプと組み合せます。

TABLE src.tab &
SQLEXEC (id mytest, query 'select description from lookup &
where pop = :mycol2', params (mycol2 = col2) ), &
EVENTACTIONS (SHELL ('Current timestamp: $1  SQLEXEC result is $2 ', &
VAR $1 = @GETENV('JULIANTIMESTAMP'), VAR $2 = mytest.description));

この例の結果として生じるシェル<command>は、次のようになります。

'Current timestamp: 212156002704718000  SQLEXEC result is test passed'

例4

次に、プレースホルダ名がコマンド文字列のリテラル・テキストと競合するときに無効な結果が発生する場合の例を示します。この例では、$1という名前のプレースホルダは列値と関連付けられ、SHELLコマンドは、$1を含むリテラル文字列をエコーします。

MAP src.tab1, TARGET targ.tab1 &
EVENTACTIONS (SHELL ('echo Extra charge for $1 is $1', VAR $1 = COL1));

<column>値がgift wrapとすると、次は予期しない結果です:

'Extra charge for gift wrap is gift wrap'

プレースホルダ<variable>を$colに変更すると、結果は次のような正しい出力になります。

MAP src.tab1, TARGET targ.tab1 &
EVENTACTIONS (SHELL ('echo Extra charge for $col is $1', VAR $col = COL1));
'Extra charge for gift wrap is $1'

次に、予期しない結果に類似した可能性を示します。

MAP src.tab1, TARGET targ.tab1 &
EVENTACTIONS (SHELL ('Timestamp: $1  Price is $13 > out.txt ', &
VAR $1 = @GETENV('JULIANTIMESTAMP')));

The redirected output <file> might contain a <string> like this (notice the second timestamp contains an appended value of 3):

'Timestamp: 212156002704718000 Price is 2121560027047180003'

目的の結果は、次のとおりです。

'Timestamp: 212156002704718000 Price is $13'

例5

次に、トレースの異なる構成方法の例を示します。

MAP tab1, TARGET tab1 EVENTACTIONS (TRACE ./dirrpt/trace
1.txt);
MAP tab2, TARGET tab2 EVENTACTIONS (TRACE ./dirrpt/trace2.txt TRANSACTION);

例6

次に、EVENTACTIONSをSUSPENDとともに使用する方法を示します。

EXITPARAM '<parameter>'

EXITPARAMは、TABLEおよびMAPに有効です。

EXITPARAMでは、TABLEまたはMAP文からのレコードが見つかるたびに、パラメータをユーザー・イグジット・ルーチンのEXIT_PARAMSファンクションに渡します。

構文

EXITPARAM '<parameter string>'

<'parameter string'>

リテラル文字列のパラメータ。パラメータは一重引用符で囲みます。パラメータ文字列では、最大で100文字まで指定できます。

FETCHBEFOREFILTER

FETCHBEFOREFILTERは、TABLEに有効です。

FETCHBEFOREFILTERでは、FILTER操作が実行される前に、FETCHCOLSまたはFETCHCOLSEXCEPTで指定された列をフェッチします。フィルタ前にフェッチすることにより、フィルタに必要な値を使用できます。FETCHBEFOREFILTERを指定しない場合、FETCHCOLSまたはFETCHCOLSEXCEPTで指定したフェッチは、フィルタが実行されるまで実行されません。FETCHBEFOREFILTERは、パラメータ・ファイルでFILTERの前に指定します。

データ・ポンプExtractグループにパススルー・モードで処理される表には、このオプションを使用しないでください。

構文

FETCHBEFOREFILTER

例

TABLE hr.salary, FETCHCOLS (<sal_level>),
FETCHBEFOREFILTER,
FILTER (sal_level >= 8)
;

{FETCHCOLS | FETCHCOLSEXCEPT} (<column_list>)

FETCHCOLSおよびFETCHCOLSEXCEPTは、TABLEに有効です。これらのオプションはプライマリExtractのみで有効です。

FETCHCOLSおよびFETCHCOLSEXCEPTでは、トランザクション・ログ・レコードに値が存在しない場合に、データベースから列値をフェッチします。このオプションは、データベースが更新操作で変更された列の値しか記録しないものの、FILTER操作に必要な他の列値を使用できるようにする必要がある場合に使用します。

FETCHCOLSおよびFETCHCOLSEXCEPTは、Oracle GoldenGateにサポートされているすべてのデータベースに有効です。

Oracle AI Databaseの場合、Oracle GoldenGateは、OracleのFlashback Queryメカニズムを使用して、UNDO表領域から値をフェッチします。フラッシュバック問合せは、特定の時刻またはSCN時点の列の読取り一貫性イメージを提供します。Oracle GoldenGateがフラッシュバック問合せを使用する方法の詳細。

FETCHCOLSまたはFETCHCOLSEXCEPTを使用するかわりに、必要な列のサプリメンタル・ロギングを有効にするほうが効率的なこともあります。

フェッチの制御、およびフェッチ対象に指定した列が見つからない場合にレスポンスを有効化するには、FETCHOPTIONSパラメータを使用します。STATS EXTRACTコマンドによって生成される統計表示にフェッチ結果を含めるには、STATOPTIONSパラメータを使用します。

FETCHCOLSまたはFETCHCOLSEXCEPTで指定した列値がトランザクション・ログに存在する場合、データベースのフェッチは実行されません。これにより、データベースのオーバーヘッドが軽減されます。

構文

{FETCHCOLS | FETCHCOLSEXCEPT} (<column> [, ...])

<column>

次のいずれかです:

例

この例では、FETCHCOLS句はカラム1と3のみをフェッチしますが、FETCHCOLSEXCEPT句はカラム1とカラム3を除くすべてのカラムをフェッチします。

TABLE hq.acct, FETCHCOLS (col1, col3);
TABLE hq.sales, FETCHCOLSEXCEPT (col1, col3);

{FETCHMODCOLS | FETCHMODCOLSEXCEPT} (<column_list>)

FETCHMODCOLSおよびFETCHMODCOLSEXCEPTは、TABLEに有効です。これらのオプションはプライマリExtractのみで有効です。

FETCHMODCOLSおよびFETCHMODCOLSEXCEPTでは、列がトランザクション・ログに存在する場合でも、列値をデータベースからフェッチさせます。データベースのタイプに応じて、ログ・レコードに表のすべての列が含まれている場合と、特定のトランザクション操作で変更された列のみが含まれている場合があります。

FETCHMODCOLSおよびFETCHMODCOLSEXCEPTは、Oracle GoldenGateにサポートされているすべてのデータベースに有効です。

次の使用方法のガイドラインに従ってください。

構文

{FETCHMODCOLS | FETCHMODCOLSEXCEPT} (<column> [, ...])

(<column> [, ...])

次のいずれかです:

例

この例では、FETCHMODCOLS句はカラム1と3のみをフェッチしますが、FETCHMODCOLSEXCEPT句はカラム1とカラム3を除くすべてのカラムをフェッチします。

TABLE hq.acct, FETCHMODCOLS (col1, col3);
TABLE hq.sales, FETCHMODCOLSEXCEPT (col1, col3);

FILTER (<filter_clause>)

FILTERは、TABLEおよびMAPに有効です。

FILTERでは、数値に基づいてレコードを選択または除外します。フィルタ式では、条件演算子、Oracle GoldenGate列変換ファンクション、またはその両方を使用できます。ノート: 文字列に基づいてフィルタするには、Oracle GoldenGate文字列ファンクションの1つを使用します。これらの関数の詳細は、「表および列マッピング関数」を参照してください。WHEREオプションも使用できます。「WHERE (clause)」を参照してください。

FILTERコンポーネントはすべてカンマで区切ります。FILTER句には、次を含めることができます。

リテラルは一重引用符で囲みます。データベースに格納されるときのように、大/小文字を区別する列名を指定します。また、大/小文字を区別するのに引用符が必要になるデータベース(Oracleなど)の場合は列名を二重引用符で囲みます。

Oracle GoldenGateでは、マルチバイト文字セットを含む列に対して、FILTERをサポートしています。

構文

FILTER (
[, ON INSERT | ON UPDATE| ON DELETE]
[, IGNORE INSERT | IGNORE UPDATE | IGNORE DELETE]
, <filter_clause>
[, RAISEERROR <error_number>]
)

<filter_clause>

<expression>に基づいて、次のようなレコードを選択します。

FILTER ((PRODUCT_PRICE*PRODUCT_AMOUNT) > 10000))

フィルタ<clause>では、次のように、Oracle GoldenGateの列変換ファンクションを使用できます。

FILTER (@COMPUTE (PRODUCT_PRICE*PRODUCT_AMOUNT)>10000)

リテラルは一重引用符で囲みます。データベースに格納されるときのように、大/小文字を区別する列名を指定します。また、大/小文字を区別するのに引用符が必要になるデータベース(Oracleなど)の場合は列名を二重引用符で囲みます。

Oracle GoldenGateでは、マルチバイト文字セットまたはローカル・オペレーティング・システムの文字セットと互換性のない文字セットを含む列に対して、FILTERをサポートしていません。

フィルタ句のファイルの最大サイズは5,000バイトです。

ON INSERT ON UPDATE ON DELETE

レコードのフィルタリングを、指定した操作に限定します。操作はカンマで区切ってください。たとえば:

FILTER (ON UPDATE, ON DELETE,
@COMPUTE (PRODUCT_PRICE*PRODUCT_AMOUNT)>10000)

前述の例では、UPDATE操作およびDELETE操作に対してフィルタを実行しますが、INSERTに対しては実行しません。

IGNORE INSERT IGNORE UPDATE IGNORE DELETE

指定した操作にフィルタを適用しません。操作はカンマで区切ってください。たとえば:

FILTER (IGNORE INSERT, @COMPUTE (PRODUCT_PRICE*PRODUCT_AMOUNT)>10000)

前述の例では、UPDATE操作およびDELETE操作に対してフィルタを実行しますが、INSERTは無視します。

RAISEERROR <error>

フィルタが失敗したときにユーザー定義のエラー番号を発行します。REPERRORパラメータの入力として使用し、エラー処理を起動できます。<error>の値は、データベースまたはOracle GoldenGateによって使用されているエラー番号範囲外の値にしてください。例: RAISEERROR 21000。

GETBEFORECOLS (<column_specification>)

GETBEFORECOLSは、TABLEに有効です。

GETBEFORECOLSでは、更新または削除操作中にビフォア・イメージを取得し、トレイルに書き込む列を指定します。GETBEFORECOLSは、Oracle GoldenGateの双方向構成またはマルチマスター構成で競合の検出および解決(CDR)機能を使用しているときに使用します。また、変換ファンクション、またはレコードのビフォワ・イメージを必要とするその他の処理機能を使用しているときにも使用します。

更新の場合、特定の列が変更されたかどうかにかかわらず、指定した列のビフォア・イメージがトレイルに含まれます。GETBEFORECOLS句で指定される列に加えて、Oracle AI Databaseは変更された他の列のビフォワ・イメージも記録します。サポートされている他のデータベースには、GETUPDATEBEFORESパラメータを使用して、変更された他の列のビフォア値を含めることができます。

ノート: 同じパラメータ・ファイルで両方が使用されている場合、GETUPDATEBEFORESはGETBEFORECOLSよりも優先されます。

このパラメータを使用するには、デフォルトでビフォアの値を記録しないデータベースに対して、サプリメンタル・ロギングを有効化する必要があります。

同じパラメータ・ファイルで使用されている場合、GETBEFORECOLSは、COMPRESSUPDATESおよびCOMPRESSDELETESよりも優先されます。

このパラメータは、Db2 z/OSを除くすべてのデータベースに対して有効です。Oracle GoldenGateでサポートされているすべてのプラットフォーム上のDb2 z/OSには、GETBEFORECOLS.のかわりにGETUPDATEBEFORESパラメータを使用します。

構文

GETBEFORECOLS(
{ON UPDATE | ON DELETE}
{ALL | KEY | KEYINCLUDING (<col>[,...])  | KEYANDMOD | | ALLEXCLUDING (<col>[,...]) }
[,...]
)
{ON UPDATE ON DELETE}

指定した列のビフォア・イメージを、更新または削除のために取得するかどうかを指定します。ON UPDATEのみ、またはON DELETEのみ、または両方を使用できます。両方使用する場合、同じGETBEFORECOLS句の中に指定します。両方使用する方法は、例を参照してください。

{ALL | KEY | KEYINCLUDING (<col>[,...]) | KEYANDMOD | ALLEXCLUDING (<col>[,...])}

ビフォア・イメージを取得する列を指定します。

ALL

主キーを含む、サポートされているターゲット表のすべてのデータ型列のビフォア・イメージをキャプチャします。サポートされていないすべての列はスキップされ、ExtractまたはReplicatパラメータ・ファイルに情報メッセージとして記録されます。これはExtractに最も高い処理負荷がかかりますが、すべての列を使用して競合検出の比較を実行し、正確性を最大にすることができます。

KEY

主キーのみのビフォア・イメージを取得します。このオプションは最速ですが、キーは一致していても非キー列は異なる可能性があるため、最も正確な競合検出は不可能です。KEYはデフォルトです。

KEYINCLUDING

主キーおよび指定した列のビフォア・イメージを取得します。これは、速度と検出の正確性との間での妥当な方法です。

KEYANDMOD

このオプションは、ExtractおよびReplicatの両方のキー・オプションの拡張として使用します。ソースでのDMLの更新では、Extractがキーおよび変更された列をログに記録します。ターゲットのReplicatは、WHERE句に競合が検出されると、KEYおよびMODIFIED列を使用します。Oracle AIデータベースでは、変更された列はデフォルトで常に競合検出に使用され、このパラメータによって明示的になります。

ALLEXCLUDING

指定した列を除くすべての列のビフォア・イメージを取得します。多数の列が含まれる表では、KEYINCLUDINGよりもALLEXCLUDINGのほうが効率的な場合があります。キー列は除外しないでください。

例

次の例では、更新および削除操作の際、キー列に加え、name、addressおよびsalaryのビフォア・イメージが常にトレイル・ファイルに書き込まれます。

TABLE src,
GETBEFORECOLS (
ON UPDATE KEYINCLUDING (name, address,  salary),
ON DELETE KEYINCLUDING (name, address, salary));

HANDLECOLLISIONS | NOHANDLECOLLISIONS

HANDLECOLLISIONSおよびNOHANDLECOLLISIONSは、MAPに有効です。

HANDLECOLLISIONSおよびNOHANDLECOLLISIONSを使用すると、Oracle GoldenGateが初期ロードの結果と、同じ表に対して行われたレプリケートされたトランザクション変更を調整するかどうかを制御できます。HANDLECOLLISIONSを使用すると、初期ロードが終了してOracle GoldenGateがレプリケートされた変更を適用するときに、Replicatはターゲット表の重複レコードを上書きし、紛失したレコードのエラーには別のエラー処理方法で対処します。

HANDLECOLLISIONSおよびNOHANDLECOLLISIONSは、パラメータ・ファイルのすべてのMAP文に対してグローバルに使用することも、MAP文で指定した表グループに対するON/OFFスイッチとして使用することもできますが、MAP文内で使用することもできます。MAP文で使用する場合は、グローバル指定よりも優先されます。

構文および使用方法については、「HANDLECOLLISIONS | NOHANDLECOLLISIONS」を参照してください。

レコードの挿入

INSERTALLRECORDSは、MAPに有効です。

INSERTALLRECORDSパラメータでは、ターゲットに対するすべてのマップ済操作をINSERT操作に変換します。INSERTALLRECORDSは、パラメータ・ファイルのルート・レベル、MAP文内およびMAP文のMAPEXCEPTION句内で使用できます。

構文および使用方法については、INSERTALLRECORDSを参照してください。

INSERTAPPEND

INSERTAPPENDは、MAPに有効です。

INSERTAPPENDおよびNOINSERTAPPENDパラメータでは、ReplicatがOracleターゲット表にINSERT操作を適用するときにAPPENDヒントを使用するかどうかを制御します。これらのパラメータは、Oracleデータベースにのみ有効です。

構文および使用方法については、「INSERTAPPEND | NOINSERTAPPEND」を参照してください。

KEYCOLS (<columns>)

KEYCOLSは、TABLEおよびMAPに有効です。

KEYCOLSでは、ターゲット表の1つ以上の列を一意列として定義します。主にKEYCOLSは、表で主キーまたは適切な一意索引が使用できないときに、代替の主キーを定義するためのものです。KEYCOLSを使用すると、Replicatが使用する行識別子で使用するための追加の列を指定することもできます。キーまたはKEYCOLS句を使用できない場合は、Replicatは表のすべての列を使用し、実質的に完全な表スキャンを実行してWHERE句を作成します。

KEYCOLSによって指定されるキーの列は、行を一意に識別する必要があり、ソース表のキーとして使用される列と一致する必要があります。ソース表には、少なくともターゲット表に指定されているKEYCOLSキーと同じ数のキー列または索引列が含まれている必要があります。そうでなければ、ソースのキー列または索引列を更新する際に、Replicatは余剰なKEYCOLのターゲット列のビフォア・イメージを取得できません。

KEYCOLSを使用して代替キーを定義する際は、次のガイドラインに従ってください。

KEYCOLSを使用するときは、指定した列をロギング用に構成し、Replicatがトレイル・レコードで使用できるようにしてください。Oracle AIデータベースでは、ADD TRANDATAコマンドのCOLSオプションを使用するとロギングを有効にできます。

ターゲット表では、KEYCOLSで定義したキー列に一意索引を作成します。索引によって、Oracle GoldenGateが処理する必要があるターゲット行をより高速に特定できます。

データ・ポンプExtractグループにパススルー・モードで処理される表には、KEYCOLSを使用しないでください。

並列Replicatまたは統合Replicatの使用時のKEYCOLSに関する追加のガイドライン:

構文

KEYCOLS (<column> [, ... ])

<column>

代替主キーとして使用する列を定義します。主キーまたは一意キーが存在する場合は、これらの列をKEYCOLS指定に含める必要があります。複数の列を指定するには、次のようにカンマ区切りリストを作成します。

KEYCOLS (id, name)

次の列タイプはKEYCOLSでサポートされていません。

例

KEYCOLS

MAPEXCEPTION (<exceptions_mapping>)

MAPEXCEPTIONSは、MAPに有効です。

MAPEXCEPTIONは、エラーを処理するための例外MAP文の一部として使用します。MAPEXCEPTIONは、REPERRORパラメータによって例外としてフラグ付けされている失敗した操作を例外表にマップします。Replicatは、これらの操作の値をその他の情報とともに例外表に書き込みます。

MAPEXCEPTIONは、ソース-ターゲット表マッピングおよびその他の標準のMAPオプションを含む同一のMAP文内で使用できます。ソースおよびターゲット表名には、ワイルドカードを含めることができます。

MAPEXCEPTIONを使用する際は、同一のMAP文内、またはReplicatパラメータ・ファイルのルートで、REPERROR文とEXCEPTIONオプションを使用します。「EXCEPTIONSONLY」および「REPERROR」を参照してください。

構文

MAPEXCEPTION (TARGET <exceptions_table>, INSERTALLRECORDS [, <exception_MAP_options>])

TARGET <exceptions_table>

例外表の完全修飾名。オブジェクト名の標準のOracle GoldenGateルールが例外表の名前に適用されます。

<exception_MAP_options>

例外処理に適用するMAPパラメータの有効な任意のオプション。

INSERTALLRECORDS

すべての例外をINSERT操作として例外表に適用します。このパラメータは、MAPEXCEPTIONを使用するときには必須です。

例

次に、例外マッピングでのMAPEXCEPTIONの使用例を示します。MAPおよびTARGET句には、ワイルドカードのソースおよびターゲット表名が含まれています。名前がTRXで始まるすべての表を処理するときに発生する例外を、指定されたマッピングを使用してfin.trxexceptions表に取得します。

MAP src.trx*, TARGET trg.*,
MAPEXCEPTION (TARGET fin.trxexceptions,
INSERTALLRECORDS,
COLMAP (USEDEFAULTS,
ACCT_NO = ACCT_NO,
OPTYPE = @GETENV ('LASTERR', 'OPTYPE'),
DBERR = @GETENV ('LASTERR', 'DBERRNUM'),
DBERRMSG = @GETENV ('LASTERR', 'DBERRMSG')
)
);

MAPALLCOLUMNS | NOMAPALLCOLUMNS

MAPALLCOLUMNSおよびNOMAPALLCOLUMNSはMAPに有効です。

MAPALLCOLUMNSを使用して、マップされていない列(キー以外)を取得します。このオプションを指定すると、ExtractまたはReplicatはすべてのソース列が列マッピング機能なしでターゲットに直接マップされているかどうかをチェックします。ソース列がマップされていない場合は、ExtractとReplicatが異常終了します。

「MAPALLCOLUMNS| NOMAPALLCOLUMNS」を参照してください。

MAPINVISIBLECOLUMNS | NOMAPINVISIBLECOLUMNS

MAPINVISIBLECOLUMNSおよびNOMAPINVISIBLECOLUMNSは、MAPに有効です。

MAPINVISIBLECOLUMNSおよびNOMAPINVISIBLECOLUMNSを使用すると、Replicatがデフォルトの列マッピングでOracleターゲット表の非表示列を含むかどうかを制御できます。明示的な列マッピングを使用しているOracleターゲット表では非表示列が常にマップされるので、このオプションは不要です。

MAPINVISIBLECOLUMNSおよびNOMAPINVISIBLECOLUMNSは、異なる2つの方法で使用できます。グローバル・レベルで指定されている場合、一方のパラメータは、他のパラメータが指定されるまで、それ以降のすべてのMAP文に有効です。MAP文内で使用する場合は、グローバル指定よりも優先されます。

構文および使用方法については、「MAPINVISIBLECOLUMNS | NOMAPINVISIBLECOLUMNS」を参照してください。

REPERROR (<error>,<response>)

REPERRORは、MAPに有効です。

REPERRORでは、エラーおよびレスポンスを指定し、MAP文を実行したときにReplicatがエラーに対応する方法を制御します。REPERRORをMAPレベルで使用すると、パラメータ・ファイルのルート・レベルでREPERRORパラメータに設定されているグローバルなエラー処理ルール・セットよりも優先され、このルールを補完できます。自動化された包括的なエラー管理、および無停止のレプリケーション処理を行うために、複数のREPERROR文を同一のMAP文に適用できます。

構文および説明は、REPERRORを参照してください。

RESOLVECONFLICT (<conflict_resolution_specification>)

RESOLVECONFLICTは、MAPに有効です。

双方向構成またはマルチマスター構成でRESOLVECONFLICTを使用して、表に対して行われた操作における競合をReplicatが処理する方法を指定します。MAP文

複数の解決を同じ競合タイプに指定して、RESOLVECONFLICTにリストした順序で実行できます。複数の解決は、INSERTROWEXISTS競合およびUPDATEROWEXISTS競合のみに限定されます。

RESOLVECONFLICTをMAP文に複数回使用して、異なる競合タイプに異なる解決を指定できます。

次に、RESOLVECONFLICTでサポートされているデータ型およびプラットフォームを示します。

構文

RESOLVECONFLICT (
{INSERTROWEXISTS | UPDATEROWEXISTS | UPDATEROWMISSING |
   DELETEROWEXISTS | DELETEROWMISSING}
( {DEFAULT | <resolution_name>},
  {USEMAX (<resolution_column>) | USEMAXEQ (<resolution_column>) | USEMIN (<resolution_column>) | USEMINEQ (<resolution_column>) | USEDELTA |
     DISCARD | OVERWRITE | IGNORE}
 )
[, COLS (<column>[,...])]
)
INSERTROWEXISTS UPDATEROWEXISTS UPDATEROWMISSING
DELETEROWEXISTS DELETEROWMISSING  

この解決で処理する競合のタイプ。

INSERTROWEXISTS

挿入された行がターゲット上の一意性制約を違反しています。

UPDATEROWEXISTS

更新された行がターゲット上に存在しますが、1つ以上の列には、データベース内の現在の値と異なるトレイル内のビフォワ・イメージが存在します。

UPDATEROWMISSING

更新された行がターゲットに存在しません。

DELETEROWEXISTS

削除された行がターゲットに存在しますが、1つ以上の列には、データベース内の現在の値と異なるトレイル内のビフォワ・イメージが存在します。

DELETEROWMISSING

削除された行がターゲットに存在しません。

DEFAULT | <resolution_name>

DEFAULT

デフォルトの列グループ。DEFAULT列グループに関連付けられている解決は、明示的に名前が付けられた列グループにないすべての列に使用されます。DEFAULT列グループを定義する必要があります。

<resolution_name>

特定の解決タイプにリンクしている特定の列グループの名前。解決タイプを識別する名前を指定します。有効な値は英数字です。空白および特殊文字は使用できませんが、アンダースコアは使用できます。たとえば、次のようになります。

delta_res_method

名前が付けられた解決またはDEFAULTのいずれかを使用しますが、両方は使用しないでください。

USEMAX (<resolution_column>) | USEMAXEQ (<resolution_column>) | USEMIN (<resolution_column>) | USEMINEQ (<resolution_column>) | USEDELTA |    
DISCARD OVERWRITE IGNORE

競合を解決するのに使用される競合ハンドラ・ロジック。有効な解決は次のとおりです。

USEMAX

トレイル・レコード内の<resolution_column>の値がデータベース内の列の値より大きい場合、適切なアクションが実行されます。

USEMAXEQ

トレイル・レコード内の<resolution_column>の値がデータベース内の列の値以上の場合、適切なアクションが実行されます。

USEMIN

トレイル・レコード内の<resolution_column>の値がデータベース内の<column>の値より小さい場合、適切な<action>が実行されます。

USEMINEQ

トレイル・レコード内の<resolution_column>の値がデータベース内の<column>の値以下の場合、適切な<action>が実行されます。

<resolution_column>

解決列として機能するNOT NULL列の名前この列は、この解決に関連付けられている列グループの一部である必要があります。ターゲット・データベース内の現在の値と比較する解決列の値によって、解決の適用方法が決定されます。使用可能な場合、解決列のアフター・イメージが比較に使用されます。それ以外の場合、ビフォア・イメージの値が使用されます。単純なSQLで比較できる、次の列を使用します。

最新のタイムスタンプの解決を使用するには、タイムスタンプ列を<resolution_column>として使用し、行が挿入または更新されたとき、タイムスタンプ列を現在の時刻に設定します。可能な場合、秒の端数をサポートするSYSTIMESTAMPデータ型で、解決列を定義します。秒未満の粒度で比較を実行すると、解決列の値がトレイル内とターゲット内で同じであるケースを解決するタイブレーク競合ハンドラは、ほとんど必要ありません。タイムスタンプ列の値が(解決に応じて)増加のみまたは減少のみであることが確認されている場合、USEMAXおよびUSEMINによってデータ相違が発生することはありません。

注意:

主キー列をUSEMAX文で解決列としてUPDATEROWEXISTS競合に使用しないでください。使用すると、Replicatは次のようなエラーで異常終了します。

  2013-04-04 10:18:38 ERROR OGG-01922 Missing RESOLUTION COLUMN NAME while mapping to target table "FIN"."ACCT".

USEDELTA

(UPDATEROWEXISTS競合のみ)ターゲット・データベース内の列の現在の値に、トレイル・レコード内の前後の値の差異を追加します。いずれかの値がNULLの場合、エラーが発生します。USEDELTAは、NUMERICデータ型を含む列に基づきます。USEDELTAは、複数のノードで行が同時に更新される場合の複数ノード構成で役立ちます。すべてのノードが同期されるように、列値の差異のみを他のノードに伝播します。

DISCARD

(すべての競合タイプに有効)ターゲット・データベース内の現在の値を保持し、トレイル・レコード内のデータを破棄ファイルに書き込みます。

データ相違が発生する可能性があるため、DISCARDは慎重に使用してください。

OVERWRITE

(DELETEROWMISSINGを除くすべての競合タイプに有効)次のようにトレイル・レコードを適用します。

データ相違が発生する可能性があるため、OVERWRITEは慎重に使用してください。

IGNORE

(すべての競合タイプに有効)ターゲット・データベース内の現在の値を保持し、トレイル・レコードを無視します。ターゲット表または破棄ファイルに適用しないでください。

COLS (<column>[, ...])

非デフォルト列グループ。特定の解決タイプにリンクされ、操作される、ターゲット・データベース内の列のリスト(マッピング後)です。競合に指定される列グループがない場合、すべての列が、特定の競合に指定される解決の影響を受けます。

または、別の列グループにリストされていないすべての列を含めるDEFAULT列グループを指定できます。DEFAULTオプションを参照してください。

複数の列グループに、それぞれ異なる解決を指定できます。たとえば、col2およびcol3にOVERWRITEを使用し、col4にUSEDELTAを使用できます。いずれかのグループに指定されている列は、他のグループには指定できません。異なる列グループでの列の競合は、指定した解決に従って、リストされた順序で、個別に解決されます。

列グループは次のように機能します。

例

例1

次に、USEMAX、OVERWRITE、DISCARDによるすべての競合タイプを例示します。

MAP fin.src, TARGET fin.tgt,
    COMPARECOLS (ON UPDATE ALL, ON DELETE ALL),
    RESOLVECONFLICT (UPDATEROWEXISTS, (DEFAULT, USEMAX (last_mod_time)),
    RESOLVECONFLICT (INSERTROWEXISTS, (DEFAULT, USEMAX (last_mod_time)),
    RESOLVECONFLICT (DELETEROWEXISTS, (DEFAULT, OVERWRITE)),
    RESOLVECONFLICT (UPDATEROWMISSING, (DEFAULT, OVERWRITE)),
    RESOLVECONFLICT (DELETEROWMISSING, (DEFAULT, DISCARD)),
    );

例2

次に、USEDELTAおよびUSEMAXを指定したUPDATEROWEXISTSを例示します。

MAP fin.src, TARGET fin.tgt,
    COMPARECOLS
    (ON UPDATE KEYINCLUDING (address, phone, salary, last_mod_time),
    ON DELETE KEYINCLUDING (address, phone, salary, last_mod_time)),
    RESOLVECONFLICT (
    UPDATEROWEXISTS,
    (delta_res_method, USEDELTA, COLS (salary)),
    (DEFAULT, USEMAX (last_mod_time)));

例3

次に、USEDELTA、USEMAXおよびIGNOREを指定したUPDATEROWEXISTSを例示します。

MAP fin.src, TARGET fin.tgt,
    COMPARECOLS
    (ON UPDATE ALLEXCLUDING (comment)),
    RESOLVECONFLICT (
    UPDATEROWEXISTS,
    (delta_res_method, USEDELTA, COLS (salary, balance)),
    (max_res_method, USEMAX (last_mod_time), COLS (address, last_mod_time)),
    (DEFAULT, IGNORE));

SQLEXEC (<SQL_specification>)

SQLEXECは、TABLEおよびMAPに有効です。

SQLEXECでは、Oracle GoldenGate処理中にMAP文内からSQLストアド・プロシージャまたは問合せを実行します。SQLEXECにより、Oracle GoldenGateはデータベースと直接通信し、データベースによってサポートされている処理を実行できます。この処理は、列変換のための値の取得など、同期プロセスの一部であっても、データベース内でアクションを実行するストアド・プロシージャの実行など、データの抽出またはレプリケートと関係なくてもかまいません。

構文および使用方法は、SQLEXECを参照してください。

SQLPREDICATE 'WHERE <where_clause>'

SQLPREDICATEは、Oracle、Db2 LUW、z/OS上のDb2、i上のDb2、PostgreSQL、MySQL、SQL ServerおよびSybaseデータベースに有効です。トランザクション変更を同期するように構成されているExtractグループには、SQLPREDICATEを使用しないでください。表から直接レコードを選択するSELECT文が必要であるため、初期ロードExtractにのみ適しています。

SQLPREDICATEは、TABLEとともに使用されます。

SQLPREDICATEでは、Extractが初期ロードの準備で表からデータを選択するときに使用するSELECT文に、通常のSQL WHERE句を含めます。SQLPREDICATEでは、選択条件で返されるレコードがキー値によって順序付けされます。

SQLPREDICATEは、WHEREまたはFILTERオプションよりも高速な初期ロードの選択方法です。これはSQL文に直接影響し、Extractでフィルタリング前にすべてのレコードをフェッチする必要がありません。

Oracle表の場合、SQLPREDICATEにより、UNDOセグメントに保持されるデータ量が削減され、スナップショットが古すぎるために発生するエラーが低減します。非常に大きな表をロードするときに有益です。

SQLPREDICATE句を使用することにより、複数の並列Extractプロセス間で大きな表の行を分割できます。この構成では、並列配信ロード処理も活用できます。

また、SQLPREDICATEを使用すると、タイムスタンプやその他の基準に基づいてデータを選択し、抽出してターゲット表にロードする行をフィルタすることもできます。SQLPREDICATEでは、ORDER BY句やその他のタイプの選択句も使用できます。

WHERE句には、キーまたは索引の一部である列を必ず含めます。そうしないと、Extractは完全な表スキャンを実行するため、SELECT文の効率が低下します。

構文

TABLE <source_table>, SQLPREDICATE 'WHERE <where_clause>';

WHERE

これは必須キーワードです。

<where_clause>

ソース表からレコードを選択する有効なSQL WHERE句。

例

TABLE hr.emp, SQLPREDICATE 'WHERE state = 'CO' and city = 'DENVER''

THREAD (<thread_ID>)

THREADは、MAPに有効です。このオプションは、Replicatが調整モードである場合に有効です。

THREADでは、同じMAP文のすべてのオブジェクトを指定のReplicatスレッドで処理することを指定します。指定のスレッドでは、フィルタリング、操作、ターゲットへの配信、エラー処理、およびそれらのオブジェクトに対して構成されているその他の作業が扱われます。THREADを使用する場合は、TARGET句でワイルドカードを使用できます。

相互に参照依存関係がある表はすべて、同じスレッドでマップされる必要があります。たとえば、表scott.custおよびscott.ordに外部キー関係がある場合、発生する可能性があるマッピングは次のとおりです。

MAP scott.cust, TARGET scott.cust, THREAD (5);
MAP scott.ord, TARGET scott.ord, THREAD (5);

THREADまたはTHREADRANGEオプションが省略されている場合、スレッドIDが小さいスレッドで常にバリア・トランザクションが処理されます。さらに、スレッドに明示的に割り当てられていない作業がこのスレッドによって処理されます。たとえば、IDが1から10のスレッドがある場合、バリア・トランザクションと割り当てられていないトランザクションはスレッド1で実行されます。

複数のスレッド間でMAP文を処理するには、THREADRANGE (thread_range、 column_list)を参照してください。THREADおよびTHREADRANGEは、相互に排他的なオプションです。同じMAP文でこれらを一緒に使用しないでください。

構文

THREAD (<thread_ID>)

<thread_ID>

このMAP文を処理するスレッドの数値識別子。有効な値は、1からこのグループを作成したADD REPLICATコマンドのMAXTHREADSオプションで指定した値までです。INFO REPLICATコマンドを使用すると、Replicatグループに許可されているスレッドの最大数を確認できます。スレッドIDを指定する場合、次の条件を満たす必要があります。

MAXTHREADSを使用しない場合、デフォルトのスレッド最大数は25です。

例

次に、THREADオプションを使用する例をいくつか示します。

例1

この例では、スレッド1で表custを処理します。

MAP scott.cust, TARGET scott.cust, THREAD (1);

例2

この例では、スレッド1でscottスキーマ内のすべての表を処理します。

MAP scott.*, TARGET scott.*, THREAD (1);

例3

この例では、FILTER (filter_clause)および@RANGEファンクションを使用してorders表が2つのMAP文間で分割されます。 @RANGEの詳細は、@RANGEを参照してください。

MAP scott.orders, TARGET scott.orders, FILTER (@RANGE (1, 2, OID)), THREAD (1);
MAP scott.orders, TARGET scott.orders, FILTER (@RANGE (2, 2, OID)), THREAD (2);

THREADRANGE (<thread_range>,<column_list>)

THREADRANGEは、MAPに有効です。このオプションは、Replicatが調整モードである場合に有効です。

THREADRANGEでは、指定された列の値に基づいて、ターゲット表のワークロードをReplicatスレッドの範囲で均一に分割することを指定します。たとえば、IDという列の値に基づいて分割するとき、THREADRANGE値が1から3である場合、スレッド1ではID値が1から10の行を処理し、スレッド2ではID値が11から20の行を処理し、スレッド3ではID値が21から30の行を処理します。ワークロードの内部的計算によって、分割は、前述の例のように完全に均一ではないこともありますが、同じ行は同じスレッドで常に処理されるように調整されます。指定の各スレッドでは、フィルタリング、操作、エラー処理、ターゲットへの配信、およびその行範囲に対するその他の作業が扱われます。

スレッドの範囲で表を分割すると、非常に大きな表または長時間に及ぶトランザクションや大量のトランザクションが頻繁に発生する表への適用パフォーマンスを向上させることができますが、その他のケースで使用することもできます。同じ範囲のスレッドで複数の表を処理できます。

オプションの列リストを省略する場合は、THREADRANGEを使用するときに、ワイルドカードを指定したTARGET句を使用できます。列リストを使用する場合は、同じスレッド範囲を使用している表ごとに、別個の明示的なMAP文を使用してください。

1つの特定のスレッドでMAP文を処理するには、THREAD (thread_ID)を参照してください。THREADおよびTHREADRANGEは、相互に排他的なオプションです。同じMAP文でこれらを一緒に使用しないでください。

相互に参照依存関係がある表は、スレッド範囲に指定しないでください。THREADオプションを使用して、そのような表はすべて同じスレッドで処理します。

THREADRANGEを使用して順序を分割しないでください。調整が必要な場合(順序がSQLEXEC操作の一部である場合など)は、THREADオプションを使用して順序の処理を1つのスレッドに分割します。

THREADまたはTHREADRANGEオプションが省略されている場合、スレッドIDが小さいスレッドで常にバリア・トランザクションが処理されます。さらに、スレッドに明示的に割り当てられていない作業がこのスレッドによって処理されます。たとえば、IDが1から10のスレッドがある場合、バリア・トランザクションと割り当てられていないトランザクションはスレッド1で実行されます。ノート: 列のリストに指定された列は、トレイル・ファイルに存在する必要があります。これを制御するため、ExtractでKEYCOLSを使用してこの列を含めることができます。あるいは、Extractで列に対してFETCHCOLSを使用するか、列をサプリメンタル・ログ・グループに含めてからLOGALLSUPCOLSを使用できます。

構文

THREADRANGE (<lowID>-<highID>, [<column>[, <column>][, ...]])

<lowID>

この範囲の最も小さいスレッド識別子。有効な値は1から500です。

<highID>

この範囲の最も大きいスレッド識別子。<lowID>より大きい数値である必要があります。有効な値は、<lowID>+1から500です。範囲内のスレッド数の上限は、ADD REPLICATコマンドのMAXTHREADSオプションで指定した値です。MAXTHREADSを使用しない場合、デフォルトのスレッド最大数は25です。

[<column>[, <column>][, ...]]

オプション。行分割の基準にする一意列を1つ以上指定します。複数の列を指定するには、col1, col2, col3のようなカンマ区切りリストを使用します。このオプションを省略すると、デフォルトではスレッド間の分割は次の列に基づきます(列は優先度順に示します)。

例

次に、OID列の値に基づいて、同じ2つのスレッド間でorders表とorder_lines表を分割する例を示します。

MAP scott.orders, TARGET scott.orders, THREADRANGE (1-2, OID);
MAP scott.order_lines, TARGET scott.order_lines, THREADRANGE (1-2, OID);

TOKENS (<token_definition>)

TOKENSは、TABLEに有効です。

TOKENSでは、ユーザー・トークンを定義し、データと関連付けます。トークンを使用すると、データを抽出し、トレイル・レコード・ヘッダーのユーザー・トークンの領域内に保存できます。トークン・データを様々な方法で取得および使用することにより、Oracle GoldenGateのデータ提供方法をカスタマイズできます。たとえば、列マップ、SQLEXECで呼び出されるストアド・プロシージャ、またはマクロでトークン・データを使用できます。

ターゲット表で定義済トークン・データを使用するには、Replicat MAP文のCOLMAP句で、@TOKEN列変換ファンクションを使用してください。@TOKENファンクションは、トークン名をターゲット列にマップします。

データ・ポンプExtractグループにパススルー・モードで処理される表には、このオプションを使用しないでください。

トークン・データの文字セットは変換されません。トークンは、Extract用ソース・データベースの文字セットおよびReplicat用ターゲット・データベースの文字セットである必要があります。

構文

TOKENS (<token_name> = <token_data> [, ...])

<token_name>

トークンの選択した名前。任意の数の有効な文字を使用できます(大/小文字区別なし)。マルチバイトの名前はサポートされていません。

<token_data>

2000バイトまでの有効な文字列。データは、一重引用符(NOUSEANSISQLQUOTESを使用している場合は二重引用符)で囲まれたリテラル、またはOracle GoldenGate列変換ファンクションの結果のいずれかを指定できます。

例

次に、TK-OSUSER、TK-GROUPおよびTK-HOSTという名前のトークンを作成し、これらのトークンを@GETENVファンクションで取得したトークン・データにマップする例を示します。

TABLE ora.oratest, TOKENS (
TK-OSUSER = @GETENV ('GGENVIRONMENT' , 'OSUSERNAME'),
TK-GROUP = @GETENV ('GGENVIRONMENT' , 'GROUPNAME')
TK-HOST =  @GETENV ('GGENVIRONMENT' , 'HOSTNAME'));

トリムスペース| NOTRIMSPACES

TRIMSPACESおよびNOTRIMSPACESは、TABLEおよびMAPに有効です。

TRIMSPACESおよびNOTRIMSPACESは、パラメータ・ファイルのルート・レベルか、TABLE文またはMAP文内で使用し、ソースのCHAR列の末尾の空白を、ターゲットのCHAR列またはVARCHAR列に適用するときに切り捨てるかどうかを制御します。デフォルトはTRIMSPACESです。

構文および使用方法については、「TRIMSPACES | NOTRIMSPACES」を参照してください。

TRIMVARSPACES | NOTRIMVARSPACES

TRIMVARSPACESおよびNOTRIMVARSPACESは、TABLEおよびMAPに有効です。

TRIMVARSPACESおよびNOTRIMVARSPACESは、パラメータ・ファイルのルート・レベルか、TABLE文またはMAP文内で使用し、ソースのVARCHAR列の末尾の空白を、ターゲットのCHAR列またはVARCHAR列に適用するときに切り捨てるかどうかを制御します。The default is NOTRIMVARSPACES.

See “TRIMVARSPACES | NOTRIMVARSPACES” for syntax and usage.

WHERE (<clause>)

WHERE is valid for TABLE and MAP.

Use WHERE to select records based on a conditional statement. WHERE does not support the following:

Enclose literals in single quotes. Specify case-sensitive column names as they are stored in the database, and enclose them in double quotes if the database requires quotes to enforce case-sensitivity (such as Oracle).

Getting More Information about Record Filtering

Syntax

WHERE (<clause>)

<clause>

Selects records based on a condition, such as:

WHERE (branch = 'NY')

Table 2-12 shows permissible WHERE operators.

Table 12 Permissible WHERE Operators

Operator Example
列名 PRODUCT_AMT "Product_Amt"
Numeric values -123, 5500.123
Literal strings enclosed in single quotes 'AUTO', 'Ca'
Column tests @NULL, @PRESENT, @ABSENT (column is null, present or absent in the record). These tests are built into Oracle GoldenGate.
Comparison operators =, <>, >, <,>=, <= < td>
結合演算子 `AND`、`OR`
グループ化用カッコ 複数の要素を論理的にグループ化するには、開きおよび閉じカッコを使用します。

例

次のWHEREの例では、AMOUNT列が10,000を超えるとすべてのレコードを返し、AMOUNTが存在しないとレコードは破棄されません。

WHERE (amount = @PRESENT AND amount > 10000)

PARTITIONOBJID

統合Extractに有効。

PARTITIONOBJIDは、パーティション化された表のためにキャプチャされるパーティションのオブジェクトIDを指定するために使用され、統合Extractに適用されます。IO表(オーバーフロー領域があるにもかかわらず)の場合、索引セグメント・オブジェクトIDは、パーティション・レベルのフィルタ用に使用する必要があります。この場合、MAPまたはTABLE文のPARTITIONOBJIDでは、抽出されるパーティションの索引セグメント・オブジェクトIDを指定します。

構文

MAP/TABLE [container.]schema.table PARTITIONOBJID ptn_object_ID [, ptn_object_ID]

次の制限事項が適用されます。

IO表のTABLE文の構文を次に示します。

TABLE [container.]schema.table PARTITIONOBJID index_segment_object_ID [, index_segment_object_ID]

IO表のMAP文の構文を次に示します。

MAP [container.]schema.table PARTITIONOBJID index_segment_object_ID [, index_segment_object_ID]