无法将自动提交设置为 true - Weblogic 12 - SQL Server



我们有一个使用 Weblogic 池化非 XA SQL Server JDBC 驱动程序的应用程序。以下是导致问题的原因的流程。

从数据源获取连接。

将自动提交设置为 false。

创建可调用语句。

设置参数。

调用执行更新。

  • 在存储的 proc 调用中,数据库引发错误,SET XACT_ABORT为 ON

应用程序在 CallableStatement的参数中看到错误代码。

关闭可赎回声明

调用连接上的回滚。

引发异常:

2013-10月-17 16:45:20.500 美国东部时间||XXXXXXX|异步交付9|XXX|XXX|XXXX-a3436e48-1672-4a26-88c0-50b9954f6a42|错误|XXXXX|回滚|这 服务器无法恢复事务。描述:4200000012。 com.microsoft.sqlserver.jdbc.SQLServerException: 服务器未能 恢复事务。描述:4200000012。 at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216) ~[sqljdbc4.jar:na] at com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.java:254) ~[sqljdbc4.jar:na] at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:84) ~[sqljdbc4.jar:na] at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:39) ~[sqljdbc4.jar:na] at com.microsoft.sqlserver.jdbc.SQLServerConnection$1ConnectionCommand.doExecute(SQLServerConnection.java:1756) ~[sqljdbc4.jar:na] at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696) ~[sqljdbc4.jar:na] at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715) ~[sqljdbc4.jar:na] at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectionCommand(SQLServerConnection.java:1761) ~[sqljdbc4.jar:na] at com.microsoft.sqlserver.jdbc.SQLServerConnection.rollback(SQLServerConnection.java:1964) ~[sqljdbc4.jar:na] 在 weblogic.jdbc.wrapper.PoolConnection_com_microsoft_sqlserver_jdbc_SQLServerConnection.回滚(未知 Source) ~[wlfullclient.jar:12.1.1.0]

连接已关闭。

然后,下次应用程序尝试从数据源获取连接时,将引发以下错误:

java.sql.SQLException: Failed to setAutoCommit to true for pool connection: First we got The server failed to resume the transaction. Desc:4200000012., then we got The server failed to resume the transaction. Desc:4200000012.
        at weblogic.jdbc.wrapper.PoolConnection.init(PoolConnection.java:70) ~[wlfullclient.jar:12.1.1.0]
        at weblogic.jdbc.common.internal.RmiDataSource.getPoolConnectionObj(RmiDataSource.java:639) ~[wlfullclient.jar:12.1.1.0]
        at weblogic.jdbc.common.internal.RmiDataSource.getPoolConnection(RmiDataSource.java:478) ~[wlfullclient.jar:12.1.1.0]
        at weblogic.jdbc.common.internal.RmiDataSource.getConnectionInternal(RmiDataSource.java:558) ~[wlfullclient.jar:12.1.1.0]
        at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:518) ~[wlfullclient.jar:12.1.1.0]
        at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:511) ~[wlfullclient.jar:12.1.1.0]

在网络逻辑日志中,记录以下内容:

<Oct 15, 2013 3:07:50 PM EDT> <Warning> <JDBC> <BEA-001153> <Forcibly releasing inactive/harvested connection "weblogic.jdbc.wrapper.PoolConnection_com_microsoft_sqlserver_jdbc_SQLServerConnection@238607" back into the data source connec
tion pool "MASTERDB", currently reserved by: reclaimed because of init failure before user access. Not because of inactivity..>

在我看来,连接上的交易从未结束。 但是调用了回滚,我本以为它会结束事务。 现在,下次Weblogic尝试返回连接时,初始化连接时会出错。 关于问题是什么的任何想法? 我们没有在最后明确地将自动提交设置回 true,这可能是问题所在吗?

在这里找到了针对相同类似问题的建议。

"确保将数据源/池配置为在保留时进行测试,并且信任秒数 = 0。"

这应该解决在返回到应用程序之前从池中消除这些"错误"连接的问题。

最新更新