| 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))。詳細は、列変換ファンクションを参照してください。
BINARYINPUTBINARYINPUTは、ターゲット列が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
templateDEFGENユーティリティによって生成される次の定義テンプレートのいずれかの名前。
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文全体が解析された後、指定したオプションが優先度順に実行されます。次に、優先度の順序を示します。レコードの処理の前にリストされているアクションは、レコードがトレイルに書き込まれる前またはターゲットに適用される前に発生します(プロセスによって異なります)。レコードの処理の後にリストされているアクションは、レコードが処理された後に実行されます。
TRACELOGCHECKPOINT BEFOREDISCARDSHELLROLLOVERIGNOREREPORTSUSPENDABORTCHECKPOINT AFTERFORCESTOPSTOP標準の方法でイベント・レコード自体の処理を防ぐには、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]] [, ...] )
STOPExtract用TABLEおよびReplicat用MAPで有効です。
指定のイベント・レコードが検出されたときにプロセスを正常に停止させます。プロセスは、イベント・トランザクション内の他の操作が完了するまで待機してから停止します。Replicatによってグループ化されたトランザクション、またはバッチ・トランザクションの場合、プロセスは、現在のトランザクション・グループが適用されてから正常に停止します。イベント・レコードがトランザクションの終了点であることも示している場合、プロセスはイベント・レコードの次のレコードで再開します。
プロセスは、トランザクションがまだオープンしているために即座に停止できない場合、メッセージを記録します。ただし、長時間オープンしているトランザクション内でイベント・レコードを検出しても、トランザクションがコミットされていないことを通知する警告メッセージは出しません。したがって、STOPイベントが発生しても、プロセスが長時間実行中になる場合があります。
STOPは、ABORTおよびFORCESTOPを除く、他のEVENTACTIONSオプションと組み合せることができます。
SUSPENDExtract用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と組み合せることはできませんが、他のすべてのオプションと組み合せることができます。
ABORTExtract用TABLEおよびReplicat用MAPで有効です。
オープンしているトランザクションの有無にかかわらず、指定のイベント・レコードが検出されたときに即座にプロセスを終了させます。イベント・レコードは処理されません。ログに致命的なエラーが書き込まれ、DISCARDも指定している場合には破棄ファイルにイベント・レコードが書き込まれます。プロセスの起動時にリカバリが行われます。
ABORTは、CHECKPOINT BEFORE、DISCARD、SHELLおよびREPORTとのみ組み合せることができます。
FORCESTOPExtract用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操作は自律型であるため、レコードを無視することは、トランザクション全体を無視することと同じです。
DISCARDExtract用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は不要です。
REPORTExtract用TABLEおよびReplicat用MAPで有効です。
指定のイベント・レコードが検出されたときにプロセスにレポート・ファイルを生成させます。GGSCIでSENDコマンドとREPORTオプションを使用する場合と同じ結果になります。
(DISCARD、IGNOREまたはABORTを使用している場合を除き) REPORTメッセージは、イベント・レコードが処理された後に発生するので、レポート・データにはイベント・レコードが含まれます。
REPORTは、他のすべてのEVENTACTIONSオプションと組み合せることができます。
ROLLOVERExtract用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およびユーザー・イグジットで実行されるファンクションをマッピングするための同期点を提供します。
BEFOREExtractプロセス用のBEFOREでは、Extractがトレイルにイベント・レコードを書き込む前にチェックポイントを書き込みます。Replicatプロセス用の BEFOREでは、レコードに含まれているSQL操作をReplicatがターゲットに適用する前にチェックポイントを書き込みます。
BEFOREを使用する場合は、イベント・レコードをトランザクションの最初のレコードにする必要があります。イベント・レコードが最初のレコードでない場合、プロセスは異常終了します。BEFOREを使用することで、イベント・レコードから始まるトランザクション以前のすべてのトランザクションを確実にコミットできます。
DDLレコードにEVENTACTIONSを使用する場合、各DDLレコードは自律的であるため、DDLレコードはトランザクションの開始であることが保証されることに注意してください。そのため、CHECKPOINT BEFOREイベント・アクションはDDLレコードに対して暗黙的です。
CHECKPOINT BEFOREは、すべてのEVENTACTIONSオプションと組み合せることができます。
AFTERExtract用のAFTERでは、Extractがトレイルにイベント・レコードを書き込んだ後にチェックポイントを書き込みます。Replicat用の AFTERでは、レコードに含まれているSQL操作をReplicatがターゲットに適用した後にチェックポイントを書き込みます。
AFTERは、チェックポイント・リクエストに注意としてフラグを立て、プロセスが次の可能な機会にのみチェックポイントを発行することを示します。たとえば、イベント・レコードがマルチレコード・トランザクションの1つである場合、チェックポイントは、Oracle GoldenGateデータ整合性モデルに従って、次のトランザクションの境界で発生します。
DDLレコードにEVENTACTIONSを使用する場合、各DDLレコードは自律的であるため、DDLレコードはトランザクションの終了(境界)であることが保証されることに注意してください。そのため、CHECKPOINT AFTERイベント・アクションはDDLレコードに対して暗黙的です。
CHECKPOINT AFTERは、ABORTを除く、すべてのEVENTACTIONSオプションと組み合せることができます。
BOTHBOTHは、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_nameUSEMAX (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_data2000バイトまでの有効な文字列。データは、一重引用符(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)