Hitachi

ノンストップデータベース HiRDB Version 9 システム運用ガイド(UNIX(R)用)


20.14.1 未決着状態のトランザクションを決着する方法

HiRDBの再開始時又は正常終了時に未決着状態のトランザクション(決着できないトランザクションブランチ)がある場合,KFPS00992-Eメッセージが出力されます。このとき,HiRDB管理者は次に示す手順に従って未決着状態のトランザクションを決着してください。

pd_trn_rerun_branch_auto_decide = Y(省略値)を指定すると,未決着状態のトランザクションを自動決着できます。この自動決着機能では決着できない場合や,自動決着機能を使用しない場合に,次の例題で説明する操作が必要になります。

〈手順〉

[図データ]

[図データ]

  • 処理ボックスの左にある数字はこの後で説明している( )レベルに対応しています。例えば,5の操作は(5)で説明しています。

  • 以降で説明する手順の中で,メッセージを調べる操作があります。このとき,syslogfile中のメッセージを参照するようにしてください。

〈この項の構成〉

(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など)が正常に稼働しているかを確認してください。稼働していない場合は各製品で決められた手順に従いクライアント製品を開始してください。

なお,停止中のクライアント製品がある状態で,強制的にトランザクションを決着する場合は次に示す点に注意してください。

また,トランザクションの整合性を保つために,これ以降新たなトランザクションを実行しないようにしてください。

(3) 停止中のサーバを開始します

全サーバ(回復不要FESを除くすべてのサーバ)が稼働中であることをpdlsコマンドで確認してください。稼働していないサーバがある場合は,そのサーバを開始してください。

なお,停止中のサーバがある状態で,強制的にトランザクションを決着する場合は次に示す点に注意してください。

(4) 未決着状態のトランザクションを手動で決着します

未決着状態のトランザクションを手動で決着してください。手動での決着方法については,「未決着状態のトランザクションを手動で決着する方法」を参照してください。

(5) pdtrndecコマンドの入力ファイルを作成します(システムマネジャがあるユニットが対象)

grepコマンドを使用してpdtrndecコマンドの入力ファイルを作成してください。システムマネジャがあるユニットだけが対象になります。grepコマンドでKFPS00990-Iメッセージのファイルを作成します。

grep "KFPS00990-I" /usr/adm/OLDsyslogfile >/tmp/unit1syslog.copy
grep "KFPS00990-I" /usr/adm/syslogfile >/tmp/unit1syslog2.copy
           1                 2                     3
〔説明〕
  1. grepするときのパターン文字列にKFPS00990-Iを指定します。

  2. 抽出対象のsyslogfile(システムマネジャがあるユニットのsyslogfile)の絶対パス名を指定します。

  3. pdtrndecコマンドの入力ファイル名を絶対パス名で指定します。

    ポイント
    • syslogfileに直接アクセスしたときの影響を考慮して,syslogfileから文字列“KFPS00990-I”の行だけを抽出したファイルを作成して任意の場所に保存してください。なお,抽出した内容に加工を行った場合,(6)で実行するpdtrndecコマンドの結果が保証されません。grepコマンド以外の加工は絶対にしないでください。

    • syslogfileはスワップしていることがあるため,システムが正常開始した時刻(KFPS01803-I start mode=Sメッセージが出力されていて,かつKFPS05210-Iメッセージが出力された時刻)以降のすべてのsyslogfileを入力対象にしてください。システムが正常開始した時刻を含むsyslogfileがない場合は,今あるすべてのsyslogfileを入力対象にしてください。

    • 入力するsyslogfileの絶対パス名はプラットフォームごとに異なります。/etc/syslog.confに指定されている絶対パス名を指定してください。

(6) (5)で作成した入力ファイルを使用してpdtrndecコマンドを実行します

pdtrndec -i /tmp/unit1syslog.copy,/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コマンドの入力ファイルを作成します(システムマネジャがないユニットが対象)

grepコマンドを使用してpdtrndecコマンドの入力ファイルを作成してください。システムマネジャがないすべてのユニットが対象になります。grepコマンドでKFPS00990-Iメッセージのファイルを作成します。

grep "KFPS00990-I" /usr/adm/OLDsyslogfile >/tmp/unit2syslog.copy
grep "KFPS00990-I" /usr/adm/syslogfile >/tmp/unit2syslog2.copy
           1               2                     3
〔説明〕
  1. grepコマンドを実行するときのパターン文字列にKFPS00990-Iを指定します。

  2. 抽出対象のsyslogfile(システムマネジャがないユニットのsyslogfile)の絶対パス名を指定します。

  3. pdtrndecコマンドの入力ファイル名を絶対パス名で指定します。

    ポイント
    • syslogfileに直接アクセスしたときの影響を考慮して,syslogfileから文字列“KFPS00990-I”の行だけを抽出したファイルを作成して任意の場所に保存してください。なお,抽出した内容に加工を行った場合,(8)で実行するpdtrndecコマンドの結果が保証されません。grepコマンド以外の加工は絶対にしないでください。

    • syslogfileはスワップしていることがあるため,システムが正常開始した時刻(KFPS01803-I start mode=Sメッセージが出力されていて,かつKFPS05210-Iメッセージが出力された時刻)以降のすべてのsyslogfileを入力対象にしてください。システムが正常開始した時刻を含むsyslogfileがない場合は,今あるすべてのsyslogfileを入力対象にしてください。

    • 入力するsyslogfileの絶対パス名はプラットフォームごとに異なります。/etc/syslog.confに指定されている絶対パス名を指定してください。

(8) pdtrndecコマンドの入力ファイルを作成します(システムマネジャがあるユニットが対象)

(5)と同じ方法でpdtrndecコマンドの入力ファイルを作成してください。

(9) (7)及び(8)で作成した入力ファイルを使用してpdtrndecコマンドを実行します

(7)及び(8)で作成した入力ファイルを使用してpdtrndecコマンドでトランザクションを決着させてください。1回目のpdtrndecコマンドの実行後,最終ステータスのリターンコードが4で,DECISIONの表示内容に”********”がある場合は,次に示すオプションを指定して再度pdtrndecコマンドを実行してください。

pdtrndec -i /tmp/unit1syslog.copy,/tmp/unit1syslog2.copy,/tmp/unit2syslog.copy,
/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など)を削除してください。