13 処理エラーへの対処

この章では、エラーを処理するためのOracle GoldenGateプロセスの構成方法について説明します。

Oracle GoldenGateでは、処理エラーは監視ツールおよびレポート・ツールによって複数の方法でレポートされます。これらのツールの詳細は、Oracle GoldenGate処理の監視を参照してください。

内容は次のとおりです。

13.1 Oracle GoldenGateのエラー処理の概要

Oracle GoldenGateでは、次の構成要素にエラー処理オプションが提供されます。

  • Extract

  • Replicat

  • TCP/IP

13.2 Extractエラーの処理

DML操作が抽出される場合のExtractエラーを処理する特定のパラメータはありませんが、Extractには、予測される問題を防止するために使用できる多くのパラメータがあります。これらのパラメータによって、DML操作の処理中に発生する可能性のある異常状態を処理します(たとえば、フェッチする行を特定できない場合の処理や、トランザクション・ログを使用できない場合の処理など)。次に、これらのパラメータの一部をリストします。

  • FETCHOPTIONS

  • WARNLONGTRANS

  • DBOPTIONS

  • TRANLOGOPTIONS

DDL操作に関連する抽出エラーを処理するには、DDLERRORパラメータを使用します。

パラメータ・リストの詳細は、『Oracle GoldenGateリファレンス』を参照してください。

13.3 DML操作中のReplicatエラーの処理

いずれかのDML文の処理中に発生したエラーに対するReplicatのレスポンス方法を制御するには、Replicatのパラメータ・ファイルでREPERRORパラメータを使用します。REPERRORは、グローバル・パラメータとして、またはMAP文の一部として使用できます。ほとんどのエラーはDEFAULTオプションおよびDEFAULT2オプションを使用してデフォルトの方法(処理の中止など)で処理し、他のエラーは特定の方法で処理できます。

REPERRORによる各種レスポンスは次のオプションで構成されます。

  • ABEND: トランザクションをロールバックして処理を停止します。

  • DISCARD: 破棄ファイルにエラーを記録して処理を継続します。

  • EXCEPTION: 例外処理のためにエラーを送信します。詳細は、「例外としてのエラーの処理」を参照してください。

  • IGNORE: エラーを無視して処理を継続します。

  • RETRYOP [MAXRETRIES n]: 操作を再試行します(オプションで最大試行回数を指定できます)。

  • TRANSABORT [, MAXRETRIES n] [, DELAY[C]SECS n]: トランザクションを中断して最初の配置に戻します(オプションで最大試行回数とその間隔を指定できます)。

  • RESET: 以前のすべてのREPERRORルールを削除し、デフォルトのABENDに戻します。

  • TRANSDISCARD: レプリケートされたソース・トランザクション内の操作(コミットなど)が、エラー指定にリストされているReplicatエラーの原因となっている場合に、そのトランザクション全体を破棄します。このオプションは、ターゲットで整合性制約チェックが無効になっている場合に便利です。

  • TRANSEXCEPTION: レプリケートされたソース・トランザクション内の操作(コミットなど)が、エラー指定にリストされているReplicatエラーの原因となっている場合に、そのトランザクションのすべてのレコードに対し、例外マッピング文に従って例外マッピングを実行します。

ほとんどのオプションは、エラーを生成した個々のレコードに対して機能し、Replicatは、トランザクション内で成功した他の操作を処理します。ただし、TRANSDISCARDTRANSEXCEPTIONは例外で、これらのオプションは、トランザクション内のいずれかのレコードがエラーを生成した場合に、そのトランザクション内のすべてのレコードに影響します。(ABENDオプションもトランザクション全体を対象としていますが、エラー処理は適用しません。)

REPERRORの構文と使用方法は、『Oracle GoldenGateリファレンス』を参照してください。

13.3.1 例外としてのエラーの処理

REPERRORのアクションがEXCEPTIONまたはTRANSEXCEPTIONである場合、エラーを生成する操作の値を例外表にマップしたり、オプションでエラーの解決に利用可能なその他のエラー情報をマップしたりすることができます。「例外表について」を参照してください。

例外を例外表にマップするには、MAPパラメータの次のオプションのいずれかを使用します。

  • MAPでのEXCEPTIONSONLY

  • MAPでのMAPEXCEPTION

13.3.1.1 EXCEPTIONSONLYの使用

