我有一个场景,TOADSoft客户端与 Oracle 服务器的长时间空闲会话似乎被拆除,因为它们在中间状态完整防火墙上超时。
这些会话可能会空闲几个小时!
全局增加防火墙的超时时间是不可接受的
,当然,它不支持特定流的更长超时时间。
我已经为 PuTTY 空闲连接解决了这个问题;
它允许可配置的 keep-alive。
但是,我还没有在 TOAD 软件中发现任何此类支持。
在系统范围的配置上查找了一下,我想出了这个关于配置系统范围的 Keep-Alives的 Microsoft TechNet 详细信息,其中涉及使用KeepAliveTime和相关的注册表变量。
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\KeepAliveTime
这似乎是使用系统范围 keep-alive 的 Linux 系统范围配置。
但是,这需要程序使用setsockopt()
并请求保持活动(对吗?)。
请记住,即使在内核中配置了 keepalive 支持,它也不是 Linux 中的默认行为。程序必须使用 setsockopt 接口为其套接字请求保持活动控制。实现keepalive的程序相对较少......
问题
- 我可以在 Windows 客户端机器或服务器上使用这种 KeepAliveTime 技术吗?
(有人试过吗?)- 是否有其他方法可以保持这些 TOAD 连接处于活动状态(从通信的任一端)?
在 sqlnet.ora 中设置SQLNET.EXPIRE_TIME的值。
以下是Oracle 手册关于此主题的内容:
目的
使用参数
SQLNET.EXPIRE_TIME
指定时间间隔(以分钟为单位),以发送探测以验证客户端/服务器连接是否处于活动状态。将值设置为大于 0 可确保连接不会由于客户端异常终止而无限期地保持打开状态。如果探测发现一个终止的连接,或者一个不再使用的连接,它会返回一个错误,导致服务器进程退出。此参数主要用于数据库服务器,它通常在任何时候处理多个连接。使用此终止连接检测功能的限制是:
默认值:0
最小值:0
推荐值:10
例子
SQLNET.EXPIRE_TIME=10
你有 SSH 访问权限吗?您可以设置一个 SSH 隧道并通过它发送 SQL 通信。
TOAD: server(or tnsnames) 变成 localhost, 监听端口是一些随机端口比如 12346
PuTTY: 端口转发。源端口:12346,目标:$REMOTE_IP:1521。将其保留为本地端口。
确保通过 Connection 部分在 PuTTY 中启用 TCP keepalives。
我在戴尔的网站上找到了这个,并确认它可以工作(在 Toad 11.5.0.56 下): Toad 是否有保持活动/间隔时间/ping 设置以便网络不会超时?(49507)
总结 - 通过单击 DBMS 输出菜单栏左侧的红色按钮图标(它将变为绿色),在 DBMS 输出窗口中打开输出。您可以在 Data Grid 选项卡旁边的 DBMS Output 选项卡中访问它,或者通过 View -> DBMS Output 访问它。
这也将自动打开轮询。根据我的经验,您需要同时启用 DBMS 输出和轮询来维持连接。