从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池中获取连接,使用它,然后关闭连接。然而,对于某些操作,我们在连线上得到了上述错误。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 时连接已关闭
是否有人在Oracle 12C和UCP上遇到过类似的问题??最新的UCP中有漏洞吗??
我在使用Weblogic的连接池时没有任何问题。
我认为问题正是这里对神谕问题的描述-dbjavasqlsqlexception关闭了连接。
在调用prepareStatement()
(注意多线程)之前,请确保连接未关闭。
也许可以添加一些日志记录,看看close()
在prepareStatement()
之前是否真的没有关闭,并在prepareStatement()
调用之前尝试为connection.isValid()
记录值。
你能提供一些示例代码吗?
我遇到了类似的问题。我使用的是ucp-1.2.0.3.jar。我详细记录了我的过程,并观察到来自池的连接是
-
非空
-
未关闭
-
同样无效(con.isValid()返回false)
我浏览了很多论坛,但没有太多帮助。我终于发现这个链接和类似的问题有关。因此,我更新到ucp-1.2.0.4,一切都很好。
不确定这是否是一个解决方案,但它解决了我的问题。