4 ユーザー・イグジット・ファンクション

この章では、Oracle GoldenGateユーザー・イグジット・ファンクションとその構文について説明し、次のトピックを含みます。

Oracle GoldenGateユーザー・イグジットの使用の詳細は、『Oracle GoldenGateの管理』を参照してください。

トピック:

4.1 EXIT_CALL_TYPEの使用

EXIT_CALL_TYPEでは、処理中にいつExtractまたはReplicatプロセス(コール元)がユーザー・イグジット・ルーチンをコールするかを指定します。プロセスは、次のコールを使用してルーチンをコールできます。

表4-1 ユーザー・イグジット・コール

コール・タイプ 処理ポイント

EXIT_CALL_ABORT_TRANS

RECOVERYOPTIONSモードがAPPEND (デフォルト)の場合に有効です。データ・ポンプまたはReplicatがトレイルからRESTART ABENDレコードを読み取る際にコールされ、異常終了したライター・プロセスによってそこに配置されます。(ライター・プロセスは、データ・ポンプにより読み取られたローカル・トレイルに書き込むプライマリExtract、またはReplicatにより読み取られたリモート・トレイルに書き込むデータ・ポンプになります。)このコール・タイプによって、ユーザー・イグジットは、ライター・プロセスの停止時に未完了のままのトランザクションを中止または破棄し、以前に完了したトランザクションの開始時の処理をリカバリおよび再開できます。

EXIT_CALL_BEGIN_TRANS

次のいずれかの直前にコールされます。

  • データ・ポンプにより読み取られるトランザクションのBEGINレコード

  • Replicatトランザクションの開始

EXIT_CALL_CHECKPOINT

ExtractまたはReplicatチェックポイントが書き込まれた直後にコールされます。

EXIT_CALL_DISCARD_ASCII_RECORD

Extractの処理中に、ASCII入力レコードが破棄ファイルに書き込まれる前にコールされます。関連するASCIIバッファは、コールバック・ルーチンを使用してユーザー・イグジットによって取得および操作できます。

このコール・タイプは、Replicatプロセスでは使用できません。

EXIT_CALL_DISCARD_RECORD

Replicatの処理中に、レコードが破棄ファイルに書き込まれる前にコールされます。レコードは、Oracle GoldenGate変更レコードの値がターゲット表の現在のバージョンと異なっているときなど、複数の理由で破棄されます。関連する破棄バッファは、コールバック・ルーチンを使用してユーザー・イグジットによって取得および操作できます。

このコール・タイプは、Extractプロセスでは使用できません。

EXIT_CALL_END_TRANS

次のいずれかの直後にコールされます。

  • データ・ポンプにより読み取られるトランザクションのENDレコード

  • Replicatトランザクションの最後のレコード

EXIT_CALL_FATAL_ERROR

ExtractまたはReplicatの処理中に致命的なエラーが発生後、Oracle GoldenGateが停止する直前にコールされます。

EXIT_CALL_PROCESS_MARKER

Replicatの処理中に、NonStopサーバーのマーカーがトレイルから読み取られ、マーカー履歴ファイルに書き込まれる前にコールされます。

EXIT_CALL_PROCESS_RECORD

  • Extractの場合は、レコード・バッファがトレイルに出力される前にコールされます。

  • Replicatの場合は、レプリケートされた操作が実行される直前にコールされます。

このコールは、ほとんどのユーザー・イグジット処理の基盤です。EXIT_CALL_PROCESS_RECORDがコールされると、コールバック・ルーチンを通じて、ユーザー・イグジットでレコード・バッファとその他のレコード情報が利用可能になります。ソースとターゲットのマッピングがパラメータ・ファイルで指定されている場合、マッピングはEXIT_CALL_PROCESS_RECORDイベントが発生する前に実行されます。ユーザー・イグジットは、レコード内の他のすべての操作を、マップ、変換、削除、または実行できます。ユーザー・イグジットは、コール元がレコードを処理または無視する必要があるかを示すステータスを返すことができます。

EXIT_CALL_START

処理開始時にコールされます。ユーザー・イグジットは、ファイルのオープンや変数の初期化などの初期化作業を実行できます。

EXIT_CALL_STOP

プロセスが正常に停止または異常終了する前にコールされます。ユーザー・イグジットは、ファイルのクローズや合計の出力などの完了作業を実行できます。

EXIT_CALL_RESULT

各イグジット・コールの完了時に、コール元にレスポンス方法を指示するためにユーザー・イグジット・ルーチンによって設定されます。

4.2 SET_SESSION_CHARSET

適用対象

ExtractおよびReplicat

説明

SET_SESSION_CHARSETファンクションでは、ユーザー・イグジットの文字セットを設定します。ユーザー・イグジット・セッションの文字セットは、次のような(ただしこれらに限定されません)メタデータなど、ユーザー・イグジットとコール元プロセス(Extract、データ・ポンプ、Replicat)間で使用される文字ベースのコールバック構造メンバーのエンコーディングを示します。

  • データベースの名前およびロケール

  • 表名および列名

  • DDLテキスト

  • エラー・メッセージ

  • CHARおよびNCHARなどの文字型の列

  • 文字列形式で表される日時および数値の列

このファンクションは、ユーザー・イグジットが制御しているときはいつでも呼び出すことができます。ユーザー・イグジットがセッションの文字セットを設定すると、すぐに有効になり、すべての文字値は指定したセットへの変換を開始します。このファンクションを呼び出すには、コール・タイプEXIT_CALL_STARTを使用することをお薦めします。

ノート:

SET_SESSION_CHARSETはスレッドセーフではありません。

SET_SESSION_CHARSETが呼び出されない場合、セッションは、ucharset.hファイルのULIB_CS_DEFAULTの事前定義された列挙型の値であるオペレーティング・システムのデフォルトの文字セットに設定されます。セッションの文字セットがULIB_CS_DEFAULTからのデフォルトである場合、ユーザー・イグジットとコール元プロセス間で交換される文字型の値に対して、Oracle GoldenGateでは変換は実行されません。さらに、データベースのオブジェクト名のメタデータは、オペレーティング・システムのデフォルトの文字セットであるとみなされます。デフォルトは適切ではない場合があることに注意してください。

ユーザー・イグジットがロードされ、SET_SESSION_CHARSETが呼び出されると、ユーザー・イグジットの文字セットはレポート・ファイルに出力されます。セッションの文字セットがULIB_CS_DEFAULTである場合、列データの文字セットの変換が実行されないことを示すメッセージが表示されます。

グローバリゼーション・サポートの詳細は、Oracle GoldenGateの管理for Windows and UNIXを参照してください。

構文

#include usrdecs.h
short result_code;
session_def session_charset_def;
ERCALLBACK (SET_SESSION_CHARSET, &session_charset_def, &result_code);

バッファ

typedef struct
{
ULibCharSet  session_charset;
} session_def;

入力

session_charset

セッションの文字セットの有効な値は、ヘッダー・ファイルucharset.hで定義されます。

出力

なし

返される値

EXIT_FN_RET_OK