Overview
You encounter the following errors when starting up Bizlogic (SBMBUS) on the EJB servers:
[2/19/21 10:25:57:422 CST] 0000007c XARminst E WTRN0037W:
The transaction service encountered an error on an xa_recover operation.
The resource was com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl@8598a220.
The error code was XAER_RMERR. The exception stack trace follows:
javax.transaction.xa.XAException: [savviondd][Oracle JDBC Driver][Oracle]ORA-00942: table or view does not exist
at com.savvion.jdbcx.oracle.OracleImplXAResource.getXAException(Unknown Source)
at com.savvion.jdbcx.oracle.OracleImplXAResource.recover(Unknown Source)
at com.savvion.jdbcx.oraclebase.ddaa.recover(Unknown Source)
at com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl.recover(WSRdbXaResourceImpl.java:1111)
at com.ibm.ws.Transaction.JTA.XARminst.recover(XARminst.java:141)
at com.ibm.ws.Transaction.JTA.XARecoveryData.recover(XARecoveryData.java:748)
at com.ibm.tx.jta.impl.PartnerLogTable.recover(PartnerLogTable.java:432)
at com.ibm.tx.jta.impl.RecoveryManager.resync(RecoveryManager.java:1544)
at com.ibm.tx.jta.impl.RecoveryManager.performResync(RecoveryManager.java:2286)
at com.ibm.ws.tx.jta.RecoveryManager.performResync(RecoveryManager.java:119)
Environment
All Supported Operating Systems WebSphere 7.0, Oracle DB.Solution
The above errors occur when the application server is failing due to the XA transaction. This means that the transaction manager could not perform an XA recover operation, and Oracle returned an XAER_RMERR error to indicate that server did not close its connection with Oracle properly. When Application Server attempts to re-establish the connection, Oracle must rollback any transactions that were in progress, but the Oracle user that server uses to log into the database (for example: scott) cannot perform the recovery.
The solution is to give the Oracle user permission to perform the recovery, specifically to access the internal Oracle tables used to manage recovery.
This is done by executing the following steps:
- Login to SQL Plus as SYSOPER or SYSDBA.
- Run the following command:
grant select on DBA_PENDING_TRANSACTIONS to PUBLIC
- Restart the database.
- Restart all the servers.
Note: Delete all the SIB tables from the Oracle database before starting up the SBM servers.