EXCEPTIONSONLYは、ソース表とターゲット表の1つのペアがMAP文で明示的に指定され、1対1でマップされている場合(つまり、ワイルドカードが使用されていない場合)に有効です。EXCEPTIONSONLYを使用するには、ターゲットでEXCEPTIONSONLYを使用するソース表ごとに、MAP文を2つ作成します。

  • 1番目の通常のMAP文によってソース表を実際のターゲット表にマップします。

  • 2番目の例外MAP文によってソース表を(ターゲット表ではなく)例外表にマップします。例外MAP文は、ソース表でエラーが発生するとただちに実行され、行の値を例外表に送信します。

    MAP文を例外MAP文として指定するには、INSERTALLRECORDSオプションとEXCEPTIONSONLYオプションを使用します。例外MAP文は、同じソース表が含まれる通常のMAP文の直後に配置する必要があります。ソース表と例外表の列が同一でない場合、または例外表の追加の列に追加情報(列変換関数またはSQLEXECで取得した情報など)をマップする場合は、例外MAP文でCOLMAP句を使用します。

これらのパラメータの詳細は、『Oracle GoldenGateリファレンス』を参照してください。

  • ソース表のggs.equip_accountをそのターゲット表のequip_account2にマップする通常のMAP文。

  • 同じソース表を例外表のggs.equip_account_exceptionにマップする例外MAP文。

この場合、表自体に含まれる同じ列に加え、次の4つの追加列が作成されます。

DML_DATE
OPTYPE
DBERRNUM
DBERRMSG

DML_DATE列にデータを移入するため、@DATENOW列変換関数を使用して失敗した操作の日時を取得し、結果を列にマップします。他の追加列にデータを移入するため、@GETENV関数を使用して操作タイプ、データベース・エラー番号およびデータベース・エラー・メッセージを戻します。

例外MAP文のEXCEPTIONSONLYオプションによって、ソース表に対する操作が失敗した後にのみ文が実行されます。これによって、すべての操作が例外表に記録されることを防止します。

INSERTALLRECORDSパラメータによって、指定したソース表に対するすべての失敗した操作は、その操作タイプにかかわらず挿入として例外表に記録されます。

ノート:

例外表に対して主キー制約または一意索引制約は指定できません。このシナリオでは一意性違反が発生する可能性があり、発生した場合はエラーが生成されます。

例13-1 EXCEPTIONSONLY

この例では、REPERROREXCEPTIONSONLYおよび例外MAP文と組み合せて使用する方法がわかります。この例は、REPERRORに関連するパラメータのみを示していますが、Replicatには、エラー処理に関連しない他のパラメータも必要です。

REPERROR (DEFAULT, EXCEPTION)
MAP ggs.equip_account, TARGET ggs.equip_account2,
COLMAP (USEDEFAULTS);
MAP ggs.equip_account, TARGET ggs.equip_account_exception,
EXCEPTIONSONLY,
INSERTALLRECORDS
COLMAP (USEDEFAULTS,
DML_DATE = @DATENOW (),
OPTYPE = @GETENV ('LASTERR', 'OPTYPE'),
DBERRNUM = @GETENV ('LASTERR', 'DBERRNUM'),
DBERRMSG = @GETENV ('LASTERR', 'DBERRMSG'));

この例では、REPERRORパラメータはDEFAULTエラー処理用に設定されています。EXCEPTIONオプションによって、Replicatプロセスは失敗した操作を例外として扱い、処理を継続します。

13.3.1.2 MAPEXCEPTIONの使用

MAPEXCEPTIONは、MAP文でソース表とターゲット表の名前にワイルドカードが使用されている場合に有効です。MAPEXCEPTION句は、通常のMAP文(ソース表をターゲット表にマップする文と同じ)に配置します。Replicatは、エラーを生成するすべての操作を、ワイルドカード指定されたすべての表から同じ例外表にマップします。したがって、例外表には、ワイルドカード指定されたすべての表におけるすべての列のスーパーセットが含まれています。

ワイルドカード構成では列を個別にマップできないため、COLMAP句をUSEDEFAULTSオプションとともに使用してワイルドカード指定された表の列マッピングを処理し(またはCOLMATCHパラメータを適宜使用し)、明示的な列マッピングを使用して追加情報(列変換関数またはSQLEXECで取得した情報など)をマップします。

MAPEXCEPTIONを使用する場合は、INSERTALLRECORDSパラメータをMAPEXCEPTION句に含めます。INSERTALLRECORDSは、すべての操作タイプがINSERT操作として例外表に適用されるようにします。これは、例外の正確なレコードを維持し、例外表で整合性エラーが発生しないようにするために必要です。

