有什么方法可以阻止 Oracle SQL Developer 关闭我的数据库连接或增加超时?有时,在长时间运行的查询期间,SQL Dev 只会关闭连接,让我的查询在服务器上运行,但我没有结果。如果我 RDP 进入服务器并在本地运行 SQL Dev,它似乎永远不会有这个问题。
7 回答
回答
很可能是 SQL Developer 和数据库之间的防火墙破坏了一些东西。您可以使用SQL Developer Keepalive 插件从 SQL Developer 解决这个问题。
您还可以使用Thomas和David Mann的答案从数据库服务器解决此问题。
Oracle Net 可以配置死连接检测 (SQLNET.EXPIRE_TIME) 来解决此问题。将数据库服务器上的 EXPIRE_TIME 设置为小于防火墙连接超时的值,以便 DCD 保持与数据库的连接处于活动状态。请参阅注释 151972.1“死连接检测 (DCD) 解释”
原始答案
我没有这个问题的答案,但我遇到了同样的问题。
我的 SQL Developer 和数据库之间的防火墙会自动关闭“非活动”会话。根据防火墙,长时间运行的查询是不活动的会话,因此他将其关闭。我还没有找到如何让 SQL Developer 通过长时间运行的查询通过连接发送数据包,这样防火墙就不会关闭连接。我不知道这是否可能。
所以我不认为这是 SQL Developer 的问题,而是防火墙的问题。
- 更新
SQL Developer 有一个扩展,可让您保持连接处于活动状态:http ://sites.google.com/site/keepaliveext/
它还没有完全完成(例如,无论您指定什么超时,您收到的通知都指出相同的超时),但它可以解决问题。我还没有针对最新的 SQL Developer 预发布版本对其进行测试,但它适用于 SQL Developer 2.2.x
- 更新
对于 SQL Developer 4+,您可以使用:http ://scristalli.github.io/SQL-Developer-4-keepalive/
这是另一个可能有用的 Keep Connection Active 扩展。(上面提到的扩展包含许多在此扩展中解决的问题。)
对我来说也听起来像是防火墙问题。
在服务器的 SQLNET.ORA 文件中设置 EXPIRE_TIME 参数可能会有一些运气。从文档中:
使用参数 SQLNET.EXPIRE_TIME 指定时间间隔(以分钟为单位),以发送探测以验证客户端/服务器连接是否处于活动状态。将值设置为大于 0 可确保连接不会由于客户端异常终止而无限期地保持打开状态。如果探测发现一个终止的连接,或者一个不再使用的连接,它会返回一个错误,导致服务器进程退出。此参数主要用于数据库服务器,它通常在任何时候处理多个连接。
这听起来不像是 SQL 开发人员的问题,当然我从来没有遇到过。你确定它不是别的东西,比如你的网络吗?如果您从桌面连接 SQL plus 会发生什么。
作为临时解决方案,在“数据网格”旁边,您会找到“DBMS 输出”选项卡,打开 DBMS 输出并将轮询频率设置为合适的时间。
我们的 DBA 似乎找到了解决方案:
2.2. 如果 OC4J 实例和数据库之间存在防火墙 防火墙可能会丢弃与数据库服务器的非活动 jdbc 连接。但是,OC4J 实例无法检测到防火墙已使与数据库的连接超时。Oracle Net 可以配置死连接检测 (SQLNET.EXPIRE_TIME) 来解决此问题。将数据库服务器上的 EXPIRE_TIME 设置为小于防火墙连接超时的值,以便 DCD 保持与数据库的连接处于活动状态。请参见注释 151972.1“死连接检测 (DCD) 说明”。由于这是在数据库服务器上而不是在中间层上配置的设置,因此它将适用于所有数据库连接(OCI 和瘦 JDBC)。替代解决方案: - 禁用或增加防火墙的空闲超时参数。或 - 将数据库和中间层服务器上的 TCP Keepalive 时间设置配置为小于防火墙连接超时的值。设置 TCP Keepalive 时间后,机器将在指定的分钟后重复发送空数据包以保持连接处于活动状态。由于每次在防火墙空闲超时内发送数据包,连接不会被关闭。