41

有什么方法可以阻止 Oracle SQL Developer 关闭我的数据库连接或增加超时?有时,在长时间运行的查询期间,SQL Dev 只会关闭连接,让我的查询在服务器上运行,但我没有结果。如果我 RDP 进入服务器并在本地运行 SQL Dev,它似乎永远不会有这个问题。

4

7 回答 7

32

回答

很可能是 SQL Developer 和数据库之间的防火墙破坏了一些东西。您可以使用SQL Developer Keepalive 插件从 SQL Developer 解决这个问题。

您还可以使用ThomasDavid 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/

于 2010-01-06T14:08:11.110 回答
13

这是另一个可能有用的 Keep Connection Active 扩展。(上面提到的扩展包含许多在此扩展中解决的问题。)

http://sites.google.com/site/keepconnext/

于 2012-05-24T12:55:15.087 回答
10

对我来说也听起来像是防火墙问题。

在服务器的 SQLNET.ORA 文件中设置 EXPIRE_TIME 参数可能会有一些运气。从文档中:

使用参数 SQLNET.EXPIRE_TIME 指定时间间隔(以分钟为单位),以发送探测以验证客户端/服务器连接是否处于活动状态。将值设置为大于 0 可确保连接不会由于客户端异常终止而无限期地保持打开状态。如果探测发现一个终止的连接,或者一个不再使用的连接,它会返回一个错误,导致服务器进程退出。此参数主要用于数据库服务器,它通常在任何时候处理多个连接。

关于 EXPIRE_TIME 的 10g 文档

于 2010-03-01T14:53:47.907 回答
8

这听起来不像是 SQL 开发人员的问题,当然我从来没有遇到过。你确定它不是别的东西,比如你的网络吗?如果您从桌面连接 SQL plus 会发生什么。

于 2009-08-21T04:49:30.600 回答
5

作为临时解决方案,在“数据网格”旁边,您会找到“DBMS 输出”选项卡,打开 DBMS 输出并将轮询频率设置为合适的时间。

于 2010-05-18T18:50:06.363 回答
3

我们的 DBA 似乎找到了解决方案:

2.2. 如果 OC4J 实例和数据库之间存在防火墙 防火墙可能会丢弃与数据库服务器的非活动 jdbc 连接。但是,OC4J 实例无法检测到防火墙已使与数据库的连接超时。Oracle Net 可以配置死连接检测 (SQLNET.EXPIRE_TIME) 来解决此问题。将数据库服务器上的 EXPIRE_TIME 设置为小于防火墙连接超时的值,以便 DCD 保持与数据库的连接处于活动状态。请参见注释 151972.1“死连接检测 (DCD) 说明”。由于这是在数据库服务器上而不是在中间层上配置的设置,因此它将适用于所有数据库连接(OCI 和瘦 JDBC)。替代解决方案: - 禁用或增加防火墙的空闲超时参数。或 - 将数据库和中间层服务器上的 TCP Keepalive 时间设置配置为小于防火墙连接超时的值。设置 TCP Keepalive 时间后,机器将在指定的分钟后重复发送空数据包以保持连接处于活动状态。由于每次在防火墙空闲超时内发送数据包,连接不会被关闭。

于 2013-08-27T16:50:38.683 回答
1

#1。与 th3 DBA 检查所用连接的用户配置文件是什么。然后检查配置文件的不活动超时。

#2。将 SQL Developer 中的连接设置更改为 Connection Type=Basic 并使用 SID(不是服务名称)。

SQL Developer 中的连接属性

如果您使用 Connection Type=TNSNAMES 或 Service Name 而不是 SID - 连接将被丢弃。

于 2019-11-27T22:27:15.667 回答