この章では、エラーを処理するためのOracle GoldenGateプロセスの構成方法について説明します。
Oracle GoldenGateでは、処理エラーは監視ツールおよびレポート・ツールによって複数の方法でレポートされます。これらのツールの詳細は、第18章「Oracle GoldenGate処理の監視」を参照してください。
この章の内容は次のとおりです。
Oracle GoldenGateでは、次の構成要素にエラー処理オプションが提供されます。
Extract
Replicat
TCP/IP
DML操作が抽出される場合のExtractエラーを処理する特定のパラメータはありませんが、Extractには、予測される問題を防止するために使用できる多くのパラメータがあります。これらのパラメータによって、DML操作の処理中に発生する可能性のある異常状態を処理します(たとえば、フェッチする行を特定できない場合の処理や、トランザクション・ログを使用できない場合の処理など)。次に、これらのパラメータの一部をリストします。
FETCHOPTIONS
WARNLONGTRANS
DBOPTIONS
TRANLOGOPTIONS
DDL操作に関連する抽出エラーを処理するには、DDLERROR
パラメータを使用します。
パラメータ・リストの詳細は、Oracle GoldenGateリファレンスfor Windows and UNIXを参照してください。
いずれかのDML文の処理中に発生したエラーに対するReplicatのレスポンス方法を制御するには、Replicatのパラメータ・ファイルでREPERROR
パラメータを使用します。REPERROR
は、グローバル・パラメータとして、またはMAP
文の一部として使用できます。ほとんどのエラーはDEFAULT
オプションおよびDEFAULT2
オプションを使用してデフォルトの方法(処理の中止など)で処理し、他のエラーは特定の方法で処理できます。
REPERROR
による各種レスポンスは次のオプションで構成されます。
EXCEPTION
: 例外処理のためにエラーを送信します。15.3.1項「例外としてのエラーの処理」を参照してください。
RETRYOP [MAXRETRIES
n
]
: 操作を再試行します(オプションで最大試行回数を指定できます)。
TRANSABORT [, MAXRETRIES
n
] [, DELAY[C]SECS
n
]
: トランザクションを中断して最初の配置に戻します(オプションで最大試行回数とその間隔を指定できます)。
TRANSDISCARD
: レプリケートされたソース・トランザクション内の操作(コミットなど)が、エラー指定にリストされているReplicatエラーの原因となっている場合に、そのトランザクション全体を破棄します。このオプションは、ターゲットで整合性制約チェックが無効になっている場合に便利です。
TRANSEXCEPTION
: レプリケートされたソース・トランザクション内の操作(コミットなど)が、エラー指定にリストされているReplicatエラーの原因となっている場合に、そのトランザクションのすべてのレコードに対し、例外マッピング文に従って例外マッピングを実行します。
ほとんどのオプションは、エラーを生成した個々のレコードに対して機能し、Replicatは、トランザクション内で成功した他の操作を処理します。ただし、TRANSDISCARD
とTRANSEXCEPTION
は例外で、これらのオプションは、トランザクション内のいずれかのレコードがエラーを生成した場合に、そのトランザクション内のすべてのレコードに影響します。(ABEND
オプションもトランザクション全体を対象としていますが、エラー処理は適用しません。)
REPERRORの構文と使用方法の詳細は、Oracle GoldenGateリファレンスfor Windows and UNIXを参照してください。
REPERROR
のアクションがEXCEPTION
またはTRANSEXCEPTION
である場合、エラーを生成する操作の値を例外表にマップしたり、オプションでエラーの解決に利用可能なその他のエラー情報をマップしたりすることができます。15.3.1.3項「例外表について」を参照してください。
例外を例外表にマップするには、MAP
パラメータの次のオプションのいずれかを使用します。
MAP
でのEXCEPTIONSONLY
MAP
でのMAPEXCEPTION
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リファレンスfor Windows and UNIXを参照してください。
例15-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プロセスは例外を失敗した操作として扱い、処理を継続します。
次の2つのMAP
文があります。
ソース表のggs.equip_account
をそのターゲット表のequip_account2
にマップする通常のMAP
文。
同じソース表を例外表のggs.equip_account_exception
にマップする例外MAP
文。
この場合、表自体に含まれる同じ列に加え、次の4つの追加列が作成されます。
DML_DATE OPTYPE DBERRNUM DBERRMSG
DML_DATE
列にデータを移入するため、@DATENOW
列変換関数を使用して失敗した操作の日時を取得し、結果を列にマップします。他の追加列にデータを移入するため、@GETENV
関数を使用して操作タイプ、データベース・エラー番号およびデータベース・エラー・メッセージを戻します。
例外MAP
文のEXCEPTIONSONLY
オプションによって、ソース表に対する操作が失敗した後にのみ文が実行されます。これによって、すべての操作が例外表に記録されることを防止します。
INSERTALLRECORDS
パラメータによって、指定したソース表に対するすべての失敗した操作は、その操作タイプにかかわらず挿入として例外表に記録されます。
注意: 例外表に対して主キー制約または一意索引制約は指定できません。このシナリオでは一意性違反が発生する可能性があり、発生した場合はエラーが生成されます。 |
MAPEXCEPTION
は、MAP
文でソース表とターゲット表の名前にワイルドカードが使用されている場合に有効です。MAPEXCEPTION
句は、通常のMAP
文(ソース表をターゲット表にマップする文と同じ)に配置します。Replicatは、エラーを生成するすべての操作を、ワイルドカード指定されたすべての表から同じ例外表にマップします。したがって、例外表には、ワイルドカード指定されたすべての表におけるすべての列のスーパーセットが含まれています。
ワイルドカード構成では列を個別にマップできないため、COLMAP
句をUSEDEFAULTS
オプションとともに使用してワイルドカード指定された表の列マッピングを処理し(またはCOLMATCH
パラメータを適宜使用し)、明示的な列マッピングを使用して追加情報(列変換関数またはSQLEXEC
で取得した情報など)をマップします。
MAPEXCEPTION
を使用する場合は、INSERTALLRECORDS
パラメータをMAPEXCEPTION
句に含めます。INSERTALLRECORDS
は、すべての操作タイプがINSERT
操作として例外表に適用されるようにします。これは、例外の正確なレコードを維持し、例外表で整合性エラーが発生しないようにするために必要です。
これらのパラメータの詳細は、Oracle GoldenGateリファレンスfor Windows and UNIXを参照してください。
例15-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') ) );
エラーに関する情報を取得して、アプリケーションのトラブルシューティングやエラー処理のためのアプリケーション構成などに役立てるには、例外表を使用します。例外表には少なくとも、失敗した操作から行イメージ全体を受信できるだけの列が含まれている必要があります。追加の列を定義して、列変換関数、SQLEXEC
、その他の外部手段によって取得したその他の情報を含めることができます。
例外表にマップしたすべての列の値を証跡レコードに確実に含めるには、Extractパラメータ・ファイルでLOGALLSUPCOLS
パラメータを使用するか、次のパラメータを使用します。
NOCOMPRESSDELETES
パラメータを使用することで、行のすべての列がDELETE
操作の証跡に書き込まれるようにします。
GETUPDATEBEFORES
パラメータを使用することで、Extractによって行の変更前イメージが取得され、証跡に書き込まれるようにします。
これらのパラメータの詳細は、Oracle GoldenGateリファレンスfor Windows and UNIXを参照してください。
ターゲットでのDDL操作中に発生したエラーに対するReplicatのレスポンス方法を制御するには、Replicatのパラメータ・ファイルでDDLERROR
パラメータを使用します。詳細は、『Oracle GoldenGate for Windows and UNIXリファレンス』を参照してください。
TCP/IPエラーに対するレスポンス指示を提供するには、TCPERRS
ファイルを使用します。このファイルは、Oracle GoldenGateディレクトリにあります。
例15-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
ファイルには、基本的なエラーに対するデフォルトのレスポンスが含まれます。指示を変更するか、新規エラー用の指示を追加するには、テキスト・エディタでファイルを開き、表15-1に示されている列の値を変更します。
表15-1 TCPERRSの列
レスポンスがTCPERRS
ファイルに明示的に定義されていない場合、Oracle GoldenGateは異常終了によってTCP/IPエラーにレスポンスします。
Oracle GoldenGateプロセスによって生成されるエラー、情報および警告メッセージは、Oracle GoldenGateのインストール・ディレクトリにあるggmessage.dat
というデータ・ファイルに格納されます。このファイルのバージョンは、プロセスの起動時にチェックされ、プロセスを動作させるためにはプロセスのバージョンと同一である必要があります。
個別のトラブルシューティングの問題に関する情報は、My Oracle Support (http://support.oracle.com
)でKnowledge Baseを検索してください。