この章では、Oracle GoldenGateユーザー・イグジット・ファンクションとその構文について説明し、次のトピックを含みます。
Oracle GoldenGateの使用の詳細は、Oracle GoldenGateの管理for Windows and UNIXを参照してください。
Cプログラミング・コードでユーザー・イグジットを記述します。CUSEREXITパラメータを使用して、Oracle GoldenGateプロセス内の定義済イグジット・ポイントで、Windows DLLまたはUNIX共有オブジェクトから、ユーザー・イグジットをコールします。ユーザー・イグジット・ルーチンは、ExtractおよびReplicatプロセスから様々なイベントおよび情報を受け入れ、リクエストどおりに情報を処理し、コール元(このルーチンをコールしたOracle GoldenGateプロセス)にレスポンスと情報を返す必要があります。CUSEREXITパラメータの情報および構文は、「CUSEREXIT」を参照してください。
| パラメータ | 説明 |
|---|---|
EXIT_CALL_TYPE |
処理中にいつルーチンをコールするかを指定します。 |
EXIT_CALL_RESULT |
ルーチンにレスポンスを提供します。 |
EXIT_PARAMS |
ルーチンに情報を提供します。 |
ERCALLBACK |
コールバック・ルーチンを実装します。コールバック・ルーチンは、レコードおよびOracle GoldenGateコンテキスト情報を取得して、データ・レコードの内容を変更します。 |
EXIT_CALL_TYPEでは、処理中にいつExtractまたはReplicatプロセス(コール元)がユーザー・イグジット・ルーチンをコールするかを指定します。プロセスは、次のコールを使用してルーチンをコールできます。
表6-1 ユーザー・イグジット・コール
| コール・タイプ | 処理ポイント |
|---|---|
|
|
|
|
|
次のいずれかの直前にコールされます。
|
|
|
ExtractまたはReplicatチェックポイントが書き込まれた直後にコールされます。 |
|
|
Extractの処理中に、ASCII入力レコードが破棄ファイルに書き込まれる前にコールされます。関連するASCIIバッファは、コールバック・ルーチンを使用してユーザー・イグジットによって取得および操作できます。 このコール・タイプは、Replicatプロセスでは使用できません。 |
|
|
Replicatの処理中に、レコードが破棄ファイルに書き込まれる前にコールされます。レコードは、Oracle GoldenGate変更レコードの値がターゲット表の現在のバージョンと異なっているときなど、複数の理由で破棄されます。関連する破棄バッファは、コールバック・ルーチンを使用してユーザー・イグジットによって取得および操作できます。 このコール・タイプは、Extractプロセスでは使用できません。 |
|
|
次のいずれかの直後にコールされます。
|
|
|
ExtractまたはReplicatの処理中に致命的なエラーが発生後、Oracle GoldenGateが停止する直前にコールされます。 |
|
|
Replicatの処理中に、NonStopサーバーのマーカーがトレイルから読み取られ、マーカー履歴ファイルに書き込まれる前にコールされます。 |
|
|
このコールは、ほとんどのユーザー・イグジット処理の基盤です。 ユーザー・イグジットが |
|
|
処理開始時にコールされます。ユーザー・イグジットは、ファイルのオープンや変数の初期化などの初期化作業を実行できます。 |
|
|
プロセスが正常に停止または異常終了する前にコールされます。ユーザー・イグジットは、ファイルのクローズや合計の出力などの完了作業を実行できます。 |
|
|
各イグジット・コールの完了時に、コール元にレスポンス方法を指示するためにユーザー・イグジット・ルーチンによって設定されます。 |
EXIT_CALL_RESULTでは、ルーチンにレスポンスを提供します。
表6-2 ユーザー・イグジット・レスポンス
| コール結果 | 説明 |
|---|---|
|
|
コール元に即座に停止するように指示します。 |
|
|
レコードのそれ以上の処理を拒否します。 |
|
|
ルーチンがイベントに対して何も実行しない場合は、
... かつ |
|
|
ExtractまたはReplicatに、レコードをスキップし、レポート・ファイルに出力される統計の該当する表および操作タイプを更新するように指示します。 |
|
|
コール元に処理を正常に停止するように指示します。 |
EXIT_PARAMSでは、ユーザー・イグジット・ルーチンにプログラム名やユーザー定義パラメータなどの情報を提供します。単一のデータ・レコードを複数回処理できます。
表6-3 ユーザー・イグジット入力
| イグジット・パラメータ | 説明 |
|---|---|
|
|
コール元プロセスの完全パスおよび名前を指定します( |
|
|
|
|
|
イグジットからのリターンに対して設定します。データベース・レコードに対して、ExtractまたはReplicatプロセスがレコードをもう一度処理するかどうかを決定します。これにより、EnscribeをSQLに変換する(データ正規化)ときの一般的なファンクションで、ユーザー・イグジットはExtractによって処理される各レコードに対して多くのレコードを出力できます。同一のレコードをもう一度リクエストするには、 |
ERCALLBACKでは、コールバック・ルーチンを実行します。ユーザー・コールバック・ルーチンは、ExtractまたはReplicatプロセスからコンテキスト情報を取得し、コール・タイプが次のいずれかのときにレコード自体を含むコンテキスト値を設定します。
EXIT_CALL_PROCESS_RECORD
EXIT_CALL_DISCARD_RECORD
EXIT_CALL_DISCARD_ASCII_RECORD
構文
ERCALLBACK (function_code, buffer, result_code );
function_codeコールバック・ルーチンによって実行されるファンクション。ユーザー・コールバック・ルーチンは、コールバック・ルーチンに渡されるファンクション・コードに基づいて異なる動作をします。一部のファンクションは、ExtractおよびReplicat両方が使用できますが、各プロセスでのファンクションの有効性は、コールバック・ルーチン中にそのファンクションに対して設定される入力パラメータに依存します。使用可能なファンクション・コードの詳細は、6.7項「ファンクション・コード」を参照してください。
buffer指定するファンクション・コードに関連付けられている事前定義済構造体を含むバッファへのvoidポインタ。
result_codeコールバック・ルーチンによって実行されるファンクションのステータス。コールバック・ルーチンによって返される結果コードは、コールバック・ファンクションが成功したかどうかを示します。結果コードは、表6-4の値の1つになります。
表6-4 結果コード
| コード | 説明 |
|---|---|
|
|
列データを取得または設定中に無効なデータを検出しました。 |
|
|
列 |
|
|
列の数値タイプに、無効な数値が含まれています。 |
|
|
圧縮更新レコードで列が見つかりませんでした(変更された値のみを記録するデータベースによる更新)。 |
|
|
指定された環境値がレコードに見つかりませんでした。 |
|
|
表または列名が割り当てられたバッファに収まらなかったため、メタデータを取得できませんでした。 |
|
|
レコードをフェッチできませんでした。エラー・メッセージを表示して理由を確認してください。 |
|
|
DDLレコードの処理中に内部エラーが発生しました。レコードが不完全の可能性があります。 |
|
|
無効なコールバック・ファンクション・コードがコールバック・ルーチンに渡されました。 |
|
|
ファンクション・コールで、存在しない列が参照されました。 |
|
|
ルーチンは、その目的ではOracle GoldenGateにサポートされていないデータ型を操作しようとしています。 |
|
|
コールバック・ファンクションが不適切なときにコールされました。 |
|
|
無効なパラメータがコールバック・ファンクションに渡されました。 |
|
|
ソース・データベース・インスタンスが見つかりませんでした。 |
|
|
ターゲット・データベース・インスタンスが見つかりませんでした。 |
|
|
このファンクションは、このプロセスに対してサポートされていません。 |
|
|
コールバック・ファンクションは成功しました。 |
|
|
キャラクタ・セット変換ルーチンに |
|
|
無効な表名が指定されました。 |
|
|
指定されたトークンがレコードに見つかりませんでした。 |
ファンクション・コードは、コールバック・ルーチンの出力を決定します。コールバック・ルーチンは、データ・バッファの内容が指定されたファンクション・コードの構造体と一致するとみなします。コールバック・ルーチン・ファンクション・コードとそのデータ・バッファは、次の項で説明します。次に、使用可能なファンクションの概要を示します。
表6-5 Oracle GoldenGateファンクション・コードの概要
| ファンクション・コード | 説明 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
処理中のレコードと関連付けられている表または他のオブジェクトの2つまたは3つの部分からなる完全修飾名を戻します。 |
|
|
処理中のレコードと関連付けられている表または他のオブジェクトの修飾されていない名前を戻します。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|