如何防止Oracle SQL Developer关闭数据库连接?

如何防止Oracle SQL Developer关闭数据库连接?,oracle,oracle10g,oracle-sqldeveloper,Oracle,Oracle10g,Oracle Sqldeveloper,有没有办法阻止Oracle SQL Developer关闭我的数据库连接,或者增加超时?有时候,在长时间运行的查询过程中,SQL开发人员只会关闭连接,让我的查询在服务器上运行,而我却没有结果。如果我将RDP导入服务器并在本地运行SQL Dev,那么似乎永远不会出现此问题 这听起来不像是SQL开发者的问题,实际上我从未遇到过。你确定不是别的东西,比如你的网络?如果从桌面通过SQL plus连接,会发生什么情况。回答 它很可能是SQL开发人员和数据库之间的防火墙,破坏了一切。您可以使用SQL Dev

有没有办法阻止Oracle SQL Developer关闭我的数据库连接,或者增加超时?有时候,在长时间运行的查询过程中,SQL开发人员只会关闭连接,让我的查询在服务器上运行,而我却没有结果。如果我将RDP导入服务器并在本地运行SQL Dev,那么似乎永远不会出现此问题

这听起来不像是SQL开发者的问题,实际上我从未遇到过。你确定不是别的东西,比如你的网络?如果从桌面通过SQL plus连接,会发生什么情况。

回答 它很可能是SQL开发人员和数据库之间的防火墙,破坏了一切。您可以使用SQL Developer解决这个问题

您还可以通过使用和的答案从数据库服务器修复此问题

Oracle Net可以配置死连接检测 (SQLNET.EXPIRE\u TIME)来解决此问题。将过期时间设置为on 将数据库服务器设置为小于防火墙连接的值 超时,以便DCD保持与数据库的连接处于活动状态。看见 注释151972.1“说明了死连接检测(DCD)”

原始答案 我没有答案,但我也遇到了同样的问题

SQL开发人员和数据库之间的防火墙会自动关闭“非活动”会话。根据防火墙,长时间运行的查询是一个非活动会话,因此他关闭它。我还没有发现如何让SQLDeveloper通过一个长时间运行的查询连接发送数据包,这样防火墙就不会关闭连接。我不知道这是否可能

所以我认为这不是SQL开发人员的问题,而是防火墙的问题

-- 更新

SQL Developer有一个扩展,允许您保持连接处于活动状态:

它还没有完全完成(例如,无论您指定了什么超时,您收到的通知都会声明相同的超时),但它确实做到了这一点。我还没有用最新的SQLDeveloper预发行版测试它,但它与SQLDeveloper2.2.x一起使用

-- 更新


对于SQL Developer 4+,您可以使用:

对我来说,这听起来像是防火墙问题

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

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


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

下面是另一个可能有用的保持连接活动扩展。(上面提到的扩展包含许多在此extn中解决的问题。)


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

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

\p>\1。与th3 DBA核实所用连接的用户配置文件。然后检查配置文件的非活动超时

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


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

使用服务器端的SQLNET.EXPIRE\u TIME请求保持活动的数据包


另请参见:

Nice suggesion…我不太明白你所说的“数据网格”是什么意思,但我在
View>Dmbs Output
(ALT,V,D)下找到了这个。这个答案有点晚了,但确实是一个网络问题。@KevinBabcock你在这里面临的网络问题是什么?我有Toad和Oracle SQL Developer,Oracle SQL开发人员总是断开连接并尝试连接,这很烦人,而蟾蜍整天都在保持连接。现在我不得不离开蟾蜍,因为生意上的原因:(我测试了keep alive扩展。它完全按照预期工作,谢谢!SQL Developer 4.0的工作版本:我成功地测试了此参数的有效性。谢谢!端口上的工作几乎完成,详细信息如下:SQL Developer 4的解决方案的相关问题:解决方案#2不适用于我,我的连接已使用基本连接:/