Oracle服务器不返回消息给客户端(失去连接),告警日志中“Fatal NI connect error 12170”、TNS-12535、TNS-00505、nt OS err code、nt main err code等错误处理

0    430    4

Tags:

👉 本文共约4657个字,系统预计阅读时间或需18分钟。

现象

现象1

在数据库服务器上执行一个update语句或执行一个存储过程,时间大概40分钟,可以正常结束,可以获取到执行成功的返回消息,但是拿到远程客户端去执行的时候(无论是使用sqlplus还是plsql developer或者Navicat执行),执行了很久也没有返回结果,,,但是,通过查询会话,发现该SQL已经正常执行完成,只是没有返回消息给客户端

查看告警日志报错:

仔细分析出问题的时间点,就是SQL执行完成的时间。。。。

现象2

有意思的是,INACTIVE状态的会话并不会被断开,而ACTIVE状态的会话跑着跑着却会被断开,但其实服务端会话仍然在,这个通过开多个sqlplus客户端可以观察到。

分析

从MOS上的信息反馈看,这个类型错误提示是一种正常的Oracle工作机制。当客户端进程Client Process与服务器进程Server Process建立联系之后,两者就形成了“同生共死”的关系(专有连接模式)。除非客户端主动发起中断或者Server Process被异常kill。

在实际运行环境中,这种理想状态常常被打破。如果Client Process只是保持连接,不执行语句,会话就处于idle状态。这种连接很容易被诸如防火墙等网络层面设备切断。

在Oracle11gR2中,如果长期没有连接动作的Server Process被外力切断,Oracle就会自动将信息作为提示错误写入到alert log中,作为一种提示。在11R1版本中,这种信息是会写入到sqlnet.log中。

归纳MOS和网络中的各种方法,大体有两重策略,分别为使用DCD和禁用ADR。

DCD全称Dead Connection Detection,是一种基于主动测探方式检查Oracle僵尸客户端进程Client Process的策略。配置DCD的关键是设置sqlnet.expire_time参数在SQL Net体系下,Oracle会依据这个时间间隔给所有的Client Process发送网络通信包,用来确定Client是否存活。正是借助这个包通信,可以让防火墙认为这个网络连接还是处在active状态,不会进行强制断开动作。类似的机制还有Linux上的tcp keep live机制,也是使用类似的策略进行检查。

另一种方式也是Oracle推荐的,就是关闭11g的ADR机制。ADR(Automatic Diagnostic Repository)是Oracle进行自动诊断、自动提醒的工具组件。Oracle认为如果用户不需要在SQL Net组件中应用ADR,可以再sqlnet.ora中进行配置关闭。

nt secondary err code返回值的不同

生成日志

可以配置trace进行跟踪,生成日志来分析:

也可以使用事件跟踪“ORA-03135: 连接失去联系错误”生成trace:

SQL查询排查

解决

1、修改数据库服务器端的listener.ora 和 sqlnet.ora文件

2、若是Linux服务器,则配置如下参数:

对于Linux服务器,如果参数net.ipv4.tcp_max_tw_bucketsnet.core.somaxconnnet.ipv4.tcp_max_syn_backlog配置过小,则可能会导致该文中的问题。

对于Windows平台请参考:https://www.dbaup.com/linuxhewindowspingtaishangtcp_keepalive_timetcp_keepalive_intvlhetcp_keepalive_probesdepeizhi.html

3、重新reload监听器配置,或者重启监听器

其它可能原因排查

1、数据库防火墙原因,请关闭防火墙或配置防火墙的长连接。这里的防火墙涉及数据库服务端和客户端2个主机的防火墙。

2、检查客户端和服务器之间是否有丢包及延迟现象,可以使用ping或mtr测试,参考:https://www.dbaup.com/shiyong-mtr-fenxiwangluoyanchijidiubaowenti.html

3、检查profile文件是否有限制:

4、若数据库是12.2版本及以上,请检查是否配置了参数MAX_IDLE_TIMEMAX_IDLE_BLOCKER_TIME

5、是否配置了定时任务,定时清理会话,请查询:dba_jobsdba_scheduler_jobs

6、检查pga_aggregate_limitpga_aggregate_target是否过小。

7、其它杀毒软件导致的短连接,请关闭Windows Defender 防火墙等。

8、是否有云层面、高层次、顶层的防火墙配置,例如,新华三防火墙“H3C SECPATH F5000-M”需要配置老化时间为较长时间:

参考:

https://zhiliao.h3c.com/questions/dispcont/114689

https://zhiliao.h3c.com/Theme/details/164108

另外,例如天融信防火墙配置TCP维持超时等时间,如下:

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!
AiDBA后续精彩内容已被站长无情隐藏,请输入验证码解锁本文!
验证码:
获取验证码: 请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“AiDBA”或者“dbaup6”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复