13 処理エラーへの対処
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は、トランザクション内で成功した他の操作を処理します。ただし、TRANSDISCARD
とTRANSEXCEPTION
は例外で、これらのオプションは、トランザクション内のいずれかのレコードがエラーを生成した場合に、そのトランザクション内のすべてのレコードに影響します。(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
この例では、REPERROR
をEXCEPTIONSONLY
および例外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で再接続を試行するかどうかを制御します。有効な値は、 |
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を検索してください。
親トピック: 処理エラーへの対処