1. WebSphere障害その1(oracle xa recove、XAException)
経緯:
①WebSphereに配置しているプロジェクトがトランザクションを使っています。
②稼働中、更新エラーが発生し、WebSphereを強制停止
③SQL PLUSで確認し、更新エラーが発生したデータはロックされていて、更新不能
④SQL PLUSでロックを解除
⑤WebSphereを再起動(プロジェクトも再稼働)すると、oracle xa recoveのエラーが発生しています。
2. WebSphereがいくつかの異常な状況(たとえば、WebSphereサービスの異常終了など)で発生した場合、次のエラーメッセージが表示されます。
3. ログトレース
[23-5-24 12:45:09:165 CST] 00000012 InternalOracl I DSRA8203I: データベースの製品名:Oracle
[23-5-24 12:45:09:174 CST] 00000012 InternalOracl I DSRA8204I: データベースの製品バージョン:Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
パーティショニング、OLAP、データマイニング、およびリアルアプリケーションテストのオプションを備えています
[23-5-24 12:45:09:181 CST] 00000012 InternalOracl I DSRA8205I: JDBCドライバー名:Oracle JDBCドライバー
[23-5-24 12:45:09:185 CST] 00000012 InternalOracl I DSRA8206I: JDBCドライバーバージョン:10.2.0.1.0
[23-5-24 12:45:09:189 CST] 00000012 InternalOracl I DSRA8212I: DataStoreHelperの名前は:com.ibm.websphere.rsadapter.Oracle10gDataStoreHelper@44aa44aaです。
[23-5-24 12:45:09:193 CST] 00000012 WSRdbDataSour I DSRA8208I: JDBCドライバータイプ:“”
[23-5-24 12:45:09:208 CST] 00000012 WSRdbXaResour E DSRA0304E: XAExceptionが発生しました。XAExceptionの内容と詳細情報は:原因は:nullです。
[23-5-24 12:45:09:212 CST] 00000012 WSRdbXaResour E DSRA0302E: XAExceptionが発生しました。エラーコードは:XAER_RMERR (-3)です。例外:
[23-5-24 12:45:09:217 CST] 00000012 XARminst E WTRN0037W: xa_recover操作中にトランザクションサービスでエラーが発生しました。リソースはcom.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl@1e681e68です。エラーコードはXAER_RMERRです。例外スタックトレースは次のようになります:javax.transaction.xa.XAException
at oracle.jdbc.xa.OracleXAResource.recover(OracleXAResource.java:526)
at com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl.recover(WSRdbXaResourceImpl.java:1038)
at com.ibm.ws.Transaction.JTA.XARminst.recover(XARminst.java:138)
at com.ibm.ws.Transaction.JTA.XARecoveryData.recover(XARecoveryData.java:687)
at com.ibm.ws.Transaction.JTA.PartnerLogTable.recover(PartnerLogTable.java:524)
at com.ibm.ws.Transaction.JTA.RecoveryManager.resync(RecoveryManager.java:1859)
at com.ibm.ws.Transaction.JTA.RecoveryManager.run(RecoveryManager.java:2580)
4. 解決策
SYSDBAでSQL PLUSにログイン
以下のコマンドを実行(トランザクションの権限の付与)
参考:権限の確認
grant select on sys.dba_pending_transactions to username;
grant select on sys.pending_trans$ to username;
grant select on sys.dba_2pc_pending to username;
grant execute on sys.dbms_system to username;
コメント欄