3.3.10 反映時エラーのスキップ

反映処理中にエラーが発生しても,そのエラーを無視して反映処理を続行できます。これによって,反映不要なエラーが発生した場合,エラー対策する必要なく反映処理を続行できます。

反映時エラーのスキップには,次の2種類があります。

種別説明
反映抑止によるスキップ
(指定したエラーのスキップ)
エラーが発生してから,エラー情報(更新情報識別子)を基に,スキップするエラーを指定します。
SQLエラーも含めて,すべてのエラーに適用できます。
SQLエラーのスキップあらかじめスキップするSQLエラーをSQLCODEで指定しておきます。
一部のSQLエラーにだけ適用できます。適用できるSQLエラーについては,「5.9 反映環境定義」のskip_sqlcodeオペランドを参照してください。
<この項の構成>
(1) 反映抑止によるスキップ
(2) SQLエラーのスキップ

(1) 反映抑止によるスキップ

反映処理中に発生したエラーのメッセージのinformationに出力される更新情報識別子を指定することで,そのエラーを無視して反映処理を続行できます。更新情報識別子の指定は,反映抑止対象リストファイルで行います。

メッセージの詳細情報については,「10.1.3(4) 詳細情報の説明」を参照してください。

注※
更新情報識別子は,hdsrefinfmコマンドを実行することで確認することもできます。詳細については,「7. コマンドの文法」のhdsrefinfmコマンドを参照してください。
(a) 前提条件

反映抑止によるスキップを使用できる抽出側システムのDatareplicatorのバージョンを次の表に示します。

表3-1 反映抑止によるスキップを使用できるDatareplicator

抽出製品バージョン
HiRDB Datareplicator04-00-/O以降
HiRDB Datareplicator Version 5.005-03-/D以降
HiRDB Datareplicator Version 606-01-/A以降
HiRDB Datareplicator Version 7以降07-00以降
XDM/DS(TMS/4V抽出)07-01以降
XDM/DS(TMS/4V以外の抽出)08-03以降
VOS3 Database Datareplicator01-00以降
次に示すシステム構成の場合,表3-1のバージョンでも反映抑止によるスキップを使用できません。
  • 抽出側システムにHiRDB Datareplicator Extensionを使用している。
  • 反映側Datareplicatorへの入力として,hdssamqinコマンドを使用している。
(b) 定義方法

反映抑止は,反映抑止対象リストファイルで指定します。反映抑止対象リストファイルについての詳細を次の表に示します。

表3-2 反映抑止対象リストファイルについての詳細

項目説明
ファイル名HDSPATH/reflect_pass_list_データ連動識別子
(例)HDSPATH/reflect_pass_list_a1
ファイル種別UNIX通常ファイル,又はWindowsファイル
属性hdsstartコマンド実行ユーザに対して,read権限があります。
注※
  • 連動識別子は,すべて小文字で指定する必要があります。
  • 連動識別子が00~09の場合,0~9を指定してください。
    0a~0fの場合は,a~fを指定してください。

 

反映抑止対象リストファイルでの指定形式を次に示します。

指定形式
制御コード = Trn〔:Pos〕〔,Grp〕 #コメント
  :
制御コード
運用に合わせて,次から制御コードを指定します。
制御コード説明
SKIP_TYPE_ONLY通常の反映抑止の場合に指定します。
指定した更新情報識別子を抑止します。
SKIP_TYPE_UNTILデータ連動回復の場合に指定します。
Trn〔:Pos〕〔,Grp〕
エラーメッセージのinformationに出力される更新情報識別子を指定します。Trn,Pos,及びGrpの間にスペースやタブは記述できません。
指定説明
Trn更新情報が格納されたトランザクションのIDです。
メッセージのinformation中のExtract Idの「:」までに16進数(24けた)として表示されます。
PosTrnが示すトランザクション内での更新情報の格納順位です。
メッセージのinformation中のExtract Idの「:」以降に10進数で(1~4294967295​)表示されます。
Grp反映定義のgroup文で指定した反映グループ名称です。
Grpによって指定される抑止対象は,反映処理方式によって異なります。反映処理方式ごとのGrpの抑止対象の違いを表3-3に示します。

