从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)db在特定时间之后不会断开连接,并且没有阻止连接的防火墙。 6)使用setMaxConnectionReuseTime
我已经提到了一些显示类似问题的链接。但是它没有显示任何分辨率 https://community.oracle.com/thread/2183613
https://community.oracle.com/thread/2298699
The connection is closed when using Oracle UCP
有没有人在使用UCP的Oracle 12C上遇到过类似的问题?最新的UCP中是否有一些错误?
答案 0 :(得分:0)
使用Weblogic的连接池时没有任何问题。
我认为问题正是所描述的Data.Hashtable
package。
在调用close()
之前,请确保连接未关闭(注意多线程)。
在prepareStatement()
之前添加一些日志记录以查看connection.isValid()
是否真的没有关闭,并在prepareStatement()
调用之前尝试记录StackLayout layout = new StackLayout();
for(int i = 0; i < item.Count; i++)
{
var label = new Label
{
Text = item[i]
};
var entry = new Entry();
Grid stackLayout = new Grid
{
HorizontalOptions = LayoutOptions.CenterAndExpand,
Children = {
label,
entry
},
};
layout.Children.Add(stackLayout);
}
的值。
您能提供一些示例代码吗?
答案 1 :(得分:0)
我遇到了类似的问题。我在使用ucp-11.2.0.3.jar。我详细记录了我的流程并观察了来自池的连接
也无效(con.isValid()返回false)
我经历了这么多论坛,但没有多少帮助。我终于找到了这个Link related to similar issue。因此我更新到ucp-11.2.0.4,一切运行良好。
不确定这是否是一个解决方案,但它解决了我的问题。