20.14.2 未決着状態のトランザクションを手動で決着する方法
未決着状態のトランザクションを手動で決着する手順を次に示します。
- 〈手順〉
- 注
-
-
処理ボックスの左にある数字はこの後で説明している( )レベルに対応しています。例えば,5の操作は(5)で説明しています。
-
以降で説明する手順の中で,メッセージを調べる操作があります。このとき,イベントログ中のメッセージを参照するようにしてください。
-
- 〈この項の構成〉
-
(1) KFPS00992-Eメッセージを確認します
イベントログ中の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 Unable to determine commit or rollback for transaction branch. TRNGID=HRD1unt100020b5f, TRNBID=HRD1unt100020037, server=bes1, service=p_f_sqa_call KFPS00992-E Unable to determine commit or rollback for transaction branch. TRNGID=HRD1unt100020b64, TRNBID=HRD1unt100020038, server=bes1, service=p_f_sqa_call
- 〔説明〕
-
KFPS00992-Eメッセージには,コミット又はロールバックできなかったトランザクションブランチが表示されます。この場合,次に示すトランザクション識別子のトランザクションが未決着状態である可能性があります。
-
TRNGID=HRD1unt100020b4d
-
TRNGID=HRD1unt100020b22
-
TRNGID=HRD1unt100020b5a
-
TRNGID=HRD1unt100020b5f
-
TRNGID=HRD1unt100020b64
-
(2) クライアントの製品は起動していますか?
HiRDBのクライアントとして使用している製品が,正常に稼働しているかどうかを確認してください。
(3) クライアントの製品を起動します
HiRDBのクライアントとして使用している製品が,正常に稼働していない場合は,各製品で決められている手順で起動してください。
このとき,クライアントの製品の強制開始を行わないでください。
(4) 1分程度待ちます
トランザクションが自動的に決着する可能性があるため,1分程度待ちます。
(5) KFPS00992-Eメッセージが出力されたのはHiRDBの終了処理時ですか?
KFPS00992-EメッセージがHiRDB終了処理時に出力された場合と,それ以外の場合では,以降の対策方法が異なります。
(6) KFPS00992-Eメッセージに出力されたTRNGIDを調べます
HiRDBの終了処理時にKFPS00992-Eメッセージが出力された場合は,pdls -d trnコマンドが実行できないため,KFPS00992-Eメッセージに出力されたTRNGIDを調べます。
(7) pdlsコマンドでトランザクションの状態を確認します
pdls -d trnコマンドで,トランザクションの状態を確認してください。
pdls -d trn HOSTNAME : host1(153415) TRNGID TRNBID STATUS PID SVID B-SVID HRD1unt100020b4d HRD1unt100020034 READY(p,n) 0 bes1 fes1 HRD1unt100020b22 HRD1unt100020035 READY(p,n) 0 bes1 fes1 HRD1unt100020b5a HRD1unt100020036 READY(p,n) 0 bes1 fes1 HRD1unt100020b5f HRD1unt100020037 ROLLBACK(u,n) 29799 bes1 fes1 HRD1unt100020b69 HRD1unt100020039 FORGETTING(r,w) 0 bes1 fes1
- 〔説明〕
-
STATUS欄に表示される情報を見てください。
-
次に示す三つのトランザクションがREADY(p,?)状態になっています。
TRNGID=HRD1unt100020b4d
TRNGID=HRD1unt100020b22
TRNGID=HRD1unt100020b5a
-
TRNGID=HRD1unt100020b5fのトランザクションは,クライアントの製品を起動したため,決着処理が行われてROLLBACK状態になっています。このトランザクションは自動的に決着します。
-
TRNGID=HRD1unt100020b64のトランザクションは,クライアントの製品を起動したため,決着処理が行われてトランザクションが決着しました。そのため,pdls -d trnコマンドの実行結果に表示されません。
-
KFPS00992-Eメッセージには出力されなかったTRNGID=HRD1unt100020b69のトランザクションが,FORGETTING(?,w)状態になっています。
-
(8) READY(p,?)又はFORGETTING(?,w)状態のトランザクションが存在しますか?
pdls -d trnコマンドの実行結果(STATUSの欄)に,READY(p,?)状態又はFORGETTING(?,w)状態のトランザクションがある場合,未決着トランザクションの決着を行います。
READY(p,?)状態又はFORGETTING(?,w)状態以外のトランザクションだけがある場合は,トランザクションが自動的に決着するのを待ちます。
(9) 未決着状態のトランザクションの完了種別を調べます
READY(p,?)状態又はFORGETTING(?,w)状態のトランザクションがある場合は,イベントログ中のKFPS00990-Iメッセージをサーチしてください。このとき,決着させる必要があるトランザクションのTRNGIDをキーにしてサーチします。KFPS00990-Iメッセージにはトランザクションの完了種別が表示されます。なお,サーチするKFPS00990-Iメッセージは,前回正常開始時点以降に出力されたメッセージだけを対象にしてください。
KFPS00990-I Transaction branch recovery complete. TRNGID=HRD1unt100020b5a, TRNBID=HRD1unt200020015, server=fes1, service=p_f_sqa_cauxi, completion type=c, c KFPS00990-I Transaction branch recovery complete. TRNGID=HRD1unt100020b4d, TRNBID=HRD1unt200020014, server=fes1, service=p_f_sqa_cauxi, completion type=r, r
- 〔説明〕
-
サーチした結果,ヒットしたトランザクションの処置を次に示します。
-
TRNGID=HRD1unt100020b5aのトランザクション完了種別
completion type=cとなっているため,コミットでトランザクションを決着させます。
-
TRNGID=HRD1unt100020b4dのトランザクション完了種別
completion type=rとなっているため,ロールバックでトランザクションを決着させます。
サーチした結果,ヒットしなかったトランザクションの処置を次に示します。
-
TRNGID=HRD1unt100020b22のトランザクション完了種別
同じTRNGIDを持つKFPS00990-Iメッセージがなかったため,ロールバックでトランザクションを決着させます。
-
TRNGID=HRD1unt100020b69のトランザクション完了種別
STATUSがFORGETTING(?,w)のため,トランザクションを強制終了します。
次に示すTRNGIDのトランザクションについては完了種別を調べる必要がありません。
-
TRNGID=HRD1unt100020b5f
-
TRNGID=HRD1unt100020b64
-
(10) 未決着状態のトランザクションを決着させます
次に示すコマンドでトランザクションを決着してください。
コマンド名 |
機能及び適用基準 |
---|---|
pdcmt |
トランザクションをコミットします。 |
pdrbk |
トランザクションをロールバックします。 |
pdfgt |
トランザクションを強制終了します。FORGETTING(?,w)状態のトランザクションに実行します。 |
(11) トランザクションの決着を待ちます
READY(p,?)又はFORGETTING(?,w)状態以外のトランザクションだけがある場合,トランザクションは決着中のため,決着処理が完了するのを待ってください。
(12) トランザクションが決着したか確認します
KFPS00992-EメッセージがHiRDBの終了処理中に出力された場合は,KFPS02183-Iメッセージが出力されたかどうかを確認してください。未決着状態のトランザクションが決着すると,30秒以内にKFPS02183-Eメッセージが出力されます。30秒以上経過してもKFPS02183-Iメッセージが表示されない場合は,未決着状態のトランザクションが存在します。
HiRDBの再開始時にKFPS00992-Eメッセージが出力された場合,又はHiRDBの稼働中にpdls -d trnコマンドで未決着状態のトランザクションを発見した場合は,トランザクションが決着しているかどうかをpdls -d trnコマンドで確認してください。
(13) すべてのトランザクションが終了しましたか?
すべてのトランザクションが終了していない場合は,(5)に戻って操作してください。