我遇到过这样的情况:微软客户端与 Oracle 服务器的通信似乎被中断,因为它们在中间状态满防火墙上超时。
这些会话可能会闲置数小时!
全局增加防火墙的超时时间是不可接受的,
当然,它也不支持特定流量的更长超时时间。
我已经修复了PuTTY空闲连接的这个问题;
它允许可配置保持活动。
但是,我还没有在 TOAD 软件中发现任何此类支持。
在查看了系统范围的配置后,我找到了以下 Microsoft TechNet 详细信息:配置系统范围的 Keep-Alives涉及与保持活动时间以及相关的注册表变量。
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\参数\KeepAliveTime
这看起来像Linux 系统范围配置,用于使用系统范围的 keep-alive。
但是,这需要程序使用setsockopt()
并请求保持活动(对吗?)。
请记住,即使在内核中配置了 keepalive 支持,它也不是 Linux 中的默认行为。程序必须使用 setsockopt 接口请求对其套接字的 keepalive 控制。实现 keepalive 的程序相对较少...
问题
- 我可以用这个吗Windows 客户端计算机或服务器上的 KeepAliveTime 技术?
(有人试过吗?)- 还有其他方法可以保持这些 TOAD 连接处于活动状态(从通信的任一端)吗?
答案1
设置值SQLNET.EXPIRE_TIME在 sqlnet.ora 中。
以下是Oracle 手册关于这个问题说:
目的
使用参数SQLNET.EXPIRE_TIME
指定发送探测以验证客户端/服务器连接是否处于活动状态的时间间隔(以分钟为单位)。设置大于 0 的值可确保连接不会因客户端异常终止而无限期地保持打开状态。如果探测发现已终止的连接或不再使用的连接,它将返回错误,导致服务器进程退出。此参数主要用于数据库服务器,它通常一次处理多个连接。
使用此终止连接检测功能的限制如下:
- 在遗留连接上不允许这样做。
- 尽管探测数据包非常小,但它会产生额外的流量,可能会降低网络性能。
- 根据所使用的操作系统,服务器可能需要执行额外的处理来区分连接探测事件与发生的其他事件。这也可能导致网络性能下降。
默认:零
最小值:零
建议值:10
例子
SQLNET.EXPIRE_TIME=10
答案2
您有 SSH 访问权限吗?您可以设置 SSH 隧道并通过该隧道发送 SQL 通信。
TOAD:服务器(或 tnsnames)变为本地主机,监听端口是一些随机端口,例如 12346
PuTTY:端口转发。源端口:12346,目标:$REMOTE_IP:1521。将其保留为本地端口。
确保通过连接部分在 PuTTY 中启用 TCP keepalives。
答案3
我在戴尔的网站上找到了这个,并确认它可以工作(在 Toad 11.5.0.56 下): Toad 是否具有保持活动/间隔时间/ ping 设置,以便网络不会超时?(49507)
总结一下 - 在 DBMS 输出窗口中单击 DBMS 输出菜单栏左侧的红色按钮图标(它将变为绿色)打开输出。您可以在数据网格选项卡旁边的 DBMS 输出选项卡中访问它,也可以通过视图 -> DBMS 输出访问它。
这也会自动打开轮询。根据我的经验,您需要 DBMS 输出和启用轮询来维持连接。