Receiving "XA recover operation: -3" when restarting Application Server when using Oracle database
 Technote (troubleshooting)
 
Problem(Abstract)
When a transaction fails to complete during an ungraceful server shutdown, WebSphere® Application Server will attempt to recover the transaction upon next startup. If Oracle is not configured correctly, XA Recovery exceptions will occur.
 
Cause
The logs will contain exceptions resembling the following, depending on the driver and WebSphere version used:

[01.07.18 09:28:15:219 EDT] 8e37442d ConnectionPoo < destroy
[01.07.18 09:28:15:219 EDT] 8e37442d DataSourceFac < shutdown
[01.07.18 09:28:31:172 EDT] 8dfec4cd ManagedServer E Version : 3.5.3
[01.07.18 09:28:31:342 EDT] 8dfec4cd ManagedServer E Edition: advanced
[01.07.18 09:28:31:392 EDT] 8dfec4cd ManagedServer E Build date: Sun Mar 04 00:00:00 EST 2001
[01.07.18 09:28:31:392 EDT] 8dfec4cd ManagedServer E Build number: ptf3b0109.01
[01.07.18 09:28:34:156 EDT] 8dfec4cd XARminst      W Encountered an error in XA recover operation: -3
[01.07.18 09:28:34:196 EDT] 8dfec4cd XARminst      X Error to recover XAResource:
javax.transaction.xa.XAException
at java.lang.Throwable.<init>(Throwable.java:84)
at java.lang.Exception.<init>(Exception.java:35)
at javax.transaction.xa.XAException.<init>(XAException.java:61)
at com.merant.sequelink.util.SlXaException.<init>(Unknown Source)
at com.merant.sequelink.ctxt.conn.SessionContext.xa_recover(Unknown Source)
at com.merant.sequelink.ctxt.conn.ConnectionContext.xa_recover(Unknown Source)
at com.merant.sequelink.jdbcx.xa.SequeLinkXAConnection.xa_recover(Unknown Source)
at com.merant.sequelink.jdbcx.xa.SequeLinkXAResource.recover(Unknown Source)
at com.ibm.ejs.jts.jta.XARminst.recover(XARminst.java(Compiled Code))
at com.ibm.ejs.jts.jta.JTSXA.recover(JTSXA.java(Compiled Code))
at com.ibm.ejs.jts.jta.recovery.XARecoveryManager.xaRestartRecovery(XARecoveryManager.java:225)
at com.ibm.ejs.jts.jta.recovery.XARecoveryManager.duringRestart(XARecoveryManager.java:210)
at com.ibm.ejs.jts.tran.Tran.ready(Tran.java:193)
at com.ibm.ejs.jts.jts.CurrentSet.ready(CurrentSet.java:159)
at com.ibm.ejs.jts.jts.Jts.ready(Jts.java:132)
at com.ibm.ejs.sm.server.ManagedServer.initializeTran(ManagedServer.java:936)
at com.ibm.ejs.sm.server.ManagedServer.initializeRuntime(ManagedServer.java:573)
at com.ibm.ejs.sm.server.ManagedServer.main(ManagedServer.java:139)
 
Resolving the problem
When using distributed transactions (JTA) with Oracle, the connected Oracle user requires SELECT privilege on the DBA_PENDING_TRANSACTIONS system view.

Use a tool such as Oracle's SQL*Plus to issue the following query. This query verifies whether the connected Oracle user has SELECT privilege on the system view DBA_PENDING_TRANSACTIONS.

For example,

sqlplus ejb/ejb
SQL> SELECT * FROM dba_pending_transactions ;

no rows selected

If you get the following Oracle error ORA-00942, the user does not have SELECT privilege.

sqlplus ejb/ejb
SQL> SELECT * FROM dba_pending_transactions ;
select * from dba_pending_transactions
*

ERROR at line 1:
ORA-00942: table or view does not exist

To grant SELECT privilege on the DBA_PENDING_TRANSACTIONS system view, use a tool such as Oracle's SQL*Plus to log on to Oracle as SYS user, then issue the following command:

sqlplus sys/change_on_install
SQL> GRANT SELECT ON dba_pending_transactions to EJB ;
Grant succeeded.

Note: The default password for SYS user is CHANGE_ON_INSTALL.

 
 
Cross Reference information
Segment Product Component Platform Version Edition
Application Servers Runtimes for Java Technology Java SDK
 
 


Document Information


Product categories: Software > Application Servers > Distributed Application & Web Servers > WebSphere Application Server
Operating system(s): Windows
Software version: 6.1
Software edition:
Reference #: 1047489
IBM Group: Software Group
Modified date: Aug 31, 2007