有没有办法让Oracle SQL Developer不关闭我的数据库连接,或者增加超时?有时在长时间运行的查询期间,SQL Dev将关闭连接,让我的查询在服务器上运行,但我没有结果。如果我RDP进入服务器并在本地运行SQL Dev,它似乎永远不会有这个问题。
答案 0 :(得分:28)
我没有这方面的答案,但我遇到了同样的问题。
我的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/
答案 1 :(得分:12)
这是另一个可能有用的Keep Connection Active扩展。 (上面提到的扩展包含了许多在这个问题中解决的问题。)
答案 2 :(得分:9)
对我来说听起来像防火墙问题。
您可能会在服务器的SQLNET.ORA文件中设置EXPIRE_TIME参数。来自文档:
使用参数SQLNET.EXPIRE_TIME指定发送探针以验证客户端/服务器连接是否处于活动状态的时间间隔(以分钟为单位)。设置大于0的值可确保由于客户端终止异常,连接无法无限期保持打开状态。如果探测器发现已终止的连接或不再使用的连接,则会返回错误,从而导致服务器进程退出。此参数主要用于数据库服务器,通常在任何时候都可以处理多个连接。
答案 3 :(得分:8)
对于SQL开发人员来说,这听起来不是一个问题,但是我从未遇到过这个问题。你确定它不是别的东西,比如你的网络吗?如果从桌面连接SQL plus会发生什么。
答案 4 :(得分:5)
作为临时解决方案,在“数据网格”一侧,您将找到“DBMS输出”选项卡,打开DBMS输出并将轮询频率设置为合适的时间。
答案 5 :(得分:3)
我们的DBA似乎找到了解决方案:
2.2。如果OC4J实例和实例之间存在防火墙。数据库 防火墙可能会将非活动的jdbc连接丢弃到数据库服务器。但是,OC4J实例无法检测到防火墙已超时连接到数据库。 可以使用死连接检测(SQLNET.EXPIRE_TIME)配置Oracle Net以解决此问题。将数据库服务器上的EXPIRE_TIME设置为小于防火墙连接超时的值,以便DCD保持与数据库的连接活动。参见注释151972.1"死连接检测(DCD)说明"。由于这是在数据库服务器上配置的设置,而不是在midtier上,因此它将适用于所有数据库连接(OCI和瘦JDBC)。 替代方案: - 禁用或增加防火墙的空闲超时参数。 要么 - 将数据库和中间服务器上的TCP Keepalive时间设置配置为小于防火墙连接超时的值。设置TCP Keepalive时间后,计算机将在指定的分钟数后重复发送空数据包以保持连接活动。由于每次在防火墙空闲超时内发送数据包,连接都不会被关闭。
答案 6 :(得分:1)
#1。通过th3 DBA检查使用的连接的用户配置文件是什么。然后检查配置文件的不活动超时。
#2。将SQL Developer中的连接设置更改为Connection Type = Basic,并使用SID(而非服务名称)。
如果您使用Connection Type = TNSNAMES或Service Name代替SID-连接将被删除。
答案 7 :(得分:-2)
在服务器端使用 SQLNET.EXPIRE_TIME 请求保活数据包
另见:https://rammpeter.blogspot.com/2017/06/common-pitfalls-using-sqlnet-via.html