TABLE | MAP
有効な対象
TABLEは、Extractに有効です。Replicatでは、EVENTACTIONSパラメータを指定した場合にのみTABLEを使用できます。MAPは、Replicatと特定の状況のExtractに有効です。詳細は、「Extract用MAP」を参照してください。
摘要
TABLEパラメータおよびMAPパラメータは、Oracle GoldenGateプロセスによって影響を受けるオブジェクトの選択、マッピングおよび操作を制御します。これらのパラメータは次のように機能します。
-
TABLEパラメータは、Extractパラメータ・ファイルで使用し、Extractプロセスによってデータ・ソースから取得される1つ以上のオブジェクトを指定します。TABLEオプションは、Extractが取得済のデータをOracle GoldenGateトレイルに書き込む前に実行する必要がある、フィルタリングやトークン定義などの処理作業を指定します。 -
TABLEパラメータは、ExtractのパラメータEXTFILE、EXTTRAIL、RMTFILEまたはRMTTRAILのリストの後にリストします。同一のExtract内で複数の証跡を書き込むには、それぞれの証跡の指定の後に個別のTABLEパラメータを作成します。 -
MAPパラメータは、Replicatパラメータ・ファイルで使用し、ソース・オブジェクトから適切なターゲット・オブジェクトにデータをマップします。MAPオプションは、データがターゲット・オブジェクトに適用される前に実行する必要がある、フィルタリングや変換、エラー処理などの処理作業を指定します。ソース・オブジェクトと同期させるターゲット・オブジェクトはそれぞれ、MAPパラメータを使用してそのソース・オブジェクトに関連付ける必要があります。複数のソース-ターゲットの関係は、ワイルドカードを使用して指定できます。
TABLEおよびMAPは、初期ロード構成と、トランザクション変更のレプリケーションをサポートするように構成されたオンライン・プロセスに対して有効です。
TABLEおよびMAPでは、次のオブジェクトを処理できます。
-
索引構成表
-
マテリアライズド・ビュー
-
テーブル
Extractによる取得の順序を指定するには、SEQUENCEパラメータを使用します。
ノート: Oracle GoldenGateは、Oracleマテリアライズド・ビューの実際のデータ値のレプリケーションをサポートしています。
ワイルドカードの有無にかかわらず、1つ以上のTABLE文またはMAP文をパラメータ・ファイルで使用して、処理するすべてのオブジェクトを指定できます。
次のパラメータを使用して、ワイルドカードを使用したTABLE文またはMAP文からオブジェクトを除外できます。
-
TABLEEXCLUDEおよびMAPEXCLUDEパラメータ -
その他の除外パラメータは、
CATALOGEXCLUDE、SCHEMAEXCLUDEおよびEXCLUDEWILDCARDOBJECTSONLYです。 -
AutoCDRと互換性がない
REPERROR/MAPEXCEPTIONEXCEPTIONONLYなどのパラメータの処理中にエラーが発生しました。AutoCDRが有効になっている表では、追加のエラー処理は無視されます。
デフォルト
なし
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句を合せて、マッピングを構成します。
-
MAP <source_table>には、ソース・オブジェクトを指定します。<schema.table>や<catalog.schema.table>など、2つの部分からなる完全修飾オブジェクト名または3つの部分からなる名前を指定します。ワイルドカードを使用すると、複数のソース・オブジェクトを指定できます。 -
TARGET <target_table>には、ターゲット・データベースがコンテナ・データベースである場合でも、2つの部分からなる名前を指定します。Replicatは、1つのコンテナまたはカタログにしか接続できないため、名前のコンテナまたはカタログの部分はReplicatのログイン先(データベースに応じて、USERIDALIAS、1または2で指定)と同じであるとみなされます。ワイルドカードを使用すると、複数のターゲット・オブジェクトを指定できます。
次に、複数の表を指定する場合のワイルドカードの使用例を示します。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>
次のいずれかを指定できます。
-
ソース列の名前(例:
ORD_DATE) -
数値定数(例:
123) -
一重引用符で囲まれた文字列定数(例:
'ABCD') -
Oracle GoldenGate列変換ファンクションを使用する式(例:
@STREXT (COL1, 1, 3))。詳細は、「表および列マッピング関数」を参照してください。
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は、取得するデータが含まれる列を指定します。COLSを使用すると、COLSのリストにない列はすべてOracle GoldenGateによって無視されます。 -
COLSEXCEPTは、取得から除外する列を指定します。COLSEXCEPTを使用すると、COLSEXCEPTのリストにない列はすべてOracle GoldenGateによって取得されます。多数の列が含まれる表では、COLSを使用して各列を指定するよりも、COLSEXCEPTを使用するほうが効率的な場合があります。注意: Oracle GoldenGateでサポートされていないデータ型を含む列を除外するために、キー列は除外しないでください。また、
COLSEXCEPTを使用しないでください。COLSEXCEPTは、サポートされていないデータ型を除外しません。
次に、COLSを使用するための条件を示します。
-
表に1つ以上のキー列が含まれているか、
KEYCOLSオプションで代替キーが定義されている必要があります。「KEYCOLS(columns)」を参照してください。 -
キー列または
KEYCOLSで指定されている列が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ユーティリティで作成された定義テンプレートの名前を指定します。
-
DEFは、ソース定義テンプレートを指定します。 -
TARGETDEFは、ターゲット定義テンプレートを指定します。
テンプレートは、特定の表の定義に基づいています。テンプレートにより、元の表と同じ定義を持つ新しい表は、DEFGENを実行したり、Oracle GoldenGateプロセスを停止して起動する必要もなく、Oracle GoldenGate構成に追加できます。テンプレートの定義は、定義の参照に使用します。
構文
{DEF | TARGETDEF} <template>
<template>
DEFGENユーティリティによって生成される次の定義テンプレートのいずれかの名前。
-
DEFでは、DEFGENパラメータ・ファイルのTABLEパラメータのDEFオプションによって生成されるソース定義テンプレートを指定します。 -
TARGETDEFでは、DEFGENパラメータ・ファイルのTABLEパラメータのTARGETDEFオプションによって生成されるターゲット定義テンプレートを指定します。
テンプレートに含まれる定義は、同じ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の後にリストされたアクションは、レコードの処理後に実行されます。
-
TRACE -
LOG -
CHECKPOINT BEFORE -
DISCARD -
SHELL -
ROLLOVER -
(レコードの処理)
-
IGNORE -
REPORT -
SUSPEND -
ABORT -
CHECKPOINT AFTER -
FORCESTOP -
STOP
標準の方法でイベント・レコード自体の処理を防ぐには、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で有効です。
選択したアクションに応じて、トランザクションの一部またはすべてを無視します。
-
RECORDはデフォルトです。残りのトランザクションではなく、プロセスで指定されたイベント・レコードのみが無視されます。警告またはメッセージはログに書き込まれませんが、Oracle GoldenGate統計が更新され、レコードが無視されたことが統計に反映されます。 -
TRANSACTIONでは、イベントをトリガーしたレコードを含むトランザクション全体を無視します。TRANSACTIONを使用する場合は、イベント・レコードをトランザクション内の最初のレコードにする必要があります。トランザクションを無視する場合、デフォルトではイベント・レコードも無視されます。TRANSACTIONは、TRANSに短縮できます。 -
INCLUDEEVENTをTRANSACTIONとともに指定すると、イベント・レコードはトレイルまたはターゲットに伝播されますが、関連トランザクションの残りの部分は無視されます。
IGNOREは、ABORTおよびDISCARDを除く、他のすべてのEVENTACTIONSオプションと組み合せることができます。
IGNOREアクションは、修飾、フィルタリング、マッピングおよびユーザー・イグジットのすべての操作が処理された後に処理されます。レコードまたはトランザクションは最後の出力フェーズで無視され、レコードまたはトランザクションが出力ターゲット(Extractの場合のトレイルまたはReplicatの場合のデータベース)に書き込まれることが阻止されます。したがって、特定の式(たとえば、SQLEXEC操作を含む式は)では、SQLEXECはIGNOREが処理される前に実行されます。つまり、レコードがトレイルまたはターゲット・データベースに書き込まれない一方で、修飾、フィルタリング、マッピングおよびユーザー・イグジットによってレコードを処理するすべての効果が発生します。
このアクションは、DDLレコードには無効です。DDL操作は自律型であるため、レコードを無視することはトランザクション全体を無視することに相当します。
DISCARD
Extract用TABLEおよびReplicat用MAPで有効です。
プロセスに次のことを実行させます。
-
指定のイベント・レコードを破棄ファイルに書き込む。
-
Oracle GoldenGate統計を更新し、レコードが破棄されたことを統計に反映させる。
プロセスは、トレイルの次のレコードから処理を再開します。
DISCARDは、IGNOREを除く、他のすべてのEVENTACTIONSオプションと組み合せることができます。
LOG [INFO |
WARNING] |
Extract用TABLEおよびReplicat用MAPで有効です。
指定のイベント・レコードが検出されたときに、プロセスにこのイベントを記録させます。レポート・ファイル、Oracle GoldenGateエラー・ログ、およびシステム・イベント・ログにメッセージが書き込まれます。
次のオプションを使用して、メッセージの重大度を指定します。
-
INFOでは、重大度の低い情報メッセージを指定します。これがデフォルト値です。 -
WARNINGでは、重大度の高い警告メッセージを指定します。
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の処理の有無に応じて、次のようになります。
-
列データの有効な式は、次のとおりです。
-
TABLE文のTOKENS句からの値。 -
任意のOracle GoldenGate列変換ファンクションからの戻り値。
-
SQLEXEC問合せまたはプロシージャからの戻り値。
-
-
DDLの有効な式:-
@TOKENファンクションからの戻り値(Replicatのみ)。 -
@GETENVファンクションからの戻り値。 -
列データを参照しないその他のファンクション(
@DATENOWなど)からの戻り値。 -
@DDLファンクションからの戻り値。
-
<TRACE[2]file> [TRANSACTION] [DDL[INCLUDE] | DDLONLY] [PURGE | APPEND]
Extract用TABLEおよびReplicat用MAPで有効です。
指定のイベント・レコードが検出されたときに、トレース情報をトレース・ファイルに書き込ませます。TRACEは、ステップバイステップの処理情報を提供します。TRACE2では、プロセスが最も時間を費やすコード・セグメントを特定します。
デフォルト(オプションなし)では、トランザクション境界を認識しない標準的なDMLトレースは、プロセスが終了するまで有効になります。
-
<file>にはトレース・ファイル名を指定し、TRACEキーワードの直後に配置します。独自のトレース・ファイルを指定することも、単独のTRACEまたはTRACE2パラメータを使用して指定しているデフォルトのトレース・ファイルを使用することもできます。EVENTACTIONSTRACEが使用されている様々なTABLEまたはMAP文で同一のトレース・ファイルを使用できます。複数のTABLEまたはMAP文で同一のトレース・ファイル名が指定されていて、TRACEオプションの指定方法が一貫していない場合は、このトレース・ファイルを含む最後に解決されたTABLEまたはMAPのオプションが優先されます。 -
TRANSACTIONでは、プロセスの終了時までではなく、現在のトランザクションの終了時までのトレースのみ有効にします。Replicatのトランザクションの境界は、Replicatによってグループ化されたトランザクションまたはバッチのターゲット・トランザクションではなく、ソース・トランザクションに基づきます。TRANSACTIONは、TRANSに短縮できます。このオプションはDML操作にのみ有効です。 -
DDL[INCLUDE]では、DDLのトレースに加え、トランザクション・データ処理もDMLします。DDLまたはDDLINCLUDEのいずれかが有効です。 -
DDLONLYでは、DDLをトレースしますが、DMLトランザクション・データはトレースしません。これらのオプションはReplicatにのみ有効です。デフォルトでは、
DDLトレースは無効化されます。 -
PURGEでは、追加のトレース・レコードを書き込む前にトレース・ファイルを切り捨て、APPENDでは、既存のレコードの末尾に新しいトレース・レコードを書き込みます。デフォルトはAPPENDです。
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);
-
最初の
MAP文では、最初のtab1イベント・レコードがターゲットに適用される直前にtrace1.txtトレース・ファイルが生成されます。これには、この時点からReplicatが終了するまで、またはGGSCIのSEND REPLICATコマンドでトレースが無効化されないかぎり、すべてのトレース情報が含まれます。 -
2つ目の
MAP文には、TRANSACTIONオプションが含まれているため、trace2.txtファイルは最初のtab2イベント・レコードがターゲットに適用される直前に作成されますが、トレースはtab2イベント・レコードを含むトランザクションの終了時に自動的に停止します。
例6
次に、EVENTACTIONSをSUSPENDとともに使用する方法を示します。
-
ケース1:
DDLをレプリケートしていて、新しい表を作成するターゲット・データベースに十分な領域があることを確認するとします。CREATE TABLE DDL操作がマップするMAP文で、EVENTACTIONSをSUSPENDとともに使用します。その後、そのMAP文内でSQL文を実行して、表領域内に残っている領域の量を問い合せます。十分な領域がある場合、SEND REPLICATをRESUMEとともに使用して、即座に処理を再開します。不十分な領域がない場合、DBAが領域を追加するまでReplicatを一時停止のままにして、処理を再開するにはSEND REPLICATをRESUMEとともに使用します。 -
ケース2: 任意の表で一意キー違反が発生した場合、その違反を修正します。Replicatは何千もの表を処理しており、Replicatが再起動時にオブジェクト・キャッシュを再び再構築するのに時間がかかるため、違反があるたびに処理を停止したくないとします。
EVENTACTIONSをSUSPENDとともに使用することにより、問題を修正するまで処理を一時停止することができます。 -
ケース3: 1日の終わりに、日時レポートを実行するためにReplicatを一時停止した後、プロセスを停止および再起動せずに処理が即座に再開します。
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では、指定した列を除くすべての列をフェッチします。多数の列が含まれる表では、FETCHCOLSを使用して各列を指定するよりも、FETCHCOLSEXCEPTを使用するほうが効率的な場合があります。
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>
次のいずれかです:
-
列名、または
(col1, col2)のような列名のカンマ区切りリスト。 -
(*)のようなアスタリスク・ワイルドカード。
例
この例では、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では、指定した列を除き、トランザクション・ログに存在するすべての列をフェッチします。多数の列が含まれる表では、FETCHMODCOLSを使用して各列を指定するよりも、FETCHMODCOLSEXCEPTを使用するほうが効率的な場合があります。
FETCHMODCOLSおよびFETCHMODCOLSEXCEPTは、Oracle GoldenGateにサポートされているすべてのデータベースに有効です。
次の使用方法のガイドラインに従ってください。
- キー列には
FETCHMODCOLSおよびFETCHMODCOLSEXCEPTを使用しないでください。
構文
{FETCHMODCOLS | FETCHMODCOLSEXCEPT} (<column> [, ...])
(<column> [, ...])
次のいずれかです:
-
列名、または
(col1, col2)のような列名のカンマ区切りリスト。 -
(*)のようなアスタリスク・ワイルドカード。
例
この例では、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句には、次を含めることができます。
-
数値
-
数字を含む列
-
数字を返す関数
-
算術演算子:
-
(プラス)
-
(マイナス)
-
(乗算)
/ (除算)
\ (余り)
-
-
比較演算子は、次のとおりです。
(次より大きい)
= (次以上)
< (未満)
<= (以下)
= (等しい)
<> (次と等しくない)
比較から導出した結果はゼロ(
FALSEを示す)またはゼロ以外(TRUEを示す)になります。 -
カッコ(式の結果をグループ化)
-
結合演算子:
AND、OR
リテラルは一重引用符で囲みます。データベースに格納されるときのように、大/小文字を区別する列名を指定します。また、大/小文字を区別するのに引用符が必要になるデータベース(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を使用して代替キーを定義する際は、次のガイドラインに従ってください。
-
ソース表とターゲット表のいずれにもキーまたは一意索引がない場合は、
TABLEパラメータおよびMAPパラメータでKEYCOLS句を使用し、各KEYCOLS句に一致する列セットを指定します。 -
いずれかの一方の表にキーまたは一意索引がない場合は、その表に
KEYCOLSを使用します。他方の表の実際のキー列または索引列と一致する列を指定します。KEYCOLSを使用して一致する列セットを定義できない場合は、ソース表(TABLEパラメータ)およびターゲット表(MAPパラメータ)にKEYCOLSを使用する必要があります。一意の値が含まれる一致する列セットを指定します。KEYCOLSはキーまたは一意索引よりも優先されます。 -
ターゲット表にソース表よりも大きなキー(または多くの一意索引列)が含まれている場合は、
TABLE文でKEYCOLSを使用し、余剰なターゲット列と一致するソース列を指定します。このKEYCOLS句に実際のソースのキー列または索引列を含める必要もあります。このようにKEYCOLSを使用すると、ソースで非キー列を更新する場合にReplicatでビフォア・イメージを使用できるようになります。
KEYCOLSを使用するときは、指定した列をロギング用に構成し、Replicatがトレイル・レコードで使用できるようにしてください。Oracle AIデータベースでは、ADD TRANDATAコマンドのCOLSオプションを使用するとロギングを有効にできます。
ターゲット表では、KEYCOLSで定義したキー列に一意索引を作成します。索引によって、Oracle GoldenGateが処理する必要があるターゲット行をより高速に特定できます。
データ・ポンプExtractグループにパススルー・モードで処理される表には、KEYCOLSを使用しないでください。
並列Replicatまたは統合Replicatの使用時のKEYCOLSに関する追加のガイドライン:
-
ALLOWDUPTARGETMAPにKEYCOLSを使用する場合、マップされる各表のキー列は同じでなければなりません。たとえば、HR.EMP_TARGETとHR.EMP_BACKUPにHR.EMPをマップするときに、KEYCOLSを指定する場合、それらはHR.EMP_TARGETとHR.EMP_BACKUPの両方で同じにする必要があります。 -
KEYCOLSを使用して複数のソース表から同じターゲット表にマップする場合、MAP文では同じKEYCOLSのセットを使用する必要があります。
構文
KEYCOLS (<column> [, ... ])
<column>
代替主キーとして使用する列を定義します。主キーまたは一意キーが存在する場合は、これらの列をKEYCOLS指定に含める必要があります。複数の列を指定するには、次のようにカンマ区切りリストを作成します。
KEYCOLS (id, name)
次の列タイプはKEYCOLSでサポートされていません。
-
KEYCOLSでサポートされてないOracle列タイプ:仮想列、UDT、ファンクションベース列、およびOracle GoldenGate構成から明示的に除外されているすべての列。
-
SQL Server、Db2 LUW、Db2 z/OS、MySQLおよびTeradata:
タイプスタンプまたは非マテリアライズド計算結果列を含む列、およびOracle GoldenGate構成から除外されているすべての列。SQL Serverの場合、Oracle GoldenGateは、主キーがないターゲット表の行のデータの長さの合計を、8000バイト未満にするように強制します。
例
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は、WindowsおよびUNIX用のOracle GoldenGateでサポートされているすべてのデータベースをサポートしています。 -
RESOLVECONFLICTを使用するには、データベースがWindows、LinuxまたはUNIXシステムに存在する必要があります(NonStop OSSで実行中のものを含む)。 -
CDRは、明示的な変換を行わずに、単純なSQLで比較できるデータ型をサポートしています。詳細は、個別のパラメータ・オプションを参照してください。
-
LOB、抽象データ型(ADT)またはユーザー定義型(UDT)を含む列では、
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>の値がデータベース内の列の値より大きい場合、適切なアクションが実行されます。
-
(
INSERTROWEXISTS競合)トレイル・レコードを適用しますが、一意性違反を回避するために挿入を更新に変更し、既存の値を上書きします。 -
(
UPDATEROWEXISTS競合)トレイル・レコードを更新として適用します。
USEMAXEQ
トレイル・レコード内の<resolution_column>の値がデータベース内の列の値以上の場合、適切なアクションが実行されます。
-
(
INSERTROWEXISTS競合)トレイル・レコードを適用しますが、一意性違反を回避するために挿入を更新に変更し、既存の値を上書きします。 -
(
UPDATEROWEXISTS競合)トレイル・レコードを更新として適用します。
USEMIN
トレイル・レコード内の<resolution_column>の値がデータベース内の<column>の値より小さい場合、適切な<action>が実行されます。
-
(
INSERTROWEXISTS競合)トレイル・レコードを適用しますが、一意性違反を回避するために挿入を更新に変更し、既存の値を上書きします。 -
(
UPDATEROWEXISTS競合)トレイル・レコードから更新を適用します。
USEMINEQ
トレイル・レコード内の<resolution_column>の値がデータベース内の<column>の値以下の場合、適切な<action>が実行されます。
-
(
INSERTROWEXISTS競合)トレイル・レコードを適用しますが、一意性違反を回避するために挿入を更新に変更し、既存の値を上書きします。 -
(
UPDATEROWEXISTS競合)トレイル・レコードから更新を適用します。
<resolution_column>
解決列として機能するNOT NULL列の名前この列は、この解決に関連付けられている列グループの一部である必要があります。ターゲット・データベース内の現在の値と比較する解決列の値によって、解決の適用方法が決定されます。使用可能な場合、解決列のアフター・イメージが比較に使用されます。それ以外の場合、ビフォア・イメージの値が使用されます。単純なSQLで比較できる、次の列を使用します。
-
NUMERIC -
DATE -
TIMESTAMP -
CHAR/NCHAR -
VARCHAR/ NVARCHAR
最新のタイムスタンプの解決を使用するには、タイムスタンプ列を<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を除くすべての競合タイプに有効)次のようにトレイル・レコードを適用します。
-
(
INSERTROWEXISTS競合)トレイル・レコードを適用しますが、一意性違反を回避するために挿入を更新に変更し、既存の値を上書きします。 -
(
UPDATEROWEXISTS競合)トレイル・レコードから更新を適用します。 -
(
UPDATEROWMISSING競合)トレイル・レコードを適用しますが、アフター・イメージから変更された列およびビフォア・イメージから変更されていない列を使用して、紛失したUPDATEをINSERTに変換します。更新を挿入に変換するには、行のすべての列のビフォア・イメージはトレイル内で使用できる必要があります。データベースでビフォア・イメージがデフォルトでログに記録されない場合はサプリメンタル・ロギングを使用し、ExtractのGETBEFORECOLSパラメータにALLを指定します。 -
(
DELETEROWEXISTS競合)トレイル・レコードから削除を適用しますが、WHERE句の主キー列のみを使用します。
データ相違が発生する可能性があるため、OVERWRITEは慎重に使用してください。
IGNORE
(すべての競合タイプに有効)ターゲット・データベース内の現在の値を保持し、トレイル・レコードを無視します。ターゲット表または破棄ファイルに適用しないでください。
COLS (<column>[, ...])
非デフォルト列グループ。特定の解決タイプにリンクされ、操作される、ターゲット・データベース内の列のリスト(マッピング後)です。競合に指定される列グループがない場合、すべての列が、特定の競合に指定される解決の影響を受けます。
または、別の列グループにリストされていないすべての列を含めるDEFAULT列グループを指定できます。DEFAULTオプションを参照してください。
複数の列グループに、それぞれ異なる解決を指定できます。たとえば、col2およびcol3にOVERWRITEを使用し、col4にUSEDELTAを使用できます。いずれかのグループに指定されている列は、他のグループには指定できません。異なる列グループでの列の競合は、指定した解決に従って、リストされた順序で、個別に解決されます。
列グループは次のように機能します。
-
INSERTROWEXISTSおよびUPDATEROWEXISTS競合の場合、異なる列グループを使用して、表ごとに複数の競合タイプおよび解決を指定できます。異なる列グループでの列の競合は、列グループに指定した競合解決方法に従って、個別に解決されます。 -
UPDATEROWMISSING、DELETEROWEXISTSおよびDELETEROWMISSINGの場合、1つの列グループのみを使用でき、表のすべての列は、この列グループにある必要があります(<default>列グループと見なされます)。
例
例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を指定する場合、次の条件を満たす必要があります。
-
Replicatグループのすべての
MAP文で指定されているスレッドの0合計数0の上限度は、MAXTHREADSの値です。 -
Replicatグループ内で、単一の
<thread_ID>値はMAXTHREADSの値より大きくできません。たとえば、MAXTHREADSが25の場合、<thread_ID>を26以上にはできません。
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のようなカンマ区切りリストを使用します。このオプションを省略すると、デフォルトではスレッド間の分割は次の列に基づきます(列は優先度順に示します)。
-
主キー
-
同じ
MAP文のKEYCOLS句 -
キーとして使用することをOracle GoldenGateでサポートされている、表のすべての列
例
次に、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:
-
Columns that have a multi-byte character set or a character set that is incompatible with the character set of the local operating system.
-
The evaluation of the before image of a primary key column in the conditional statement as part of a primary key update operation.
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]
次の制限事項が適用されます。
-
PARTITIONOBJIDが含まれているMAP/TABLEパラメータでは、表名のワイルドカード指定は許可されていません。 -
DDLを使用するときは、PARTITIONOBJID取得およびレプリケーションはサポートされません。
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]