【发布时间】:2010-11-08 06:44:43
【问题描述】:
我遇到了通过 OracleConnectionCacheImpl 进行 Oracle 连接池的问题。当我通过瘦驱动程序连接到我的数据库服务器(Oracle 10g)上的连接池时,一切正常,直到在未指定的时间之后,数据库连接被丢弃(可能是由于空闲连接?)并且我收到一条错误消息:
关闭连接。
刷新页面并重新尝试连接会重新连接数据库,因此它似乎不是网络或数据库的问题。如果池中的连接因任何原因死亡,Oracle 连接池是否可以验证其连接并重新连接?
我正在使用 Apache Tomcat 6.0.18,Java EE6 更新 11。
(Oracle瘦驱动程序中似乎有一个ping功能。这有帮助吗?我在哪里可以找到它?)
【问题讨论】:
-
1) 您能否为关闭的连接添加整个堆栈跟踪 2) 您是否将 InactivityTimeout、TimeToLiveTimeout 或 AbandonedConnectionTimeout 设置为任何非默认值? 3) 你使用 ValidateConnection 吗?
-
4) 应用服务器和数据库服务器之间的物理连接是否在网络级别被切断,例如通过防火墙?
-
在哪里设置这些参数?我是 Oracle 编程新手,所以我不确定在哪里可以找到这些参数。我在哪里可以找到 ValidateConnection 并强制重新连接? (在看到错误后立即刷新浏览器即可立即解决问题。我不确定这是否是防火墙问题。)
-
参考download.oracle.com/docs/cd/B19306_01/java.102/b14355/… 并发送整个错误堆栈,这会很有帮助
-
+1 验证连接。我在 .NET 世界中遇到了同样的问题,必须将 Validate Connection=true 添加到连接字符串中。您的语法可能会因 jdbc 而异。
标签: jdbc oracle10g database-connection connection-pooling