表3-3 反映処理方式ごとのGrpの抑止対象の違い

反映処理方式Grpの抑止対象
Grp指定ありGrp指定なし
表単位反映方式Grpで指定した反映グループ内のTrn:Posを抑止します。すべての反映グループ内のTrn:Posを抑止します。
トランザクション単位反映方式すべての反映グループ内のTrn:Posを抑止します(Grpの指定を無視します)。すべての反映グループ内のTrn:Posを抑止します。
規則
  • 指定は1行につき一つです。
  • 一つの制御コードから更新識別子までは,同じ行に指定します。
  • 1行は512バイト以内です。
  • 行中に「#」を記述すると,「#」以降はコメントとして扱われます。
指定例
更新情報識別子の指定例を示します。
表単位反映方式で反映中に,次のメッセージが出力された場合を考えます。
メッセージのinformation

Fri May 23 16:29:42 2003  process: hdssqle[trngroup](2032)  function: hds_sqe_hexeis
errorcode: KFRB03033-E 02 a1 (hdssqle.exe[trngroup]) HiRDB data base EXECUTE error occurred, table name = "k896201"."R003", SQLCODE = -803.
information: "C1"=1
KFPA11803-E Duplicate key value in unique index id=196861
Additional Transaction Info = 3e681b95000000000000012​f.
Extract Id = 3e681b95000000000000012​f:1

反映グループ「trngroup」に対する,トランザクション「3e681b95000000000000012f」(格納順位「1」)の反映だけを抑止するとき,更新情報識別子は次のように指定します。
反映抑止対象リストファイルの内容

SKIP_TYPE_ONLY=3e681b95000000000000012​f:1,trngroup

(2) SQLエラーのスキップ

あらかじめ指定したSQLCODEのエラーが発生した場合に,そのエラーを無視して反映処理を続行できます。SQLエラーしかスキップできませんが,あらかじめスキップするエラーを指定することができるため,反映抑止によるスキップより手間が掛かりません。

スキップ対象とするSQLCODEは,反映環境定義のskip_sqlcodeオペランドに指定します。ただし,暗黙的にロールバックされるSQLエラーに該当するSQLCODEを指定しても,スキップ指定は無視されて反映処理は停止します。

また,HiRDBが暗黙的なロールバックを行うSQLエラーのうち,通信エラー(SQLCODEが-722,又は-723)が発生した場合,その後の反映処理リトライ中に発生したSQLエラーをスキップすると,抽出側DBと反映側DBの不整合が発生するおそれがあります。これは,HiRDBの暗黙的なロールバック処理と反映処理のリトライが競合するためです。

SQLエラーをスキップさせないために,skip_sqlcodeオペランドを指定する場合は,sqlerr_during_retryオペランドにstopを指定,又は指定を省略してください。これによって,抽出側DBと反映側DBの不整合が発生するおそれがあるときは,スキップ指定が無視されて,反映処理はKFRB03061-Eメッセージを出力して停止します。KFRB03061-Eメッセージを出力して停止したときは,HiRDBの暗黙的なロールバック処理が完了するのを待った後,反映処理を再起動してください。sqlerr_during_retryの指定と通信エラー後の反映処理リトライ中に発生したSQLエラーのスキップの関係について次の表に示します。

sqlerr_during_retryの指定通信エラー後の反映処理リトライ中に発生したSQLエラーのSQLCODEスキップの有無
stop又は省略skip_sqlcodeオペランドに指定したSQLCODE×
上記以外のSQLCODE×
enable_skipskip_sqlcodeオペランドに指定したSQLCODE
上記以外のSQLCODE×
(凡例)
○:スキップされます。
×:スキップされません。
注※
KFRB03061-Eメッセージを出力します。

反映SQLエラーのスキップの指定については,「5.9 反映環境定義」のskip_sqlcodeオペランド及びsqlerr_during_retryオペランドの説明を参照してください。