有没有办法让Oracle SQL Developer不要关闭我的数据库连接,或者增加超时时间?有时在长时间运行的查询期间,SQL Dev会突然关闭连接,导致我在服务器上运行的查询仍在进行,但却无法获得结果。如果我通过RDP远程登录服务器并在本地运行SQL Dev,则似乎从未出现此问题。
有没有办法让Oracle SQL Developer不要关闭我的数据库连接,或者增加超时时间?有时在长时间运行的查询期间,SQL Dev会突然关闭连接,导致我在服务器上运行的查询仍在进行,但却无法获得结果。如果我通过RDP远程登录服务器并在本地运行SQL Dev,则似乎从未出现此问题。
最有可能的原因是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的问题,而是防火墙问题。
-- 更新
有一个扩展可以让您保持连接处于活动状态:http://sites.google.com/site/keepaliveext/
它还没有完全完成(例如,您收到的通知无论指定什么超时时间都会显示相同的超时时间),但它确实可以解决问题。我尚未测试它是否与最新的SQL Developer预发布版本兼容,但它适用于SQL Developer 2.2.x
-- 更新
对于SQL Developer 4+,您可以使用:http://scristalli.github.io/SQL-Developer-4-keepalive/
这里有另一个保持连接活跃的扩展程序,可能会有用。(上面提到的扩展程序存在一些问题,在这个扩展程序中已经得到解决。)
这似乎是防火墙问题。
您可以在服务器的SQLNET.ORA文件中设置EXPIRE_TIME参数,可能会有所帮助。从文档中得知:
使用参数SQLNET.EXPIRE_TIME指定时间间隔(以分钟为单位),发送探测以验证客户端/服务器连接是否活动。设置大于0的值可以确保连接不会因异常客户端终止而无限期保持开放状态。如果探测发现已终止的连接或未使用的连接,则返回错误,导致服务器进程退出。此参数主要用于处理多个连接的数据库服务器。
这似乎不是SQL开发人员的问题,我从未遇到过。你确定它不是其他问题,比如你的网络?如果您从桌面连接到SQL Plus会发生什么。
作为临时解决方案,您可以在“数据网格”的侧边栏中找到“DBMS输出”选项卡,打开DBMS输出并将轮询频率设置为适当的时间。
我们的数据库管理员似乎已经找到了解决方案:
2.2. 如果OC4J实例和数据库之间存在防火墙 防火墙可能会丢弃对数据库服务器的非活动jdbc连接。 但是,OC4J实例无法检测到防火墙已超时关闭与数据库的连接。 Oracle Net可以配置Dead Connection Detection(SQLNET.EXPIRE_TIME)来解决此问题。 将EXPIRE_TIME设置为小于防火墙连接超时值的值,以便DCD保持与数据库的连接处于活动状态。 请参见注释151972.1“死连接检测(DCD)解释”。 由于这是在数据库服务器上配置的设置,而不是在中间层上配置的设置,因此它将适用于所有数据库连接(OCI和thin JDBC)。 替代方案: - 禁用或增加防火墙的空闲超时参数。 或者 - 将TCP Keepalive时间设置在数据库和中间层服务器上,并将其设置为小于防火墙连接超时的值。 设置TCP Keepalive时间后,机器将在指定的分钟数后重复发送空数据包以保持连接处于活动状态。 由于数据包每次都在防火墙空闲超时内发送,因此连接不会被关闭。