4

从 Oracle 11g 迁移到 Oracle 12 c 时,我们使用 UCP(12.1.0.2.0) 遇到错误

    java.sql.SQLException: The connection is closed: The connection is closed
            at oracle.ucp.util.UCPErrorHandler.newSQLException(UCPErrorHandler.java:464)
            at oracle.ucp.util.UCPErrorHandler.newSQLException(UCPErrorHandler.java:448)
            at oracle.ucp.jdbc.proxy.JDBCConnectionProxyFactory.invoke(JDBCConnectionProxyFactory.java:307)
            at oracle.ucp.jdbc.proxy.ConnectionProxyFactory.invoke(ConnectionProxyFactory.java:50)
            at com.sun.proxy.$Proxy24.prepareStatement(Unknown Source)

这是一个多线程应用程序,我们从 UCP 池中获取连接,使用它然后关闭连接。但是,对于某些操作,我们在线上遇到了上述错误 - connection.prepareStatement(statement) 我们正在使用 PoolDataSource

很少尝试 1) 使用连接池的默认值并仅设置最小、最大池大小。2)将 setValidateConnectionOnBorrow 设置为 true,3)将 setValidateConnectionOnBorrow 设置为 true,并将 setValidateConnectionOnBorrow 设置为“SELECT 1 FROM DUAL” 4)使用标签连接 5)数据库在特定时间后不会断开连接,也没有防火墙阻止连接. 6) 使用 setMaxConnectionReuseTime

我已经提到了一些显示类似问题的链接。但是它没有显示任何分辨率 https://community.oracle.com/thread/2183613

https://community.oracle.com/thread/2298699

使用 Oracle UCP 时连接关闭

有没有人在使用 UCP 的 Oracle 12C 上遇到过类似的问题?最新的 UCP 中是否有一些错误?

4

2 回答 2

0

我在使用 Weblogic 的连接池时没有任何问题。

我认为问题正是这里描述的问题 oracle-db-java-sql-sqlexception-closed-connection

在调用之前确保连接没有关闭prepareStatement()(注意多线程)。

也许添加一些日志记录以查看之前是否close()真的没有关闭,并在调用之前尝试记录prepareStatement()值。connection.isValid()prepareStatement()

你能提供一些示例代码吗?

于 2017-03-18T20:31:07.257 回答
0

我遇到了类似的问题。我使用的是 ucp-11.2.0.3.jar。我详细记录了我的过程并观察到来自池的连接是

  1. 不为空

  2. 未关闭

  3. 也无效(con.isValid() 返回 false)

    我经历了很多论坛,但没有多少帮助。我终于找到了与类似问题相关的链接。因此我更新到 ucp-11.2.0.4 并且一切正常。

不确定这是否是一个解决方案,但它解决了我的问题。

于 2018-03-28T08:38:47.593 回答