oracle - 使用 Oracle UCP 时连接关闭

标签 oracle jdbc ucp

使用 Oracle UCP v 12.1.0.2.0 时出现随机“连接已关闭:连接已关闭”错误。看起来连接被标记为关闭
oracle.ucp.jdbc.proxy.JDBCConnectionProxyFactory#invoke :

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 在连接返回到池时设置,creationTS - 在创建 JDBCConnectionProxyFactory 时设置,并在放弃连接时创建。

isBefore 看起来像这样:
public static boolean isBefore(long time1, long time2) {
        return time1 < time2 - 1000L;
}

那么,连接返回不到一秒钟的情况的条件是什么?

ps:尝试验证查询“select 1 from dual” - 无效

最佳答案

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

关于oracle - 使用 Oracle UCP 时连接关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34557528/

相关文章:

java - Oracle Webcenter Spaces 和 Internet Explorer 9

java - 甲骨文 JDBC 瘦 : enforce network encryption

java - 从Oracle存储过程中的SYS_REFCURSOR读取数据并在java中重用它

java - UCP 和 Oracle 12 c 中的连接关闭问题

java - Oracle Express 数据库通过 JDBC 使用 UCP(通用连接池)

sql - Oracle 10g 上的子查询问题

java - JDBC 错误 : java. sql.SQLException: ORA-08002: 在此 session 中尚未定义序列

java - 如何加快以下 JDBC 插入/导入过程?

java - 如何解决com.mysql.jdbc.exceptions.MySQLSyntaxErrorException : Table 'task4DB.tst' doesn't exist exceptions

java - 当池生命周期为 LIFE_CYCLE_FAILED 时,使用 UCP 管理器调用 closeConnections() 时 UCP 连接是否关闭?