Oracle® Fusion Middleware Oracle GoldenGateリファレンスfor Windows and UNIX 12c (12.2.0.1) E70112-04 |
|
前 |
次 |
適用対象
Replicat
説明
REPERROR
パラメータでは、Replicatのエラーへの対応方法を制御します。Replicatのエラーへのデフォルトのレスポンスは、異常終了です。
1つのREPERROR
文を使用して大半のエラーをデフォルトの方法で処理しながら、1つまたは複数の別のREPERROR
文を使用して、特定のエラーを別の方法で処理できます。たとえば、重複レコード・エラーは無視し、他のすべてのケースでは処理を異常終了させることができます。
REPERROR
を(パラメータ・ファイルのルートで)グローバルに使用すると、その後のすべてのMAP
文に適用できます。または、MAP
文内で使用すると、その文に指定された表に適用できます。MAP
文でREPERROR
を使用すると、調整Replicatのスレッドごとに固有の方法でエラーを処理できるようになります。
レコード・レベルのエラー処理の使用
TRANSDISCARD
およびTRANSEXCEPTION
を除くすべてのREPERROR
オプションは、個別のレコードの個別のSQL操作に対するレスポンスに、エラー処理アクションを適用します。また、規定どおりに、MAP
文およびパラメータ・ファイルのその他のパラメータで構成されているのと同じトランザクション内のエラーのないレコードを処理します。
トランザクション・レベルのエラー処理の使用
TRANSDISCARD
、TRANSEXCEPTION
およびABEND
オプションは、トランザクション全体にエラー処理アクションを適用します。トランザクション内の個別のレコードまたはコミット操作で、トリガー・エラーが発生することがあります。(コミット・エラーには、関連付けられている特定のレコードがありません。)これらのオプションは、次の目的で使用できます。
エラーが関連付けられている場合に、ソース・トランザクション全体がターゲットにレプリケートされるのを回避する。
延期された制約チェックがターゲット上で有効になっている場合、コミット・エラーに対応する。
TRANSDISCARD
とTRANSEXCEPTION
は、相互に排他的です。
トランザクション・レベルのオプションでの他のパラメータの影響
TRANSDISCARD
およびTRANSEXCEPTION
では、ソース・トランザクションの境界が適用されます。ただし、BATCHSQL
、GROUPTRANSOPS
またはMAXTRANSOPS
がパラメータ・ファイルに存在すると、トランザクションの境界を変更するため、エラー処理ロジックや結果に影響を与える可能性があります。
BATCHSQLおよびGROUPTRANSOPSの影響
BATCHSQL
またはGROUPTRANSOPS
(デフォルト)は、パフォーマンス向上のため、トランザクションの順序を維持しながら、異なるトランザクションのSQL操作を、より大きいトランザクションにグループ化します。これらのパラメータが有効なときにエラーが発生すると、Replicatは、まず別の処理モードを入力してエラーの解決を試行します(各パラメータのドキュメントを参照してください)。エラーが解決しない場合、TRANSDISCARD
またはTRANSEXCEPTION
が有効になり、Replicatは次のようにソース処理モードに戻ります。
グループ化または配列化されたトランザクションをロールバックします。
ソース・トランザクションと同じトランザクション境界を使用して、問題のあるトランザクションのSQL操作を、一度に1つリプレイします。
破棄ロジック(TRANSDISCARD
)または例外マッピング(TRANSEXCEPTION
)を実行します。(詳細は、各オプションの説明を参照してください。)
TRANSDISCARD
エラー処理が完了したら、BATCHSQL
またはGROUPTRANSOPS
モードを再開します。
MAXTRANSOPSの影響
TRANSDISCARD
およびTRANSEXCEPTION
のトランザクション・レベルのエラー処理の整合性は、MAXTRANSOPS
パラメータ設定の悪影響を受けることがあります。MAXTRANSOPS
によって、Replicatは、ターゲットでのトランザクションの適用時に、非常に大きなレプリケートされたソース・トランザクションを小さいトランザクションに分割します。
TRANSDISCARD
およびTRANSEXCEPTION
ロジックによって、Replicatは、最後に成功したコミット後の最初のレコードまでロールバックします。これは、問題のあるトランザクションの、実際の最初である場合とそうでない場合があります。そのトランザクションが分割されているか、およびトランザクションの一部が以前にコミットしたトランザクションにあるかどうかによって異なります。その場合、TRANSDISCARD
またはTRANSEXCEPTION
アクションはソース上に発行されましたが、ターゲットからロールバックされた部分にのみ発行されたため、Replicatはこれらのアクションをトランザクション全体には適用できません。
MAXTRANSOPS
を使用する場合、TRANSDISCARD
およびTRANSEXCEPTION
が処理する可能性がある最大のトランザクションより大きい値に設定されていることを確認してください。これにより、トランザクションがターゲット上で小さいトランザクションに分割されていないことを確認できます。
統計でのトランザクション・レベルのオプションの影響
STATS REPLICAT
など、GGSCIの情報コマンドの出力では、TRANSDISCARD
またはTRANSEXCEPTION
ロジックで処理されたトランザクションの合計レコード数が表示されます。この数は、次のことを表します。
Replicatは、MAP
文のFILTER
またはWHERE
句によってOracle GoldenGate処理から除外されたすべてのレコードを含む、トランザクションのすべてのレコードを破棄ファイルに書き込みます。
トランザクション内のソース表に複数のターゲットがある場合、破棄トランザクションには、各レコードの複数のコピーが各ターゲットに1つ含まれます。
トランザクションを破棄する場合、Replicatは、例外マッピング文(MAP
文のEXCEPTIONSONLY
またはMAPEXCEPTION
で指定)を無視します。
破棄処理(TRANSDISCARD
)または例外マッピング(TRANSEXCEPTION
)が原因のエラーが発生すると、Replicatは異常終了します。
エラー処理に関するその他の情報
エラー処理の構成方法の詳細は、Oracle GoldenGateの管理for Windows and UNIXを参照してください。
MAP
パラメータの詳細は、TABLE | MAPを参照してください。
デフォルト
TRANSABORT
(デッドロックの場合)、ABEND
(その他すべての場合)
構文
REPERROR { ( {DEFAULT | DEFAULT2 | SQL_error | user_defined_error}, {ABEND | DISCARD | EXCEPTION | IGNORE | RETRYOP [MAXRETRIES n] | TRANSABORT [, MAXRETRIES] [, DELAYSECS n | DELAYCSECS n] | TRANSDISCARD | TRANSEXCEPTION } ) | RESET }
エラー指定のオプション
DEFAULT
明示的なREPERROR
文が指定されているエラーを除くすべてのエラーに対するグローバルなレスポンスを設定します。
DEFAULT2
DEFAULT
のレスポンスがEXCEPTION
に設定されている場合に、バックアップのデフォルト・アクションを提供します。DEFAULT2
は、エラーの発生が予想されるMAP
文に例外MAP
文が指定されていないときに使用します。
SQL_error
SQLエラー番号。ここには、TRANSDISCARD
およびTRANSEXCEPTION
を使用している場合、レコード・レベルのエラーまたはコミット・レベルのエラーを指定できます。
user_defined_error
MAP
文のFILTER
句のRAISEERROR
オプションで指定されているユーザー定義エラー。
エラー・レスポンス・オプション
ABEND
トランザクションをロールバックし、処理を異常終了します。ABEND
はデフォルトです。
DISCARD
問題のある操作を破棄ファイルに記録しますが、このトランザクションおよび後続のトランザクションの処理を継続します。
EXCEPTION
エラーの原因となる操作を例外として処理しますが、トランザクション内のエラーではない操作は正常に処理します。このオプションを例外MAP
文と組み合せて使用するか、MAP
のMAPEXCEPTION
オプションと一緒に使用します。たとえば、失敗した更新文の列を"紛失した更新"表にマップできます。パラメータ・ファイルでは、エラーの発生が予想されるMAP
文の後ろに例外MAP
文を指定します。
EXCEPTION
は、個別のレコードでの個別のSQL操作にのみ例外処理を適用します。例外処理をトランザクション全体に適用するには、TRANSEXCEPTION
オプションを使用します。
注意:
競合の検出および解決(CDR)機能がアクティブなとき、影響を受ける表への例外MAP
文が存在する場合、CDRは、エラーを引き起こすすべての操作を自動的に例外として処理します。この場合、REPERROR
とEXCEPTION
は必要ありませんが、CDRが解決できない競合を処理するその他のオプションとともに、またはCDRに処理させない競合に対して、REPERROR
を使用する必要があります。
IGNORE
エラーを無視します。
RETRYOP [MAXRETRIES
n]
問題のある操作を再試行します。MAXRETRIES
オプションでは、再試行回数を制御します。たとえば、表がエクステント不足の場合、RETRYOP
とMAXRETRIES
によって、トランザクションの失敗を防ぐためにエクステントを追加する時間を確保できます。指定したMAXRETRIES
回数の後、Replicatは異常終了します。
TRANSABORT [, MAXRETRIES
n
] [, DELAYSECS
n
| DELAYCSECS
n
]
トランザクションを中止し、トランザクションの開始位置に再配置します。このシーケンスは、レコードの処理が成功するか、MAXRETRIES
が終了するまで継続されます。MAXRETRIES
が設定されていない場合、TRANSABORT
アクションは何度も繰り返されます。
いずれかのDELAY
オプションでは、再試行を遅延させます。DELAYSECS
n
は、遅延を秒単位で設定し、デフォルトは60秒です。DELAYCSECS
n
は、遅延をセンチ秒単位で設定します。
TRANSABORT
オプションは、タイムアウトやデッドロックをサポートしているデータベースで、このような状況に対処するときに活用できます。
TRANSDISCARD
トランザクション内の任意の操作(コミット操作など)が原因で、REPERROR
エラー指定されているReplicatエラーが発生する場合、ソース・トランザクション全体を破棄します。Replicatはトランザクションを中止し、レコードに関してエラーが発生した場合は、そのレコードを破棄ファイルに書き込みます。Replicatはトランザクションをリプレイし、コミット・レコードを含むすべてのレコードを破棄ファイルに書き込みます。Replicatは、破棄処理が原因のエラーの発生時に異常終了します。
破棄レコードがすでにターゲット・レコードにデータ・マッピングされている場合、Replicatはターゲットのフォーマットで破棄ファイルに書き込み、それ以外の場合はソースのフォーマットで書き込みます。リプレイされたトランザクション自体は、常にソースのフォーマットで書き込まれます。
TRANSDISCARD
は、コミット・エラーに加え、レコード・レベルのエラーもサポートします。
詳細情報は、このトピックの最初に記載されています。
TRANSEXCEPTION
トランザクションの任意のレコードで、REPERROR
で指定されたエラーが発生した場合、例外MAP
文のMAPEXCEPTION
またはEXCEPTIONSONLY
句で定義したように、対応する例外マッピング指定に従って、トランザクションのすべてのレコードに例外マッピングを実行します。レコードに対応する例外マッピング指定がない場合、または例外表への書込み時にエラーがある場合、Replicatはエラー・メッセージとともに異常終了します。
エラーが発生したときにTRANSEXCEPTION
が使用されていると、Replicatはトランザクションを中止します。レコードに関してエラーが発生した場合は、破棄ファイルにそのレコードを書き込みます。Replicatはトランザクションをリプレイし、ソース・レコードを調べて例外マッピング指定を探し、それを実行します。
TRANSEXCEPTION
は、コミット・エラーに加え、レコード・レベルのエラーもサポートします。同じトランザクション内のエラーのない操作に影響せずに、レコード・レベルで(個別のSQL操作に対して)エラーを処理するには、MAP
文のEXCEPTION
オプションを使用します。
RESET
REPERROR RESET
文では、前のREPERROR
パラメータに指定されたエラー処理ルールを削除し、後続のすべてのMAP
文にデフォルトのエラー処理を適用します。
REPERRORのグローバルでの使用例
次の例は、グローバルなエラー処理ルールを設定するためにパラメータ・ファイルのルートで使用するREPERROR
です。いずれかの表(1つまたは複数)についてMAP
文のREPERROR
を使用すると、これらのルールの一部またはすべてをオーバーライドできます。REPERRORのグローバルおよびMAP文での使用例を参照してください。
次に、大半のエラーでは処理を停止し、重複レコード・エラーは無視する方法の例を示します。
REPERROR (DEFAULT, ABEND) REPERROR (-1, IGNORE)
次に、account表のエラーを処理するために作成された例外MAP文を呼び出す例を示します。product表には例外MAP
文が定義されていないため、この表のエラーによってReplicatは異常終了します。
REPERROR (DEFAULT, EXCEPTION) REPERROR (DEFAULT2, ABEND) MAP sales.product, TARGET sales.product; MAP sales.account, TARGET sales.account; INSERTALLRECORDS MAP sales.account, TARGET sales.account_exception, EXCEPTIONSONLY, COLMAP (account_no = account_no, optype = @GETENV ('lasterr', 'optype'), dberr = @GETENV ('lasterr', 'dberrnum'), dberrmsg = @GETENV ('lasterr', 'dberrmsg'));
次に、最初のMAP
文にエラー・ルールを適用した後、2つ目の文ではデフォルトのABEND
に戻す例を示します。
REPERROR (-1, IGNORE) MAP sales.product, TARGET sales.product; REPERROR RESET MAP sales.account, TARGET sales.account;
次に、トランザクション内のレコードでの操作によってエラー1403が生成される場合、問題のあるレコードを破棄し、トランザクション全体をリプレイする例を示します。他のエラー・タイプではReplicatは異常終了します。
REPERROR DEFAULT ABEND REPERROR 1403 TRANSDISCARD
次に、tgtexception
という名前の例外表に書き込む例外マッピング指定を探すために、問題のあるレコードを破棄し、トランザクション全体をリプレイする例を示します。他のエラーによって、Replicatは問題のあるレコードを破棄し(該当する場合)、異常終了します。
REPERROR DEFAULT ABEND REPERROR 1403 TRANSEXCEPTION MAP src, TARGET tgt, & MAPEXCEPTION (TARGET tgtexception, INSERTALLRECORDS, COLMAP (…) );
REPERRORのグローバルおよびMAP文での使用例
次に、グローバルなREPERROR
文とともに、MAP
文でREPERROR
を使用する様々な例を示します。
REPLICAT group_name REPERROR (error1 , response1) MAP src1, TARGET tgt1, REPERROR (error1, response2); MAP src2, TARGET tgt2, REPERROR (error2, response3);
前述の例では、最初のMAP
文でerror1
が発生した場合、優先される文が指定されているため、アクションはresponse1
ではなくresponse2
になります。ただし、2番目のMAP
文でerror1
が発生した場合には、グローバル・レスポンスのresponse1
がレスポンスになります。error2
に対するレスポンスは、MAP
固有のresponse3
になります。
REPLICAT group_name REPERROR (error1 , response1) MAP src1, TARGET tgt1, REPERROR (error2, response2), REPERROR (error3, response3);
前述の例では、すべてのREPERROR
文が異なるエラーに対応するため(MAP
固有の優先なし)、src1
からsrc2
にレプリケートするときに、すべてのエラーおよびアクション(1から3)が適用されます。
REPLICAT group_name REPERROR (error1 , response1) MAP src1, TARGET tgt1, REPERROR (error1, response2); MAP src2, TARGET tgt2, REPERROR (error2, response3); REPERROR (error1 , response4) MAP src2, TARGET tgt2, REPERROR (error3, response3);
前述の例では、最初のMAP
文でerror1
が発生した場合、アクションはresponse2
になります。2番目の文ではアクションはresponse1
(グローバル・レスポンス)になり、3番目の文ではresponse4
になります(2番目のREPERROR
文が適用されるため)。グローバルREPERROR
文は、パラメータ・ファイル内で別のREPERROR
文で新しいルールが開始されるまで、後続のすべてのMAP
文に適用されます。
REPERROR DEFAULT ABEND REPERROR 1403 TRANSDISCARD. MAP src, TARGET tgt, REPERROR(600 TRANSDISCARD);
前述の例では、ソース表src
をターゲット表tgt
に適用中にエラー600が発生した場合、トランザクション全体が破棄ファイルに書き込まれます。エラー1403が発生した場合も、グローバルREPERROR
指定に基づいて、同じアクションが行われます。その他のエラーが発生すると、プロセスは問題のあるレコードのみを破棄し、異常終了します。