本文主要是介绍关于客户端长时间自动断开的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
我先描述一下环境和问题
环境:服务器:IBM P570 AIX5.3 库:oracle 10G 做的双节点的rac 2层架构,c/s模式,客户端直连数据库,没有中间件缓冲池,服务器模式为专有模式(DEDICATED)。还有就是我们的用户都是走的内网,不对外提供服务,因为是医院,客户端都是医生、护士用的。
问题描述:客户端连接数据库后,如果没有任何操作10分钟左右自己断开连接。
1、数据库:我看了oracle的profile,走的是default, IDLE_TIME是unlimited,所以初步判断不是库的问题 (难道库还有别的配置能限制?)
2、应用:咨询了此应用专业人士,说应用没有做过任何断开的策略限制
3、网络:我们的汇聚没有做过这样的策略
因为排除了profile的原因,怀疑可能是服务器或者网络的问题:
先说服务器:在网上找了很多的资料,主要是两个地方可能会限制:
etc/profile配置文件的TMOUT参数 2、通过no -a|grep idle 查看tcp_keepidle 发现这两个地方都没问题的
网络:虽然我不知道是哪里有策略,但是我觉得可能就是网络的问题,在哪个交换机上或者AIX小机上有策略,干掉长时间空闲的网络连接,提高网络利用率的
最后在网上发帖子,找到了方法:利用oracle的DCD(Dead Connection Detection)机制,避免oracle会话被防火墙强制断开
就是修改network/admin/sqlnet.ora文件
加入:sqlnet.expire_time = 5
这个参数的意思是 oracle每隔5分钟会向所有oracle的客户端发送一个10字节的空包,这样这个链接就不是空闲的了,也就不会被防火墙策略干掉了.
这个是当时我发的帖子:http://www.itpub.net/thread-1823581-3-1.html
这篇关于关于客户端长时间自动断开的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!