我随机了#34;连接已关闭:连接已关闭"使用Oracle UCP时的错误,v 12.1.0.2.0。看起来连接被标记为已关闭 oracle.ucp.jdbc.proxy.JDBCConnectionProxyFactory #accoke:
if(Clock.isBefore(this.creationTS, this.m_jdbcPooledConnection.getAvailableStartTime()) || Clock.isBefore(this.creationTS, this.m_jdbcPooledConnection.getBorrowedStartTime())) {
this.m_closed = Boolean.valueOf(true);
}
Clock.isBefore(this.creationTS,this.m_jdbcPooledConnection.getAvailableStartTime())返回true。
有人可以解释一下这张支票的用途吗?
当连接恢复到池时设置getAvailableStartTime,在创建JDBCConnectionProxyFactory时设置creationTS - 并在提供连接时创建它。
isBefore看起来像这样:
public static boolean isBefore(long time1, long time2) {
return time1 < time2 - 1000L;
}
那么,在不到一秒钟之前返回连接的情况是否适用?
ps:尝试验证查询&#34;从双&#34;中选择1 - 没效果
答案 0 :(得分:0)
如果Clock.isBefore(this.creationTS, this.m_jdbcPooledConnection.getAvailableStartTime())
返回true
,则表示UCP已重新收集连接并再次使其可用。如果您在UCP中打开连接收集,通常会发生这种情况。 UCP检测何时借用连接但未使用太长时间(设计不良的应用程序)并避免连接泄漏,它将获取连接并使其在池中可用。如果原始线程随后醒来并尝试使用该连接,则会出现connection is closed
错误。