20.14.1 未決着状態のトランザクションを決着する方法
HiRDBの再開始時又は正常終了時に未決着状態のトランザクション(決着できないトランザクションブランチ)がある場合,KFPS00992-Eメッセージが出力されます。このとき,HiRDB管理者は次に示す手順に従って未決着状態のトランザクションを決着してください。
pd_trn_rerun_branch_auto_decide = Y(省略値)を指定すると,未決着状態のトランザクションを自動決着できます。この自動決着機能では決着できない場合や,自動決着機能を使用しない場合に,次の例題で説明する操作が必要になります。
- 〈手順〉
- 注
-
-
処理ボックスの左にある数字はこの後で説明している( )レベルに対応しています。例えば,5の操作は(5)で説明しています。
-
以降で説明する手順の中で,メッセージを調べる操作があります。このとき,イベントログ中のメッセージを参照するようにしてください。
-
- 〈この項の構成〉
-
(1) 未決着状態のトランザクションがあるかを確認します
KFPS00992-Eメッセージを検索して,未決着状態のトランザクションがあるか確認してください。
KFPS00992-E Unable to determine commit or rollback for transaction branch. TRNGID=HRD1unt100020b4d, TRNBID=HRD1unt100020034, server=bes1, service=p_f_sqa_call KFPS00992-E Unable to determine commit or rollback for transaction branch. TRNGID=HRD1unt100020b22, TRNBID=HRD1unt100020035, server=bes1, service=p_f_sqa_call KFPS00992-E Unable to determine commit or rollback for transaction branch. TRNGID=HRD1unt100020b5a, TRNBID=HRD1unt100020036, server=bes1, service=p_f_sqa_call
- 〔説明〕
-
KFPS00992-Eメッセージには,コミット又はロールバックできなかったトランザクションブランチが表示されます。この場合,次に示すトランザクション識別子のトランザクションが未決着状態である可能性があります。
-
TRNGID=HRD1unt100020b4d
-
TRNGID=HRD1unt100020b22
-
TRNGID=HRD1unt100020b5a
-
未決着状態のトランザクションがない場合はこれ以降の操作は必要ありません。
(2) クライアント製品を開始します
HiRDBのクライアント製品(OLTPシステム,HiRDB Datareplicatorなど)が正常に稼働しているかを確認してください。稼働していない場合は各製品で決められた手順に従いクライアント製品を開始してください。
なお,停止中のクライアント製品がある状態で,強制的にトランザクションを決着する場合は次に示す点に注意してください。
-
現在停止中のクライアント製品からの要求で発生した未決着状態のトランザクションは,以降の操作をすると強制的にロールバックされることがあります。ただし,この後にクライアント製品を開始した場合,HiRDBとクライアント製品との間で,このトランザクションの同期が取れないことがあります。
また,トランザクションの整合性を保つために,これ以降新たなトランザクションを実行しないようにしてください。
(3) 停止中のサーバを開始します
全サーバ(回復不要FESを除くすべてのサーバ)が稼働中であることをpdlsコマンドで確認してください。稼働していないサーバがある場合は,そのサーバを開始してください。
なお,停止中のサーバがある状態で,強制的にトランザクションを決着する場合は次に示す点に注意してください。
-
停止中のサーバと関連があるトランザクションについては,以降の操作をすると強制的にロールバックされることがあります。ただし,この後に停止中のサーバを開始した場合,このトランザクションの同期が取れないことがあります。
-
停止中の回復不要FESを開始する必要はありません。
(4) 未決着状態のトランザクションを手動で決着します
未決着状態のトランザクションを手動で決着してください。手動での決着方法については,「未決着状態のトランザクションを手動で決着する方法」を参照してください。
(5) pdtrndecコマンドの入力ファイルを作成します(システムマネジャがあるユニットが対象)
次に示す方法でpdtrndecコマンドの入力ファイルを作成してください。
イベントビューアからアプリケーションログを開いて,[ログファイルの名前を付けて保存]を選択して保存します。このとき,“アプリケーションログ”の名前を付けて保存というウィンドウが表示されます。保存する場所に任意の作業用ディレクトリを選択,ファイル名に任意のファイル名を指定,ファイルの種類はテキストを選択して保存してください。なお,出力先ファイルのパス名には空白を入れないでください。
システムが正常開始した時刻(KFPS01803-I start mode=Sメッセージを出力して,かつKFPS05210-Iメッセージ出力した時刻)以降のすべてのイベントログを対象にしてください。また,イベントログが満杯又は指定期間を過ぎたため,別ファイルに保存している場合は,ファイル種別がテキストファイル以外のときはそのファイルをインポートしてアプリケーションログを開き,ファイル種別にテキストを選択して保存してください。なお,システムが正常開始した時刻を含むイベントログがない場合は,今あるすべてのイベントログをテキストファイルとして保存してください。
(6) (5)で作成した入力ファイルを使用してpdtrndecコマンドを実行します
pdtrndec -i C:\tmp\unit1syslog_copy,C:\tmp\unit1syslog2_copy
- 〔説明〕
-
-i:(5)で作成した入力ファイル
コマンドの実行結果のDECISION(トランザクションの決着種別)に表示されている内容を確認してください。確認後,〈手順〉のフローチャートに従い操作を続行してください。
pdtrndec result START TIME:2002/09/05 17:20:08 HOSTNAME TRNGID TRNBID SVID DECISION TIME host1 HRD1unt100020b4d HRD1unt100020034 bes1 COMMIT 17:20:08 host1 HRD1unt100020b22 HRD1unt100020035 bes1 ******** --:--:-- host1 HRD1unt100020b51 HRD1unt100020038 bes1 FORGET 17:20:09 pdtrndec result START TIME:2002/09/05 17:36:47 HOSTNAME TRNGID TRNBID SVID DECISION TIME host1 HRD1unt100020b22 HRD1unt100020035 bes1 ******** --:--:--
- 注意事項
-
pdtrndecコマンドを実行した後に未決着状態のトランザクションがある場合,pdtrnrbk.batファイルが作成されますが,この時点ではpdtrnrbk.batを実行しないでください。実行した場合,トランザクションの同期が取れなくなることがあります。また,KFPS00982-Eメッセージが出力されていて,かつpdtrnrbk.batファイルが作成されている場合は,そのpdtrnrbk.batファイルは使用しないで削除してください。
(7) pdtrndecコマンドの入力ファイルを作成します(システムマネジャがないユニットが対象)
次に示す方法でpdtrndecコマンドの入力ファイルを作成してください。
イベントビューアからアプリケーションログを開いて,[ログファイルの名前を付けて保存]を選択して保存します。このとき,“アプリケーションログ”の名前を付けて保存というウィンドウが表示されます。保存する場所に任意の作業用ディレクトリを選択,ファイル名に任意のファイル名を指定,ファイルの種類はテキストを選択して保存してください。なお,出力先ファイルのパス名には空白を入れないでください。
システムが正常開始した時刻(KFPS01803-I start mode=Sメッセージを出力して,かつKFPS05210-Iメッセージ出力した時刻)以降のすべてのイベントログを対象にしてください。また,イベントログが満杯又は指定期間を過ぎたため,別ファイルに保存している場合は,ファイル種別がテキストファイル以外のときはそのファイルをインポートしてアプリケーションログを開き,ファイル種別にテキストを選択して保存してください。なお,システムが正常開始した時刻を含むイベントログがない場合は,今あるすべてのイベントログをテキストファイルとして保存してください。
(8) pdtrndecコマンドの入力ファイルを作成します(システムマネジャがあるユニットが対象)
(5)と同じ方法でpdtrndecコマンドの入力ファイルを作成してください。
(9) (7)及び(8)で作成した入力ファイルを使用してpdtrndecコマンドを実行します
(7)及び(8)で作成した入力ファイルを使用してpdtrndecコマンドでトランザクションを決着させてください。1回目のpdtrndecコマンドの実行後,最終ステータスのリターンコードが4で,DECISIONの表示内容に”********”がある場合は,次に示すオプションを指定して再度pdtrndecコマンドを実行してください。
pdtrndec -i C:\tmp\unit1syslog_copy,C:\tmp\unit1syslog2_copy,C:\tmp\unit2syslog_copy, C:\tmp\unit2syslog2_copy -r pdtrnrbk.bat
- 〔説明〕
-
-i:(7)及び(8)で作成した入力ファイルを指定します。
-r:(6)で生成されたバッチファイル(pdtrnrbk.bat)のファイルを指定します。
KFPS00982-Eメッセージが出力されていて,かつpdtrnrbk.batファイルが作成されている場合は,そのpdtrnrbk.batファイルは使用しないで削除してください。
(10) トランザクションの状態を確認します
トランザクションが決着したかどうかをpdls -d trnコマンドで確認してください。未決着状態のトランザクションがまだある場合は,出力されたメッセージやコマンドの実行結果を参照してエラーの原因を対策し,手順(7)からの操作を繰り返してください。
pdls -d trn HOSTNAME : host1(153415) TRNGID TRNBID STATUS PID SVID B-SVID
- 〔説明〕
-
トランザクションの情報が表示されていないため,すべてのトランザクションが決着しています。
(11) KFPS02183-Iメッセージを確認します
未決着状態のトランザクションがすべて決着すると,30秒以内にKFPS02183-Iメッセージが出力されます。30秒を経過してもKFPS02183-Iメッセージが出力されない場合は,まだ未決着状態のトランザクションがあります。この場合は最初から操作を繰り返してください。
(12) 不要ファイルを削除します
pdtrndecコマンドで指定した出力先ディレクトリ下のファイル(pdtrndecout,pdtrnrbk.batなど)を削除してください。