获取java.sql.SQLException:XA错误:Weblogic 12c中的资源错误导致XAResource.XAER_PROTO start()失败

时间:2017-12-06 08:28:58

标签: java ejb weblogic datasource xa

从数据源获取连接时,我在应用程序日志中遇到异常。虽然它在异常中显示“由:无法启动新事务”,但我没有在任何地方开始新事务。

  1. 我间歇性地面对这个问题,每次都不会发生。
  2. 我正在使用网络逻辑12c(weblogic版本12.1.3.0.0)&使用瘦/ XA驱动程序。
  3. 我只面对生产环境这个问题,其他环境没有问题。
  4. 使用oracle 12.1.0.2.0作为数据库
  5. 使用ojdbc6.jar(Oracle jdbc驱动程序版本12.1.0.2.0 JDBC 4.0)
  6. 我得到的例外,

    cause:java.sql.SQLException: Unexpected exception while enlisting XAConnection java.sql.SQLException: XA error: XAResource.XAER_PROTO start() failed on resource 'myds': XAER_PROTO : Routine was invoked in an inproper context
        oracle.jdbc.xa.OracleXAException
            at oracle.jdbc.xa.OracleXAResource.checkError(OracleXAResource.java:1229)
            at oracle.jdbc.xa.client.OracleXAResource.start(OracleXAResource.java:246)
            at weblogic.jdbc.jta.DataSource.start(DataSource.java:830)
            at weblogic.transaction.internal.XAServerResourceInfo.start(XAServerResourceInfo.java:1311)
            at weblogic.transaction.internal.XAServerResourceInfo.xaStart(XAServerResourceInfo.java:1244)
            at weblogic.transaction.internal.XAServerResourceInfo.enlist(XAServerResourceInfo.java:292)
            at weblogic.transaction.internal.ServerTransactionImpl.enlistResource(ServerTransactionImpl.java:585)
            at weblogic.transaction.internal.ServerTransactionImpl.enlistResource(ServerTransactionImpl.java:490)
            at weblogic.jdbc.jta.DataSource.enlist(DataSource.java:1749)
            at weblogic.jdbc.jta.DataSource.refreshXAConnAndEnlist(DataSource.java:1651)
            at weblogic.jdbc.jta.DataSource.getConnectionInternal(DataSource.java:517)
            at weblogic.jdbc.jta.DataSource.getConnection(DataSource.java:494)
            at weblogic.jdbc.common.internal.RmiDataSource.getConnectionInternal(RmiDataSource.java:565)
            at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:545)
            at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:538)
        ....
        .....
        Caused by: java.sql.SQLException: ORA-24776: cannot start a new transaction
            at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450)
            at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:392)
            at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:385)
            at oracle.jdbc.driver.T4CTTIfun.processError(T4CTTIfun.java:1018)
            at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:522)
            at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:257)
            at oracle.jdbc.driver.T4CTTIOtxse.doOTXSE(T4CTTIOtxse.java:164)
            at oracle.jdbc.driver.T4CXAResource.doStart(T4CXAResource.java:188)
            at oracle.jdbc.xa.client.OracleXAResource.start(OracleXAResource.java:241)
            ... 60 more
            at weblogic.jdbc.jta.DataSource.enlist(DataSource.java:1754)
            at weblogic.jdbc.jta.DataSource.refreshXAConnAndEnlist(DataSource.java:1651)
            at weblogic.jdbc.jta.DataSource.getConnectionInternal(DataSource.java:517)
            at weblogic.jdbc.jta.DataSource.getConnection(DataSource.java:494)
            at weblogic.jdbc.common.internal.RmiDataSource.getConnectionInternal(RmiDataSource.java:565)
            at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:545)
            at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:538)
    

    我们认为它可能是不兼容的JDBC驱动程序问题,但它是正确的查找还是我们可能需要检查其他内容?

1 个答案:

答案 0 :(得分:0)

您是否通过运行db脚本为xa配置了initxa.sql?如果没有,请使用以下内容: [小心将此环境复制到 另一台计算机 ,而不是 生产 ]

$ sqlplus / a sysdba
SQL> @?/javavm/install/initxa.sql -- this file is located at $ORACLE_HOME/javavm/install directory.

如果由于数据库内存不足而导致失败,请运行initjvm.sql脚本(位于同一目录),

SQL> @?/javavm/install/initjvm.sql

在执行期间,它将指示需要调整哪些参数。

可能会告诉您增加java_pool_size& shared_pool_size,并在这种情况下这样做。