使用Oracle UCP时,连接已关闭

时间:2016-01-01 15:43:04

标签: oracle jdbc ucp

我随机了#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 - 没效果

1 个答案:

答案 0 :(得分:0)

如果Clock.isBefore(this.creationTS, this.m_jdbcPooledConnection.getAvailableStartTime())返回true,则表示UCP已重新收集连接并再次使其可用。如果您在UCP中打开连接收集,通常会发生这种情况。 UCP检测何时借用连接但未使用太长时间(设计不良的应用程序)并避免连接泄漏,它将获取连接并使其在池中可用。如果原始线程随后醒来并尝试使用该连接,则会出现connection is closed错误。

相关问题