21 January 2014

DSRA0302E: XAException. Error code: XAER_RMERR (-3). Exception:

It's been published in several places, I guess but for the sake of simplicity:

Websphere 8.5, Oracle 11.2, datasource and transactions. You start your WAS server and see this in the logs:

[20.01.14 13:36:43:670 CET] 0000004f WSRdbXaResour E   DSRA0304E:  Wystapil wyjatek XAException. Tresc i szczególy wyjatku XAException: The cause is               : null.
[20.01.14 13:36:43:671 CET] 0000004f WSRdbXaResour E   DSRA0302E:  Wystapil wyjatek XAException.  Kod bledu: XAER_RMERR (-3).  Wyjatek: <null>
[20.01.14 13:36:43:671 CET] 0000004f XARminst      E   WTRN0037W: Usluga transakcji napotkala blad w operacji xa_recover. Zasób: com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl@c6a9f4fb. Kod bledu: XAER_RMERR. Dane sledzenia stosu wyjatku: javax.transaction.xa.XAException
at oracle.jdbc.xa.OracleXAResource.recover(OracleXAResource.java:709)
at com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl.recover(WSRdbXaResourceImpl.java:1116)
at com.ibm.ws.Transaction.JTA.XARminst.recover(XARminst.java:141)
at com.ibm.ws.Transaction.JTA.XARecoveryData.recover(XARecoveryData.java:716)
at com.ibm.tx.jta.impl.PartnerLogTable.recover(PartnerLogTable.java:431)
at com.ibm.tx.jta.impl.RecoveryManager.resync(RecoveryManager.java:1534)
at com.ibm.tx.jta.impl.RecoveryManager.performResync(RecoveryManager.java:2267)
at com.ibm.ws.tx.jta.RecoveryManager.performResync(RecoveryManager.java:117)
at com.ibm.tx.jta.impl.RecoveryManager.run(RecoveryManager.java:2220)
at java.lang.Thread.run(Thread.java:772)

the key is:

at oracle.jdbc.xa.OracleXAResource.recover(OracleXAResource.java:709)

as there are some pending, unrecoverable transaction in the transaction log. there are two ways to deal with it:
- start your server, nevermind your business applications not working, go to console, Application servers > server1 > Transaction service, then to Runtime tab and there you can see some options to manually manage pending troublesome transactions:

- or alternate: stop server, go to <profileroot>/tranlog/(respective path)/tranlog & partnerlog, delete tranlog and partnerlog files. start server.

Now, the way no. 2 is advisable for development systems, where any data loss is irrelevant. For production, proceed with care and try way no.1 first. Should it fail, go hardcore and delete tranlog.
Good luck.