3.15.9 トランザクションリカバリ
J2EEサーバやリソースマネジャの障害で,プリペア状態またはヒューリスティック完了状態となった2フェーズトランザクションを決着させる機能です。グローバルトランザクションを使用する場合に有効になります。
J2EEサーバを開始すると,インポートされているリソースに対して,無条件にトランザクションの全面回復処理を実行します。また,トランザクション実行中にリソースマネジャがダウンした場合にも,部分回復処理をします。
なお,トランザクションの状態は,インプロセストランザクションサービスを使用している場合,サーバ管理コマンドのcjlisttrnコマンドで表示できます。また,停止中のJ2EEサーバのステータスファイルに残っている,未決着トランザクション情報はcjlisttrnfileコマンドで表示できます。
ライトトランザクションが有効なときには,トランザクションリカバリ機能は使用できません。
- 注意事項
-
J2EEサーバ再起動によるトランザクションリカバリをしない場合,トランザクションの回復は各リソースの回復手順に従い,ユーザ責任で手動回復してください。
(1) J2EEサーバ終了時の未決着トランザクションの確認とタイムアウトの設定
J2EEサーバを正常停止する時,J2EEサーバは未決着のトランザクションがないことを確認してから停止します。未決着のトランザクションがあるときは,それらが完了するまで無限に待ちます。また,そのトランザクションが決着するまでリソースを削除できません。
これに対して,システム開発時など,トランザクションを早急に解決する必要がない場合は,未決着トランザクションの確認時間にタイムアウトを設定できます。タイムアウトが発生した場合は,未決着のトランザクションの確認処理が完了していなくても,J2EEサーバの停止処理がされます。ただし,タイムアウトは,J2EEアプリケーション開発時などに設定してください。J2EEアプリケーション運用時には,トランザクションの信頼性を保証するために,タイムアウトを設定しないことをお勧めします。
タイムアウトの設定は,J2EEサーバのプロパティをカスタマイズして設定します。J2EEサーバの動作設定のカスタマイズについては,「3.15.13 実行環境での設定」を参照してください。
(2) 注意事項
トランザクションリカバリについての注意事項を説明します。
(a) J2EEサーバ起動時にリソースアダプタの開始に失敗した場合の注意
J2EEサーバ起動時にXATransactionを利用するリソースアダプタの開始に失敗した場合,J2EEサーバはトランザクションリカバリを実行しないで,メッセージKDJE48605-Eを出力して強制停止します。この場合は,リソースアダプタの開始処理が失敗する原因を取り除いてから,J2EEサーバを再起動してください。これによって,プリペア状態またはヒューリスティック状態のトランザクションは決着されます。
(b) J2EEサーバを再起動する時の注意
-
J2EEサーバが強制終了または異常終了したあと,リソースを削除するとリカバリできなくなります。このため,再起動時にリソースの構成を変更しないでください。
-
強制終了または異常終了前の受信ポートと同じポートで再起動する必要があります。このため,簡易構築定義ファイル内の<configuration>タグ内のパラメタ「ejbserver.distributedtx.recovery.port」の値を変更しないでください。なお,Management Serverを利用しないでシステムを構築する場合は,usrconf.propertiesのejbserver.distributedtx.recovery.portキーを変更しないでください。
(c) トランザクションリカバリを実行するための権限
-
リカバリはリソース(XADataSourceなど)に設定したデフォルトユーザで実行します。リソースマネジャによっては,未決着トランザクションの走査に特別な権限や設定が必要になります。また,複数のユーザでサインオンする場合,デフォルトユーザにそのほかのユーザのトランザクションを決着できるリソースマネジャでの適正な権限を付与する必要があります。なお,詳細については,各リソースのマニュアルを参照してください。
-
Oracleでリカバリをする場合で,JDBCドライバにOracle JDBC Thin Driverを使用するときは,ユーザに次の権限が必要です。
-
SYS.DBA_PENDING_TRANSACTIONSへのSELECT権限
-
FORCE ANY TRANSACTION権限
-
SYS.DBMS_SYSTEMをEXECUTEする権限
Oracleを使用する場合の設定については,マニュアル「アプリケーションサーバ システム構築・運用ガイド」の「4.1.7 データベース接続環境を設定する(Oracleの設定)」を参照してください。
-
(d) 使用するコネクション数
トランザクションリカバリをする場合に使用するコネクション数に注意してください。
J2EEサーバでは,トランザクションサポートレベルがXATransactionの一つのリソースアダプタに対して,次のコネクションを確立します。
-
コネクションプールにプーリングされるコネクション
-
リカバリ用のコネクション(一つ)
同一のリソースマネジャで必要となる最大コネクション数は,次の式で示す値になります。リソースマネジャにコネクション数の上限がある場合は,注意してください。
- 同一のリソースマネジャで必要となる最大コネクション数=IR(1) + … + IR(N) + N
-
- IR(i)
-
i番目のリソースアダプタのプール設定値の最大コネクション数。
1≦i≦Nです。
- N
-
-
Connector 1.0仕様に準拠したリソースアダプタの場合は,同一のリソースマネジャに接続するリソースアダプタ数。
-
Connector 1.5仕様に準拠したリソースアダプタの場合は,同一のリソースマネジャに接続するリソースアダプタ内のコネクション定義数の総数。
対象になるのは,開始状態で,かつトランザクションサポートレベルがXATransactionのリソースアダプタです。
-
(3) トランザクション情報の確認手順
ここでは,稼働中および停止中のJ2EEサーバのトランザクションの情報を確認する方法について説明します。稼働中のJ2EEサーバでのトランザクションの状態や,停止中のJ2EEサーバでの未決着のトランザクションの有無などの情報を確認できます。
(a) 稼働中のトランザクションの確認手順
J2EEサーバで稼働中のトランザクションの情報を確認できます。トランザクションの状態,グローバルトランザクションID,経過時間,ブランチの種類などの情報を確認できます。
稼働中のトランザクションの確認には,cjlisttrnコマンドを使用します。実行形式と実行例を次に示します。
- 実行形式
cjlisttrn [<サーバ名称>] -bqual
- 実行例
cjlisttrn MyServer -bqual
また,未決着のトランザクションの状態も確認できます。未決着のトランザクションについての情報を確認するときは,引数に「-pending」を指定します。未決着のトランザクションについての情報を確認する場合の実行形式と実行例を次に示します。
- 実行形式
cjlisttrn [<サーバ名称>] -pending -bqual
- 実行例
cjlisttrn MyServer -pending -bqual
cjlisttrnコマンド,および取得できる情報の詳細については,マニュアル「アプリケーションサーバ リファレンス コマンド編」の「cjlisttrn(稼働中のJ2EEサーバのトランザクション情報の表示)」を参照してください。
(b) 停止中のトランザクションの確認手順
停止中のJ2EEサーバのトランザクションの情報を確認できます。トランザクションの状態,グローバルトランザクションID,経過時間,ブランチの種類等の情報を確認できます。また,未決着のトランザクションが残っているかどうかも確認できます。
停止中のトランザクションの確認には,cjlisttrnfileコマンドを使用します。実行形式と実行例を次に示します。
- 実行形式
cjlisttrnfile [<サーバ名称>] -bqual
- 実行例
cjlisttrnfile MyServer -bqual
J2EEサーバが停止中の状態で未決着のトランザクションが存在する場合は,必要に応じて次の処理を実行して,トランザクションを決着させてください。
-
J2EEサーバを再起動する(cjstartsvコマンド)
-
J2EEサーバをリカバリモードで起動する(cjstartrecoverコマンド)
cjlisttrnfileコマンド,および取得できる情報の詳細については,マニュアル「アプリケーションサーバ リファレンス コマンド編」の「cjlisttrnfile(停止中のJ2EEサーバのトランザクション情報の表示)」を参照してください。