Fatal NI connect error 12170的处理
1、背景
原服务器windows 2016 运行了oracle数据库多年,近期迁移到linux环境下后,业务大量的反馈,过一段时间自动掉线、plsql查询也是只要空闲了过一会再去执行查询就需要重新登录。
原环境:windows,oracle 11.2.0.4 ,业务使用的是真实的网卡地址192.168.0.2
新环境:linux,oracle 11.2.0.4 ,业务使用的是192.168.0.2,但是真实地址是0.177
2、排查过程
通过查看后台,发现大量的掉线:
3、处理流程
按照以往的运维经验来看,这个大概率是防火墙的长连接没有打开导致。但用户坚持说以前都没有问题,就是换了服务器后开始出现的。这里我就怀疑可能是ip地址存在多个,vip在0.177上挂载,可能还得开0.7到其它网段的双向tcp长连接才行,但由于网络厂商配合程度不高,只有试着调整监听日志和操作系统的网络参数解决。
查询mos:
--Alert Log Errors: 12170 TNS-12535/TNS-00505: Operation Timed Out (Doc ID 1628949.1)
sqlnet.ora文件,增加两行
SQLNET.EXPIRE_TIME=3
SQLNET.INBOUND_CONNECT_TIMEOUT=0
##最开始我设置得10分钟,但设置后过一会还是会断开,然后设置到了3分钟,问题得到了解决。
listener.ora文件:
INBOUND_CONNECT_TIMEOUT_LISTENER=0lsnrctl stoplsnrctl start
--设置linux服务器参数应该也能解决,我这里就没继续设置了。# tcp keepalivenet.ipv4.tcp_keepalive_time = 60 # 探活周期1分钟
net.ipv4.tcp_keepalive_intvl = 20 # 探测没有确认时,重新发送探测的频度。默认75s -> 20s
net.ipv4.tcp_keepalive_probes = 3 # 3 * 20 = 1分钟超时断开
4、总结
**特别注意的是,设置完成后,如果应用存在重连功能的,没有作用。另外之前建立的链接还是会超时,只对新的会话生效。
**为了干脆的解决问题,空闲时段我将会话全部提出,今日再次观察,运行正常,不再有掉线的发生。
论坛同步更新:
https://blog.itpub.net/27147296/viewspace-3056490/
https://www.modb.pro/db/1867056151683153920