Oracle® Fusion Middleware Oracle GoldenGateリファレンスfor Windows and UNIX 12c (12.2.0.1) E70112-04 |
|
前 |
次 |
適用対象
TABLE
は、Extractに有効です。MAP
は、Replicatに有効です。
説明
TABLE
パラメータおよびMAP
パラメータは、Oracle GoldenGateプロセスによって影響を受けるオブジェクトの選択、マッピングおよび操作を制御します。これらのパラメータは次のように機能します。
TABLE
パラメータは、Extractパラメータ・ファイルで使用し、Extractプロセスによってデータ・ソースから取得される1つ以上のオブジェクトを指定します。TABLE
オプションは、Extractが取得済のデータをOracle GoldenGateトレイルに書き込む前に実行する必要がある、フィルタリングやトークン定義などの処理作業を指定します。
MAP
パラメータは、Replicatパラメータ・ファイルで使用し、ソース・オブジェクトから適切なターゲット・オブジェクトにデータをマップします。MAP
オプションは、データがターゲット・オブジェクトに適用される前に実行する必要がある、フィルタリングや変換、エラー処理などの処理作業を指定します。ソース・オブジェクトと同期させるターゲット・オブジェクトはそれぞれ、MAP
パラメータを使用してそのソース・オブジェクトに関連付ける必要があります。複数のソース-ターゲットの関係は、ワイルドカードを使用して指定できます。
TABLE
およびMAP
は、初期ロード構成と、トランザクション変更のレプリケーションをサポートするように構成されたオンライン・プロセスに対して有効です。
TABLE
およびMAP
では、次のオブジェクトを処理できます。
索引
トリガー
マテリアライズド・ビュー
表
Extractによる取得の順序を指定するには、SEQUENCE
パラメータを使用します。
注意:
Oracle GoldenGateは、Oracleマテリアライズド・ビューの実際のデータ値のレプリケーションをサポートしています。Oracle GoldenGateは、OracleとTeradataの索引およびトリガーのDDLレプリケーションをサポートしていますが、これらのオブジェクトのコンテンツはサポートしていません。
ワイルドカードの有無にかかわらず、1つ以上のTABLE
文またはMAP
文をパラメータ・ファイルで使用して、処理するすべてのオブジェクトを指定できます。
TABLEEXCLUDEパラメータおよびMAPEXCLUDEパラメータを使用して、ワイルドカードを指定したTABLE
文またはMAP
文からオブジェクトを除外できます。除外パラメータはその他に、CATALOGEXCLUDE、SCHEMAEXCLUDEおよびEXCLUDEWILDCARDOBJECTSONLYがあります。
TABLE
およびMAP
の使用の詳細は、Oracle GoldenGateの管理for Windows and UNIXを参照してください。
デフォルト
なし
TABLEの構文
表に対しては、すべてのTABLE
オプションを使用できます。表以外のオブジェクトに対しては、TABLE
では取得するオブジェクトの指定のみを行います。
TABLEsource_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)] ;
MAPの構文
MAP source_table, TARGET target_table [, 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)] [, 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)] ;
TABLEおよびMAPのオプション
次に、TABLE
パラメータとMAP
パラメータで使用できるオプションをまとめた表を示します。すべてのオプションが両方のパラメータに対して有効とはかぎりません。
表3-33 TABLEおよびMAPの構文コンポーネントの概要
コンポーネント | 説明 | 適用対象 |
---|---|---|
TABLE source_table[, TARGET taget_table] |
Extractに対する |
|
Replicatプロセスに対してソース-ターゲットのオブジェクト・マッピングを指定します。Replicatパラメータ・ファイルで使用します。 |
|
|
UDT属性レベルのソース・キャラクタ・セット情報を指定します。 |
|
|
サポートされているキャラクタ・セットを指定します。 |
|
|
サポートされているキャラクタ・セットを指定します。 |
|
|
COLMAP (column_mapping) |
異なるソース列およびターゲット列間でレコードをマップします。 |
|
処理する列を選択または除外します。 |
|
|
COMPARECOLS (column_specification) |
競合の検出および解決に使用する列を指定します。 |
|
トランザクションをバリア・トランザクションとして処理させます。 |
|
|
{DEF| TARGETDEF} template |
ソース定義またはターゲット定義テンプレートを指定します。 |
|
|
|
|
EVENTACTIONS (action) |
指定されているフィルタ・ルールを満たすレコードに基づいて、アクションをトリガーします。 |
|
EXITPARAM 'parameter' |
リテラル文字列形式でパラメータをユーザー・イグジットに渡します。 |
|
FETCHBEFOREFILTER |
フィルタの実行前に、 |
|
{FETCHCOLS | FETCHCOLSEXCEPT} (column_list) |
トランザクション・レコードに値が存在しない場合に、ソース・データベースからの列値のフェッチを有効にします。 |
|
{FETCHMODCOLS | FETCHMODCOLSEXCEPT} (column_list) |
トランザクション・ログに列が存在する場合でも、データベースから列値をフェッチさせます。 |
|
FILTER (filter_clause) |
数値に基づいてレコードを選択します。 |
|
GETBEFORECOLS (column_specification) |
列のビフォア・イメージを取得させ、トレイルに書き込ませます。 |
|
初期ロード・プロセスでターゲット表に適用された変更の結果と、変更同期グループによって適用された変更を調整します。 |
|
|
INSERTALLRECORDS |
すべての行変更を挿入として適用します。 |
|
Replicatが |
|
|
KEYCOLS (columns) |
行を一意に特定する列を指定します。 |
|
MAPEXCEPTION (exceptions_mapping) |
|
|
MAPINVISIBLECOLUMNS | NOMAPINVISIBLECOLUMNS |
Replicatがデフォルトの列マッピングでOracleターゲット表に非表示列を含めるかどうかを制御します。明示的な列マッピングを使用しているOracleターゲット表では非表示列が常にマップされるので、このオプションは不要です。 |
|
REPERROR (error, response) |
|
|
RESOLVECONFLICT (conflict_resolution_specification) |
競合解決のルールを指定します。 |
|
SQLEXEC (SQL_specification) |
ストアド・プロシージャおよび問合せを実行します。 |
|
SQLPREDICATE 'WHERE where_clause' |
初期ロードのために |
|
調整モードのReplicatに有効です。 |
|
|
調整モードのReplicatに有効です。 |
|
|
TOKENS (token_definition) |
ユーザー・トークンを定義します。 |
|
|
|
|
|
|
|
WHERE (clause) |
条件演算子に基づいてレコードを選択します。 |
|
; |
(セミコロン) |
|
TABLE
source_table
[, TARGET
taget_table
]
TABLE
は、Extractパラメータ・ファイルで有効です。
TABLE
では、Extractでデータを取得するソース・オブジェクトを指定します。schema.table
やcatalog.schema.table
など、2つまたは3つの部分からなる完全修飾オブジェクト名を指定します。ワイルドカードを使用すると、1つのTABLE
文で複数のオブジェクトを指定できます。オブジェクト名とワイルドカードを正しく指定するには、Oracle GoldenGateの管理for Windows and UNIXを参照してください。
TARGET
オプションは、Extractが変換を実行するためにターゲット定義ファイル(TARGETDEFS
パラメータで指定)を参照する必要がある場合またはCOLMAP
オプションを使用して列をマップする場合にのみ使用します。それ以外の場合は、TABLE
パラメータから省略できます。COLMAP
による列マッピングおよび変換処理は通常、ソース・システムでのレプリケーション・アクティビティの影響を最小限に抑えるためにターゲット・システムで実行しますが、必要に応じてソース・システムで実行できます。たとえば、列マッピングおよび変換は、複数のソースに対して1つのターゲットがある構成では、ソース・システムで実行できます。このような場合、特に新しい定義ファイルの生成が必要になる頻繁なアプリケーション変更が発生するときは、ソース・データベースごとに1つの定義ファイルを管理するよりも、1つのターゲット定義ファイルを管理する方が簡単です。
TABLE
パラメータでTARGET
を使用することによって、定義ファイルまたは列マップに指定されているレコードの構造を反映して、ソース構造ではなくターゲット構造に基づいて抽出データのメタデータを特定します。ターゲットのOracleコンテナ・データベースまたはSQL/MXデータベースの表をTARGET
で指定する場合は、3つの部分からなる名前を使用しないでください。Replicatは、1つのコンテナまたはカタログにしか接続できないため、名前のコンテナまたはカタログの部分はReplicatのログイン先(データベースに応じて、USERID
、USERIDALIAS
またはTARGETDB
で指定)と同じであるとみなされます。
指定したソース・データの処理に他のTABLE
構文オプションが不要な場合は、単純なTABLE
文を使用できます(文は必ずセミコロンで終わります)。
TABLE sales.customers;
次に、複数の表を指定する場合のワイルドカードの使用例を示します。
TABLE sales.*;
先行するTABLE
文により、指定したオブジェクトについて、Extractはすべてのサポートされる列データを取得し、フィルタリング、変換、またはその他の操作を実行せずに、トレイルに書き込みます。
MAP
source_table
, TARGET
target_table
MAP
文は、Replicatパラメータ・ファイルで有効です。
MAP
ではソース・オブジェクトを指定し、TARGET
ではReplicatがレプリケート済のソース・データを適用するターゲット・オブジェクトを指定します。MAP
句とTARGET
句を合せて、マッピングを構成します。
MAP
source_table
には、ソース・オブジェクトを指定します。schema.table
やcatalog.schema.table
など、2つまたは3つの部分からなる完全修飾オブジェクト名を指定します。ワイルドカードを使用すると、複数のソース・オブジェクトを指定できます。
TARGET
target_table
には、ターゲットがコンテナ・データベースまたはSQL/MXデータベースである場合でも、2つの部分からなる名前を指定します。Replicatは、1つのコンテナまたはカタログにしか接続できないため、名前のコンテナまたはカタログの部分はReplicatのログイン先(データベースに応じて、USERID
、USERIDALIAS
またはTARGETDB
で指定)と同じであるとみなされます。ワイルドカードを使用すると、複数のターゲット・オブジェクトを指定できます。
次に、複数の表を指定する場合のワイルドカードの使用例を示します。TARGET
句では、ワイルドカードの前にtab
接頭辞を挿入しないことに注意してください。ワイルドカードはsales.tabtab1
、sales.tabtab2
というように解決されるため、接頭辞の指定は無効になります。
MAP sales.tab*, TARGET sales.*;
MAP
句およびTARGET
句でオブジェクト名とワイルドカードを正しく指定するには、Oracle GoldenGateの管理for Windows and UNIXを参照してください。
オブジェクトについてフィルタリング、マッピングまたはその他の処理が不要な場合は、次のような単純な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);
CHARSET
character_set
CHARSET
は、TABLE
に有効です。
CHARSET
句では、サポートされている任意のキャラクタ・セットを指定します。詳細は、「CHARSET」を参照してください。
COLCHARSET
character_set
COLCHARSET
は、TABLE
に有効です。
COLCHARSET
句では、サポートされている任意のキャラクタ・セットを指定します。詳細は、「COLCHARSET」を参照してください。
COLMAP
(column_mapping)
COLMAP
は、TABLE
およびMAP
に有効です。
COLMAP
では、次のことを行います。
ソース列とターゲット列の名前が異なる場合に、個々のソース列をターゲット列にマップします。
ソース名とターゲット名が同一の場合に、デフォルトの列マッピングを指定します。
COLMAP
では、ソース列からターゲット列に対して列データを選択、変換および移動するための指示を提供します。
注意:
後続のMAP
文のすべての表に適用する列マッピングのグローバル・ルールを作成するには、COLMATCH
パラメータを使用します。
列マッピングの構成に関するその他の情報
COLMAPの使用の詳細は、Oracle GoldenGateの管理for Windows and UNIXを参照してください。
COLMAP
を使用するには、ソースとターゲットの列構造が同一か異なるのか、グローバル列マッピング・パラメータが十分かどうかなど、関連する構成の考慮事項を検討する必要があります。
構文
COLMAP ( [USEDEFAULTS, ] target_column = source_expression [BINARYINPUT] [, ...] )
USEDEFAULTS
明示的な列マッピングで指定されていない場合に、同一の名前を持つソース列とターゲット列を自動的にマップします。データ型は必要に応じて、ローカル・データ定義ファイルに基づいて自動的に変換されます。USEDEFAULTS
により、これらの列の名前が同じ場合は明示的な列マッピングの必要性がなくなるため、データのフィルタリングや変換は不要です。
COLMAP
句の明示的な列マッピングの前にUSEDEFAULTS
を指定します。COLMAP
のデフォルトの列マッピングの詳細は、Oracle GoldenGateの管理for Windows and UNIXを参照してください。
target_column = source_expression
明示的なソース-ターゲット列マッピングを定義します。
target_column
ターゲット列の名前を指定します。列名でサポートされる文字は、『Oracle GoldenGate Oracle GoldenGateの管理for Windows and UNIX』を参照してください。
source_expression
次のいずれかを指定できます。
ソース列名(例: ORD_DATE
)
数値定数(例: 123
)
一重引用符で囲まれた文字列定数(例: 'ABCD'
)
Oracle GoldenGate列変換ファンクションを使用する式(例: @STREXT (COL1, 1, 3)
)。詳細は、列変換ファンクションを参照してください。
BINARYINPUT
BINARYINPUT
は、ターゲット列がRAW
またはBLOB
などのバイナリ・データ型として定義されているが、ソース入力のデータの中にバイナリ・ゼロが含まれている場合に使用します。BINARYINPUT
は、単一の列として定義されている完全なEnscribeレコードをターゲット列にレプリケートするときに使用します。ソース入力はバイナリ入力として処理され、データ値の置換は抑止されます。
{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 [, ...])
注意:
データベースが更新操作で変更された列の値しか記録しない場合、COLS
で取得するために指定した列が使用できないことがあります。このような列値を使用するには、TABLE
文のFETCHCOLS
オプションを使用するか、列のサプリメンタル・ロギングを有効にします。
例
この例では、COLS
句は列1と列3のみを取得しますが、COLSEXCEPT
句は列1と列3を除くすべての列を取得します。
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は含まれません。
数値データ型
日付データ型
文字データ型
非スカラー・データ型の例には、Spatialデータ、ユーザー定義のデータ型、ラージ・オブジェクト(LOB)、XML、参照データ型、RAWなどがあります。CDRが考慮されている行には、競合が非スカラー・データ自体に存在しないかぎり、非スカラー・データを含めることができます。
競合解決ルーチンを指定するには、MAP
のRESOLVECONFLICT
オプションを使用します。COMPARECOLS
およびRESOLVECONFLICT
は、MAP
文に任意の順序で指定できます。
CDR機能の構成に関するその他の情報
競合の検出および解決の構成の詳細は、Oracle GoldenGateの管理for Windows and UNIXを参照してください。
構文
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
のほうが効率的な場合があります。キー列は除外しないでください。
COORDINATED
COORDINATED
は、MAP
に有効です。このオプションは、Replicatが調整モードである場合に有効です。
COORDINATED
オプションでは、同じMAP
文のオブジェクトで作成されたトランザクションをバリア・トランザクションとして処理させます。これにより、すべてのMAP
文ですべてのスレッドが同じトレイルの場所に同期します。同期される位置は、COORDINATED
キーワードを含むMAP
を満たすレコードを含むトランザクションの先頭です。トランザクションは、その後単一のスレッドによってアトミックに適用されます。このスレッドは、現在実行されているスレッドの中でスレッドIDが最も小さいスレッドであるか、USEDEDICATEDCOORDINATIONTHREAD
がパラメータ・ファイルで指定されている場合は、IDが0 (ゼロ)の専用スレッドのいずれかです。
COORDINATED
と組み合せて指定されたTHREAD
句およびTHREADRANGE
句は、指定したスレッドによってレコードが適用されないため、無視されます。COORDINATED
キーワードにより、一時的に並列処理が中断され、強制的に調整されたトランザクションが適用される前にターゲット表は一貫性のある状態になります。その後、並列実行が再開されます。
デフォルトでは、Replicatは主キーが更新されるトランザクション、DDLを実行するトランザクションおよび特定のEVENTACTIONS
アクションを調整します。COORDINATED
は、明示的な調整を指定します。
調整Replicatの詳細は、Oracle GoldenGateの管理for Windows and UNIXを参照してください。
構文
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構成に追加できます。テンプレートの定義は、定義の参照に使用します。
定義テンプレートの作成に関するその他の情報
テンプレートおよびDEFGENの詳細は、Oracle GoldenGateの管理for Windows and UNIXを参照してください。
構文
{DEF | TARGETDEF} template
template
DEFGENユーティリティによって生成される次の定義テンプレートのいずれかの名前。
DEF
では、DEFGENパラメータ・ファイルのTABLE
パラメータのDEF
オプションによって生成されるソース定義テンプレートを指定します。
TARGETDEF
では、DEFGENパラメータ・ファイルのTABLE
パラメータのTARGETDEF
オプションによって生成されるターゲット定義テンプレートを指定します。
テンプレートに含まれる定義は、同じTABLE
またはMAP
文に指定されている表の定義と同一である必要があります。
データベースに保存されるのと同じ方法で名前が指定される場合、テンプレート名の大/小文字は区別されます。このTABLE
またはMAP
文のDEF
またはTARGETDEF
句と、テンプレートを作成したDEFGENパラメータ・ファイルの両方で、テンプレート名が同じ方法で指定されていることを確認してください。
EXCEPTIONSONLY
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)」を参照してください。
例外処理の構成に関するその他の情報
例外MAP
文による例外処理の構成の詳細は、Oracle GoldenGateの管理for Windows and UNIXを参照してください。
構文
EXCEPTIONSONLY
EVENTACTIONS (
action
)
EVENTACTIONS
は、TABLE
およびMAP
に有効です。オプションには、どちらかのパラメータにしか適用されないものがあり、説明で示します。
EVENTACTIONS
では、特定のフィルタリング・ルールに適合する、イベント・レコードと呼ばれるトレイル内のレコードに基づいて、プロセスに定義済のアクションを実行させます。イベント・マーカー・システム(またはイベント・マーカー・インフラストラクチャ)と呼ばれるこのシステムを使用すると、データベース・イベントに基づいて処理をカスタマイズできます。たとえば、変換の実行または統計のレポートのために、プロセスを一時停止できます。イベント・マーカー機能は、データ変更のレプリケーションではサポートされていますが、初期ロードではサポートされていません。
ターゲット表へのデータ適用を必要としないアクションをトリガーするには、Replicat TABLE
パラメータとEVENTACTIONS
をサポートしているフィルタリング・オプションを使用できます。詳細は、Replicat用TABLEを参照してください。
注意:
EVENTACTIONS
は、ソース・データベースがTeradataで、Extractが最大パフォーマンス・モードで構成されている場合にはサポートされません。
目的の達成のために、複数のアクションを組み合せる必要がある場合があります。複数のアクションを組み合せると、まずEVENTACTIONS
文全体が解析された後、指定したオプションが優先度順に実行されます。次に、優先度の順序を示します。レコードの処理
の前にリストされているアクションは、レコードがトレイルに書き込まれる前またはターゲットに適用される前に発生します(プロセスによって異なります)。レコードの処理
の後にリストされているアクションは、レコードが処理された後に実行されます。
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
は、BEFORE
レコードを検出すると、ECHO
シェル・コマンドを発行して文字列'Triggered on BEFORE
'をイベント・ログに出力します。
TABLE qasource.test, & FILTER(@STRFIND('BEFORE', @GETENV('GGHEADER' , 'BEFOREAFTERINDICATOR')) > 0), & EVENTACTIONS ( shell ('echo --== Triggered on BEFORE ==-- '), LOG);
次に、イベント・アクションの結果を示します。
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);
Extractが最大保護モードで構成されているTeradata構成では、VAMソートExtractグループでEVENTACTIONS
のみを使用します。この構成のプライマリExtractではこれはサポートされていません。同時変更は、処理ストリームのこの時点ではトランザクション順でソートされないためです。詳細は、TeradataのためのOracle GoldenGateのインストールおよび構成を参照してください。
イベント・マーカー・システムの構成に関するその他の情報
EVENTACTIONSおよびイベント・マーカー・システムの使用の詳細は、Oracle GoldenGateの管理for Windows and UNIXを参照してください。
構文
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
で有効です。
現在の実行のアクティブ・コンテキストを保持し、GGSCIで発行される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
を引数とともに使用する場合、コマンドおよび引数の文字列全体をカッコで囲む必要があります。たとえば、次のようになります。
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
パラメータを使用して指定しているデフォルトのトレース・ファイルを使用することもできます。
EVENTACTIONS
TRACE
が使用されている様々な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
process
コマンドと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データ整合性モデルに従って、次のトランザクションの境界で発生します。
DDLレコードにEVENTACTIONS
を使用する場合、各DDLレコードは自律的であるため、DDLレコードはトランザクションの終了(境界)であることが保証されることに注意してください。そのため、CHECKPOINT AFTER
イベント・アクションはDDLレコードに対して暗黙的です。
CHECKPOINT AFTER
は、ABORT
を除く、すべてのEVENTACTIONS
オプションと組み合せることができます。
BOTH
BOTH
は、BEFORE
およびAFTER
の組合せです。ExtractまたはReplicatプロセスは、イベント・レコードの処理前および処理後にチェックポイントを書き込みます。
CHECKPOINT BOTH
は、ABORT
を除く、すべてのEVENTACTIONS
オプションと組み合せることができます。
CHECKPOINT
は、CP
に短縮できます。
次に、特定のレコードを無視するようにプロセスを構成する方法の例を示します。Extractは、name = abc
を持つトレイル・レコードを処理するときに、このレコードを無視します。
TABLE fin.cust, & WHERE (name = 'abc'), & EVENTACTIONS (ignore);
EVENTACTIONS
オプションの互換性および優先度ルールでは、DISCARD
はABORT
よりも優先されるため、この例では、イベント・レコードはプロセスが異常終了する前に破棄ファイルに書き込まれます。
MAP fin.cust, TARGET fin.cust2, & WHERE (name = 'abc'), & EVENTACTIONS (DISCARD, ABORT);
次の例では、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));
この例の結果として生じるシェル・コマンドは、次のようになります。
'Current timestamp: 212156002704718000 SQLEXEC result is test passed'
次に、プレースホルダ名がコマンド文字列のリテラル・テキストと競合するときに無効な結果が発生する場合の例を示します。この例では、$1
という名前のプレースホルダは列値と関連付けられ、SHELL
コマンドは、$1
を含むリテラル文字列をエコーします。
MAP src.tab1, TARGET targ.tab1 & EVENTACTIONS (SHELL ('echo Extra charge for $1 is $1', VAR $1 = COL1));
列値がgift wrap
とすると、次は予期しない結果です。
'Extra charge for gift wrap is gift wrap'
プレースホルダ変数を$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')));
リダイレクトされた出力ファイルには、次のような文字列が含まれることがあります(2つ目のタイムスタンプの末尾に値3
が付加されていることを通知します)。
'Timestamp: 212156002704718000 Price is 2121560027047180003'
目的の結果は、次のとおりです。
'Timestamp: 212156002704718000 Price is $13'
次に、トレースの異なる構成方法の例を示します。
MAP tab1, TARGET tab1 EVENTACTIONS (TRACE ./dirrpt/trace1.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
イベント・レコードを含むトランザクションの終了時に自動的に停止します。
次に、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
ファンクションに渡します。
ユーザー・イグジットに関するその他の情報
ユーザー・イグジットの構成方法は、Oracle GoldenGateの管理for Windows and UNIXを参照してください。
ユーザー・イグジットの構文の詳細は、ユーザー・イグジット・ファンクションを参照してください。
構文
EXITPARAM 'parameter string'
FETCHBEFOREFILTER
FETCHBEFOREFILTER
は、TABLE
に有効です。
FETCHBEFOREFILTER
では、FILTER
操作が実行される前に、FETCHCOLS
またはFETCHCOLSEXCEPT
で指定された列をフェッチします。フィルタ前にフェッチすることにより、フィルタに必要な値を使用できます。FETCHBEFOREFILTER
を指定しない場合、FETCHCOLS
またはFETCHCOLSEXCEPT
で指定したフェッチは、フィルタが実行されるまで実行されません。FETCHBEFOREFILTER
は、パラメータ・ファイルでFILTER
の前に指定します。
データ・ポンプExtractグループにパススルー・モードで処理される表には、このオプションを使用しないでください。
FETCHBEFOREFILTER
はSQL/MXデータベースでサポートされていません。
構文
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
は、NonStop SQL/MX以外の、Oracle GoldenGateにサポートされているすべてのデータベースに有効です。
Oracleデータベースの場合、Oracle GoldenGateは、OracleのFlashback Queryメカニズムを使用して、UNDO表領域から値をフェッチします。フラッシュバック問合せは、特定の時刻またはSCN時点の列の読取り一貫性イメージを提供します。Oracle GoldenGateによるFlashback Queryの使用方法の詳細は、Oracle DatabaseのためのOracle GoldenGateのインストールおよび構成を参照してください。
FETCHCOLS
またはFETCHCOLSEXCEPT
を使用するかわりに、必要な列のサプリメンタル・ロギングを有効にするほうが効率的なこともあります。
Sybaseの場合は、Oracle GoldenGateによってSybase暗号化データがサポートされていないため、暗号化列データはこれらのパラメータにサポートされていません。
フェッチの制御、およびフェッチ対象に指定した列が見つからない場合のレスポンスを指定するには、FETCHOPTIONS
パラメータを使用します。STATS EXTRACT
コマンドによって生成される統計表示にフェッチ結果を含めるには、STATOPTIONS
パラメータを使用します。
FETCHCOLS
またはFETCHCOLSEXCEPT
で指定した列値がトランザクション・ログに存在する場合、データベースのフェッチは実行されません。これにより、データベースのオーバーヘッドが軽減されます。
構文
{FETCHCOLS | FETCHCOLSEXCEPT} (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
では、指定した列を除き、トランザクション・ログに存在するすべての列をフェッチします。多数の列が含まれる表では、FETCHMODCOLS
を使用して各列を指定するよりも、FETCHMODCOLSEXCEPT
を使用するほうが効率的な場合があります。
FETCHMODCOLS
およびFETCHMODCOLSEXCEPT
は、NonStop SQL/MX以外の、Oracle GoldenGateにサポートされているすべてのデータベースに有効です。
次の使用方法のガイドラインに従ってください。
キー列にはFETCHMODCOLS
およびFETCHMODCOLSEXCEPT
を使用しないでください。
(Sybase)暗号化された列データにはFETCHMODCOLS
およびFETCHMODCOLSEXCEPT
を使用しないでください。Oracle GoldenGateでは、Sybase暗号化データはサポートされません。
構文
{FETCHMODCOLS | FETCHMODCOLSEXCEPT} (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
句には、次を含めることができます。
数字
数字を含む列
数字を返すファンクション
算術演算子:
+ (加算)
- (減算)
* (乗算)
/ (除算)
\ (余り)
比較演算子:
> (より大きい)
>=(以上)
< (より少ない)
<=(以下)
= (等しい)
<> (等しくない)
比較から導出した結果はゼロ(FALSE
を示す)またはゼロ以外(TRUE
を示す)になります。
カッコ(式の結果をグループ化)
結合演算子: AND
、OR
リテラルは一重引用符で囲みます。データベースに格納されるときのように、大/小文字を区別する列名を指定します。また、大/小文字を区別するのに引用符が必要になるデータベース(Oracleなど)の場合は列名を二重引用符で囲みます。
Oracle GoldenGateでは、マルチバイト・キャラクタ・セットを含む列に対して、FILTER
をサポートしています。
レコードのフィルタリングに関するその他の情報
FILTERおよびその他のフィルタリング・オプションの詳細は、Oracle GoldenGateの管理for Windows and UNIXを参照してください。
構文
FILTER ( [, ON INSERT | ON UPDATE| ON DELETE] [, IGNORE INSERT | IGNORE UPDATE | IGNORE DELETE] , filter_clause [, RAISEERROR error_number] )
filter_clause
次のように、式に基づいてレコードを選択します。
FILTER ((PRODUCT_PRICE*PRODUCT_AMOUNT) > 10000))
フィルタ句では、次の例のように、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データベースは変更された他の列のビフォア・イメージも記録します。サポートされている他のデータベースには、GETUPDATEBEFORES
パラメータを使用して、変更された他の列のビフォア値を含めることができます。
注意:
同じパラメータ・ファイルで両方が使用されている場合、GETUPDATEBEFORES
はGETBEFORECOLS
よりも優先されます。
このパラメータを使用するには、デフォルトでビフォア値を記録しないデータベースに対して、サプリメンタル・ロギングを有効化する必要があります。
同じパラメータ・ファイルで使用されている場合、GETBEFORECOLS
は、COMPRESSUPDATES
およびCOMPRESSDELETES
よりも優先されます。
このパラメータは、DB2を除くすべてのデータベースに有効です。Oracle GoldenGateでサポートされるすべてのプラットフォームのDB2には、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データベースでは、変更された列はデフォルトで常に競合検出に使用され、このパラメータによって明示的になります。
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
INSERTALLRECORDS
は、MAP
に有効です。
INSERTALLRECORDS
パラメータでは、ターゲットに対するすべてのマップ済操作をINSERT
操作に変換します。INSERTALLRECORDS
は、パラメータ・ファイルのルート・レベル、MAP
文内およびMAP
文のMAPEXCEPTION
句内で使用できます。
構文および使用方法は、INSERTALLRECORDSを参照してください。
INSERTAPPEND | NOINSERTAPPEND
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データベースでは、ADD TRANDATA
コマンドのCOLS
オプションを使用するとロギングを有効にできます。
ターゲット表では、KEYCOLS
で定義したキー列に一意索引を作成します。索引によって、Oracle GoldenGateが処理する必要があるターゲット行をより高速に特定できます。
データ・ポンプExtractグループにパススルー・モードで処理される表には、KEYCOLS
を使用しないでください。
構文
KEYCOLS (column [, ... ])
column
代替主キーとして使用する列を定義します。主キーまたは一意キーが存在する場合は、これらの列をKEYCOLS
指定に含める必要があります。複数の列を指定するには、次のようにカンマ区切りリストを作成します。
KEYCOLS (id, name)
次の列タイプはKEYCOLS
でサポートされていません。
KEYCOLS
でサポートされていないOracle列タイプ:
仮想列、UDT、ファンクションベース列、およびOracle GoldenGate構成から明示的に除外されているすべての列。
KEYCOLS
でサポートされていないSQL Server、DB2 LUW、DB2 z/OS、MySQL、SQL/MX、Teradata、TimesTenの列タイプ:
タイプスタンプまたは非マテリアライズド計算結果列を含む列、およびOracle GoldenGate構成から除外されているすべての列。SQL Serverの場合、Oracle GoldenGateは、主キーがないターゲット表の行のデータの長さの合計を、強制的に8000バイトより小さくします。
KEYCOLS
でサポートされていないSybase列タイプ:
計算結果列、ファンクションベース列、およびGoldenGate構成から明示的に除外されているすべての列。
例
TABLE hr.emp,KEYCOLS
(id
,first
,last
,birthdate
);
MAPEXCEPTION (
exceptions_mapping
)
MAPEXCEPTIONS
は、MAP
に有効です。
MAPEXCEPTION
は、エラーを処理するための例外MAP
文の一部として使用します。MAPEXCEPTION
は、REPERROR
パラメータによって例外としてフラグ付けされている失敗した操作を例外表にマップします。Replicatは、これらの操作の値をその他の情報とともに例外表に書き込みます。
MAPEXCEPTION
は、ソース-ターゲット表マッピングおよびその他の標準のMAP
オプションを含む同一のMAP
文内で使用できます。ソースおよびターゲット表名には、ワイルドカードを含めることができます。
MAPEXCEPTION
を使用する際は、同一のMAP
文内、またはReplicatパラメータ・ファイルのルートで、REPERROR
文とEXCEPTION
オプションを使用します。EXCEPTIONSONLYおよびREPERRORを参照してください。
例外処理に関するその他の情報
例外MAP
文による例外処理の構成の詳細は、Oracle GoldenGateの管理for Windows and UNIXを参照してください。
構文
MAPEXCEPTION (TARGET exceptions_table, INSERTALLRECORDS [, exception_MAP_options])
例
次に、例外マッピングでの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') ) );
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
を使用しないでください。
SQL/MXデータベースでBigNumデータ型に対してRESOLVECONFLICT
を使用しないでください。
競合解決の構成に関するその他の情報
ユースケースや例など、双方向レプリケーションおよび競合解決の構成の詳細は、Oracle GoldenGateの管理for Windows and UNIXを参照してください。
構文
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
この解決で処理する競合のタイプ。
DEFAULT |
resolution_name
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
の値がデータベース内の列値より小さい場合、適切なアクションが実行されます。
(INSERTROWEXISTS
競合)トレイル・レコードを適用しますが、一意性違反を回避するために挿入を更新に変更し、既存の値を上書きします。
(UPDATEROWEXISTS
競合)トレイル・レコードから更新を適用します。
USEMINEQ
トレイル・レコード内のresolution_column
の値がデータベース内の列値以下の場合、適切なアクションが実行されます。
(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つの列グループのみを使用でき、表のすべての列は、この列グループにある必要があります(デフォルトの列グループとみなされます)。
例
次の例の詳細は、Oracle GoldenGateの管理for Windows and UNIXを参照してください。
次に、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)), );
次に、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)));
次に、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
は、TABLE
に有効です。
SQLPREDICATE
では、Extractが初期ロードの準備で表からデータを選択するときに使用するSELECT
文に、通常のSQL WHERE
句を含めます。SQLPREDICATE
では、選択条件で返されるレコードがキー値によって順序付けされます。
SQLPREDICATE
は、WHERE
またはFILTER
オプションよりも高速な初期ロードの選択方法です。これはSQL文に直接影響し、Extractがフィルタリング前にすべてのレコードをフェッチする必要がありません。
Oracle表の場合、SQLPREDICATE
により、UNDOセグメントに保持されるデータ量が削減され、スナップショットが古すぎるために発生するエラーが低減します。非常に大きな表をロードするときに有益です。
SQLPREDICATE
句を使用することにより、複数の並列Extractプロセス間で大きな表の行を分割できます。この構成では、並列配信ロード処理も活用できます。
また、SQLPREDICATE
を使用すると、タイムスタンプやその他の基準に基づいてデータを選択し、抽出してターゲット表にロードする行をフィルタすることもできます。SQLPREDICATE
では、ORDER BY
句やその他のタイプの選択句も使用できます。
WHERE
句には、キーまたは索引の一部である列を必ず含めます。そうしないと、Extractは完全な表スキャンを実行するため、SELECT
文の効率が低下します。
SQLPREDICATE
は、Oracle、DB2 LUW、z/OS上のDB2、SQL ServerおよびTeradataデータベースに有効です。トランザクション変更を同期するように構成されているExtractグループには、SQLPREDICATE
を使用しないでください。表から直接レコードを選択するSELECT
文が必要であるため、初期ロードExtractにのみ適しています。
構文
TABLE source_table, SQLPREDICATE 'WHERE where_clause';
例
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
文でこれらのオプションをあわせて使用しないでください。
Replicatのモードの詳細は、Oracle DatabaseのためのOracle GoldenGateのインストールおよび構成の使用する適用方法の決定およびBATCHSQLを参照してください。
構文
THREAD (thread_ID)
thread_ID
このMAP
文を処理するスレッドの数値識別子。有効な値は、1からこのグループを作成したADD REPLICAT
コマンドのMAXTHREADS
オプションで指定した値までです。INFO REPLICAT
コマンドを使用すると、Replicatグループに許可されているスレッドの最大数を確認できます。スレッドIDを指定する場合、次の条件を満たす必要があります。
ReplicatグループのすべてのMAP
文で指定されているスレッドの合計数の上限は、MAXTHREADS
の値です。
Replicatグループ内で、単一のthread_ID
値はMAXTHREADS
の値以下である必要があります。たとえば、MAXTHREADS
が25の場合、thread_ID
を26以上にはできません。
MAXTHREADS
を使用しない場合、デフォルトのスレッド最大数は25です。
例
次に、THREAD
オプションを使用する例をいくつか示します。
この例では、スレッド1で表cust
を処理します。
MAP scott.cust, TARGET scott.cust, THREAD (1);
この例では、スレッド1でscott
スキーマ内のすべての表を処理します。
MAP scott.*, TARGET scott.*, THREAD (1);
この例では、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で実行されます。
Replicatのモードの詳細は、Oracle DatabaseのためのOracle GoldenGateのインストールおよび構成の使用する適用方法の決定およびBATCHSQLを参照してください。
構文
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用ターゲット・データベースのキャラクタ・セットである必要があります。
ターゲット表がEBCDICではない場合、z/OSシステム上のEBCDICとしてエンコードされているソース表に、このオプションを使用しないでください。
トークンの使用方法の詳細は、Oracle GoldenGateの管理for Windows and UNIXを参照してください。
構文
TOKENS (token_name = token_data [, ...])
token_name
トークンに付ける名前。任意の数の有効な文字を使用できます(大/小文字区別なし)。マルチバイトの名前はサポートされていません。
token_data
2000バイトまでの有効な文字列。データは、一重引用符(NOUSEANSISQLQUOTES
を使用している場合は二重引用符)で囲まれたリテラル、またはOracle GoldenGate列変換ファンクションの結果のいずれかを指定できます。詳細は、USEANSISQLQUOTES | NOUSEANSISQLQUOTESを参照してください。
例
次に、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'));
TRIMSPACES | 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
列に適用するときに切り捨てるかどうかを制御します。デフォルトはNOTRIMVARSPACES
です。
構文および使用方法は、TRIMVARSPACES | NOTRIMVARSPACESを参照してください。
WHERE (
clause
)
WHERE
は、TABLE
およびMAP
に有効です。
WHERE
では、条件文に基づいてレコードを選択します。WHERE
では次のものはサポートされていません。
マルチバイト・キャラクタ・セットまたはローカル・オペレーティング・システムのキャラクタ・セットと互換性のないキャラクタ・セットを含む列
主キー更新操作の一部として条件文の主キー列のビフォア・イメージの評価
リテラルは一重引用符で囲みます。データベースに格納されるときのように、大/小文字を区別する列名を指定します。また、大/小文字を区別するのに引用符が必要になるデータベース(Oracleなど)の場合は列名を二重引用符で囲みます。
レコードのフィルタリングに関するその他の情報
WHEREおよびその他のフィルタリング・オプションの詳細は、Oracle GoldenGateの管理for Windows and UNIXを参照してください。
構文
WHERE (clause)
clause
次の例のように、条件に基づいてレコードを選択します。
WHERE (branch = 'NY')
表3-34に、許可されているWHERE
演算子を示します。
表3-34 許可されているWHERE演算子
演算子 | 例 |
---|---|
列名 |
PRODUCT_AMT "Product_Amt" |
数値 |
-123, 5500.123 |
一重引用符で囲まれたリテラル文字列 |
'AUTO', 'Ca' |
列テスト |
|
比較演算子 |
=, <>, >, <, >=, <= |
結合演算子 |
AND, OR |
グループ化用カッコ |
複数の要素を論理的にグループ化するには、開きおよび閉じカッコを使用します。 |
例
次のWHERE
の例では、AMOUNT
列が10,000を超えるとすべてのレコードを返し、AMOUNT
が存在しないとレコードは破棄されません。
WHERE (amount = @PRESENT AND amount > 10000)