【问题标题】:Getting java.sql.SQLException: XA error: XAResource.XAER_PROTO start() failed on resource error in weblogic 12c获取 java.sql.SQLException: XA error: XAResource.XAER_PROTO start() failed on resource error in weblogic 12c
【发布时间】:2017-12-06 08:28:58
【问题描述】:

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

  1. 我间歇性地遇到此问题,并非每次都出现。
  2. 我正在使用 web logic 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)

我得到的例外,

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 驱动程序不兼容的问题,但是否正确发现或者我们可能需要检查其他内容?

【问题讨论】:

    标签: java ejb weblogic datasource xa


    【解决方案1】:

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

    $ 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,在这种情况下这样做。

    【讨论】:

    • 只是为了了解执行顺序,如果执行initxa.sql文件失败,是否需要执行initjvm.sql?现在为 java_pool_size 和 shared_pool_size oracle 属性设置了 0 值,我还需要为这些属性设置一些值吗?
    • @RiteshChopade 完全正确,如果您未能执行 initxa.sql,请运行 initjvm.sql。如果您的数据库是 AMM(自动内存管理),请询问您的数据库管理员。也许您的数据库是 AMM,不需要显式设置这些参数(java_pool_size 和 shared_pool_size)。
    猜你喜欢
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    • 2021-12-27
    • 2022-12-19
    • 2020-06-07
    • 1970-01-01
    相关资源
    最近更新 更多