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

Posted

技术标签:

【中文标题】如何防止 Oracle SQL Developer 关闭数据库连接?【英文标题】:How can I keep Oracle SQL Developer from closing the DB connection? 【发布时间】:2010-11-21 12:13:23 【问题描述】:

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

【问题讨论】:

SQL Developer 4 解决方案的相关问题:***.com/questions/12999811/… 【参考方案1】:

回答

很可能是 SQL Developer 和数据库之间的防火墙造成了破坏。您可以使用SQL Developer Keepalive plugin 从 SQL Developer 解决这个问题。

您也可以使用Thomas 和David Mann 的答案从数据库服务器解决此问题。

Oracle Net 可以配置死连接检测 (SQLNET.EXPIRE_TIME) 来解决此问题。设置 EXPIRE_TIME 数据库服务器的值小于防火墙连接 超时,以便 DCD 保持与数据库的连接处于活动状态。看 Note 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-alive 扩展。 sites.google.com/site/keepaliveext 完全符合预期,谢谢! SQL Developer 4.0 的工作版本:bitbucket.org/scristalli/sql-developer-4-keepalive/overview【参考方案2】:

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

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

【讨论】:

在一个端口上的工作几乎完成了,详情在这里:sites.google.com/site/keepconnext【参考方案3】:

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

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

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

10g Documentation on EXPIRE_TIME

【讨论】:

我成功测试了这个参数的有效性。谢谢!【参考方案4】:

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

【讨论】:

有点晚标记这个答案,但是是的,这是一个网络问题。 @KevinBabcock 您在这里遇到的网络问题是什么? 我有Toad和Oracle SQL Developer,Oracle SQL Developer总是断开连接尝试连接,很烦人,同时Toad整天保持连接。现在我出于商业原因不得不离开 Toad :(【参考方案5】:

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

【讨论】:

很好的建议...我不太明白您所说的“数据网格”是什么意思,但我在View > Dmbs Output(ALT、V、D)下找到了这个。【参考方案6】:

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

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

【讨论】:

【参考方案7】:

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

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

如果您使用连接类型=TNSNAMES 或服务名称而不是 SID - 连接将被丢弃。

【讨论】:

解决方案 #2 对我不起作用,我的连接使用基本连接断开:/

以上是关于如何防止 Oracle SQL Developer 关闭数据库连接?的主要内容,如果未能解决你的问题,请参考以下文章

oracle sql developer工具 如何给用户分配权限

如何安装pl/sql developer

如何安装pl/sql developer

Oracle Sql Developer如何在Oracle中创建和设置角色?

oracle 客户端 sql developer 如何修改jdk版本

oracle 客户端 sql developer 如何修改jdk版本