java.sql.SQLException: ORA-02089: COMMIT is not allowed in a subordinate session

Technote (FAQ)
Problem
Your application uses 2PC (XA) data source with Oracle® JDBC™ Driver version 9i (for example: 9.2.0.4.0) and receives ORA-02089.
Cause
The problem is caused by setting AutoCommit to True on the XA Connection. This is a bug with the Oracle JDBC 9i driver. The problem can be reproduced using the attached stand-alone Java™ program (XASimpleTest.java) with straight JDBC calls connecting to Oracle using Oracle JDBC Driver 9i.

Example of stack trace using WebSphere® Application Server V4.0 data source style:

[8/3/04 9:36:27:988 EDT] 366b7af8 ConnectO e destroy(): Exception closing XAConnection
java.sql.SQLException: ORA-02089: COMMIT is not allowed in a subordinate session
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
at oracle.jdbc.ttc7.Ocommoncall.receive(Ocommoncall.java:138)
at oracle.jdbc.ttc7.TTC7Protocol.logoff(TTC7Protocol.java:390)
at oracle.jdbc.driver.OracleConnection.close(OracleConnection.java:1436)
at oracle.jdbc.pool.OraclePooledConnection.close(OraclePooledConnection.java:232)
at com.ibm.ejs.cm.pool.ConnectO.destroy(ConnectO.java:1862)

Example of stack trace or trace entries using WebSphere Application Server V5.0 data source style:

[9/14/04 18:22:37:693 EDT] 328ca8bc WSRdbXaResour W DSRA0302E: XAException occurred. Error code is: XAER_RMERR. Exception is: <null>
[9/14/04 18:24:08:413 EDT] 7738a8b7 WSRdbManagedC d DSA_ERROR ORA-02089: COMMIT is not allowed in a subordinate session

[9/14/04 18:24:08:413 EDT] 7738a8b7 WSRdbManagedC d SQL_STATE_ERROR_CODE 42000 2089

[9/14/04 18:24:08:413 EDT] 7738a8b7 WSRdbManagedC d Exception java.sql.SQLException: ORA-02089: COMMIT is not allowed in a subordinate session
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
at oracle.jdbc.ttc7.Ocommoncall.receive(Ocommoncall.java:138)
at oracle.jdbc.ttc7.TTC7Protocol.logoff(TTC7Protocol.java:395)
at oracle.jdbc.driver.OracleConnection.close(OracleConnection.java:1487)
at oracle.jdbc.pool.OraclePooledConnection.close(OraclePooledConnection.java:259)
at com.ibm.ws.rsadapter.spi.WSRdbManagedConnectionImpl.destroy(WSRdbManagedConnectionImpl.java:1761)
at com.ibm.ejs.j2c.MCWrapper.destroy(MCWrapper.java:1305)
Solution
The problem is fixed with Oracle 10g.











Document Information

Product categories: Software, Application Servers, Distributed Application & Web Servers, WebSphere Application Server, DB Connections/Connection Pooling
Operating system(s): Multi-Platform
Software version: 3.5, 4.0, 5.0, 5.1, 6.0
Software edition: Edition Independent
Reference #: 1180106
IBM Group: Software Group
Modified date: 2004-09-23