これらのパラメータの詳細は、『Oracle GoldenGateリファレンス』を参照してください。

例13-2 MAPEXCEPTION

次に、例外マッピングでのMAPEXCEPTIONの使用例を示します。MAPおよびTARGET句には、ワイルドカードのソースおよびターゲット表名が含まれています。名前がTRXで始まるすべての表を処理するときに発生する例外が、指定されたマッピングを使用してfin.trxexceptions表に取得されます。

MAP src.trx*, TARGET trg.*,
MAPEXCEPTION (TARGET fin.trxexceptions,
INSERTALLRECORDS,
COLMAP (USEDEFAULTS,
ACCT_NO = ACCT_NO,
OPTYPE = @GETENV ('LASTERR', 'OPTYPE'),
DBERR = @GETENV ('LASTERR', 'DBERRNUM'),
DBERRMSG = @GETENV ('LASTERR', 'DBERRMSG')
)
);
13.3.1.3 例外表について

エラーに関する情報を取得して、アプリケーションのトラブルシューティングやエラー処理のためのアプリケーション構成などに役立てるには、例外表を使用します。例外表には少なくとも、失敗した操作から行イメージ全体を受信できるだけの列が含まれている必要があります。追加の列を定義して、列変換関数、SQLEXEC、その他の外部手段によって取得したその他の情報を含めることができます。

例外表にマップしたすべての列の値を証跡レコードに確実に含めるには、Extractパラメータ・ファイルでLOGALLSUPCOLSパラメータを使用するか、次のパラメータを使用します。

  • NOCOMPRESSDELETESパラメータを使用することで、行のすべての列がDELETE操作の証跡に書き込まれるようにします。

  • GETUPDATEBEFORESパラメータを使用することで、Extractによって行の変更前イメージが取得され、証跡に書き込まれるようにします。

13.4 DDL操作中のReplicatエラーの処理

ターゲットでのDDL操作中に発生したエラーに対するReplicatのレスポンス方法を制御するには、Replicatのパラメータ・ファイルでDDLERRORパラメータを使用します。詳細は、『Oracle GoldenGateリファレンス』を参照してください。

13.5 TCP/IPエラーの処理

TCP/IPエラーに対するレスポンス指示を提供するには、TCPERRSファイルを使用します。このファイルは、Oracle GoldenGateディレクトリにあります。

表13-1 TCPERRSの列

説明

Error

レスポンスを定義するTCP/IPエラーを指定します。

Response

定義されたエラーの後にOracle GoldenGateで再接続を試行するかどうかを制御します。有効な値は、RETRYまたはABENDです。

Delay

再接続を試行するまでにOracle GoldenGateで待機する時間を制御します。

Max Retries

強制終了するまでにOracle GoldenGateで再接続を試行する回数を制御します。

レスポンスがTCPERRSファイルに明示的に定義されていない場合、Oracle GoldenGateは異常終了によってTCP/IPエラーにレスポンスします。

例13-3 TCPERRSファイル

# TCP/IP error handling parameters
# Default error response is abend
#
# Error          Response   Delay(csecs)  Max Retries

ECONNABORTED     RETRY      1000          10
ECONNREFUSED     RETRY      1000          12
ECONNRESET       RETRY      500           10
ENETDOWN         RETRY      3000          50
ENETRESET        RETRY      1000          10
ENOBUFS          RETRY      100           60
ENOTCONN         RETRY      100           10
EPIPE            RETRY      500           10
ESHUTDOWN        RETRY      1000          10
ETIMEDOUT        RETRY      1000          10
NODYNPORTS       RETRY      100           10

TCPERRSファイルには、基本的なエラーに対するデフォルトのレスポンスが含まれます。指示を変更するか、新規エラー用の指示を追加するには、テキスト・エディタでファイルを開き、表13-1に示されている列の値を変更します。

13.6 更新されたエラー・メッセージの管理

Oracle GoldenGateプロセスによって生成されるエラー、情報および警告メッセージは、Oracle GoldenGateのインストール・ディレクトリにあるggmessage.datというデータ・ファイルに格納されます。このファイルのバージョンは、プロセスの起動時にチェックされ、プロセスを動作させるためにはプロセスのバージョンと同一である必要があります。

13.7 Oracle GoldenGateエラーの解決

個別のトラブルシューティングの問題に関する情報は、My Oracle Support (http://support.oracle.com)でKnowledge Baseを検索してください。