记一次防火墙策略设置不当导致连接异常

来源:这里教程网 时间:2026-03-03 21:45:51 作者:

作者:Digital Observer(施嘉伟) Oracle ACE Pro: Database PostgreSQL ACE Partner 11年数据库行业经验,现主要从事数据库服务工作 拥有Oracle OCM、DB2 10.1 Fundamentals、MySQL 8.0 OCP、WebLogic 12c OCA、KCP、PCTP、PCSD、PGCM、OCI、PolarDB技术专家、达梦师资认证、数据安全咨询高级等认证 ITPUB认证专家、PolarDB开源社区技术顾问、HaloDB技术顾问、TiDB社区技术布道师、青学会MOP技术社区专家顾问、国内某高校企业实践指导教师 公众号/墨天轮:Digital Observer;CSDN/PGfans:施嘉伟;ITPUB:sjw1933

背景概述

某医院总院数据库都连接正常,但分院客户端每空闲一段时间,数据库连接就夯住或直接断开。分析此类问题本能的反应问题出在网络层面。

问题详细描述

引起数据连接异常的问题,多种多样,具体问题具体分析, sqlnet网络连接跟踪具体设置如下: 在客户端sqlnet.ora文件中加入以下内容

TRACE_LEVEL_CLIENT=16
TRACE_FILE_CLIENT=CLIENT  
TRACE_TIMESTAMP_CLIENT=ON
trace_directory_client=C:\oracle\trace

详细解释一下以上参数值:

TRACE_LEVEL_CLIENT –开启客户端跟踪级别
TRACE_LEVEL_LISTENER的取值范围为0~16,当然级别越高,收集的信息就相对越全面,系统默认是0,即不生成trace信息
    off or 0 for no trace output
    user or 4 for user trace information
    admin or 10 for administration trace information
    support or 16 for Oracle Support Services trace information
TRACE_FILE_CLIENT --设置客户端和服务器端的trace文件的名称
TRACE_TIMESTAMP_CLIENT --是否在trace中写入每条trace信息的dd-mon-yyyy hh:mi:ss:mi时间戳
TRACE_DIRECTORY_CLIENT  --设置客户端和服务器端的trace文件的目录

重大事件支持细节

客户端跟踪内容如下:

(3880) [11-3月 -2014 12:21:10:750] ntt2err: soc 808 error - operation=5, ntresnt[0]=517, ntresnt[1]=54, ntresnt[2]=0
(3880) [11-3月 -2014 12:21:10:750] ntt2err: exit
(3880) [11-3月 -2014 12:21:10:750] nttrd: exit
(3880) [11-3月 -2014 12:21:10:750] nsprecv: error exit
(3880) [11-3月 -2014 12:21:10:750] nserror: entry
(3880) [11-3月 -2014 12:21:10:750] nserror: nsres: id=0, op=68, ns=12547, ns2=12560; nt[0]=517, nt[1]=54, nt[2]=0; ora[0]=0, ora[1]=0, ora[2]=0
(3880) [11-3月 -2014 12:21:10:750] nsrdr: error exit
(3880) [11-3月 -2014 12:21:10:750] snsbitts_ts: entry
(3880) [11-3月 -2014 12:21:10:750] snsbitts_ts: acquired the bit
(3880) [11-3月 -2014 12:21:10:750] snsbitts_ts: normal exit
(3880) [11-3月 -2014 12:21:10:750] snsbitcl_ts: entry
(3880) [11-3月 -2014 12:21:10:750] snsbitcl_ts: normal exit
(3880) [11-3月 -2014 12:21:10:750] snsbitts_ts: entry
(3880) [11-3月 -2014 12:21:10:750] snsbitts_ts: acquired the bit
(3880) [11-3月 -2014 12:21:10:750] snsbitts_ts: normal exit
(3880) [11-3月 -2014 12:21:10:750] nsdo: nsctxrnk=0
(3880) [11-3月 -2014 12:21:10:750] snsbitcl_ts: entry
(3880) [11-3月 -2014 12:21:10:750] snsbitcl_ts: normal exit
(3880) [11-3月 -2014 12:21:10:750] nsdo: error exit
(3880) [11-3月 -2014 12:21:10:750] nioqrc:  wanted 1 got 0, type 0
(3880) [11-3月 -2014 12:21:10:750] nioqper:  error from nioqrc
(3880) [11-3月 -2014 12:21:10:750] nioqper:    ns main err code: 12547
(3880) [11-3月 -2014 12:21:10:750] nioqper:    ns (2)  err code: 12560
(3880) [11-3月 -2014 12:21:10:750] nioqper:    nt main err code: 517
(3880) [11-3月 -2014 12:21:10:750] nioqper:    nt (2)  err code: 54
(3880) [11-3月 -2014 12:21:10:750] nioqper:    nt OS   err code: 0
(3880) [11-3月 -2014 12:21:10:750] nioqer: entry
(3880) [11-3月 -2014 12:21:10:750] nioqer:  incoming err = 12151
(3880) [11-3月 -2014 12:21:10:750] nioqce: entry
(3880) [11-3月 -2014 12:21:10:750] nioqce: exit
(3880) [11-3月 -2014 12:21:10:750] nioqer:  returning err = 3135
当夯住的时候跟踪内容如下:
(3880) [11-3月 -2014 12:21:10:781] nsprecv: reading from transport...
(3880) [11-3月 -2014 12:21:10:781] nttrd: entry
我们可以看到在错误出现之前,从服务端发过来的包没有到客户端,从客户端的跟踪诊断可以看到handshake is completed
(3880) [11-3月 -2014 12:21:10:843] nscon: connect handshake is complete
接着显示最后一个数据包从客户机发送(nspsend)
(3880) [11-3月 -2014 12:21:10:859] nspsend: plen=168, type=6
(3880) [11-3月 -2014 12:21:10:859] nttwr: entry
(3880) [11-3月 -2014 12:21:10:859] nttwr: socket 808 had bytes written=168
(3880) [11-3月 -2014 12:21:10:859] nttwr: exit
(3880) [11-3月 -2014 12:21:10:859] nspsend: packet dump
(3880) [11-3月 -2014 12:21:10:859] nspsend: 00 A8 00 00 06 00 00 00  |........|
(3880) [11-3月 -2014 12:21:10:859] nspsend: 00 00 DE AD BE EF 00 9E  |........|
(3880) [11-3月 -2014 12:21:10:859] nspsend: 0A 20 01 00 00 04 00 00  |........|
(3880) [11-3月 -2014 12:21:10:859] nspsend: 04 00 03 00 00 00 00 00  |........|
然后客户端等待一段时间,例子是5分钟。显示接收数据包,但包从未到来。
(3880) [11-3月 -2014 12:21:10:984] nsrdr: recving a packet
(3880) [11-3月 -2014 12:21:10:984] nsprecv: entry
(3880) [11-3月 -2014 12:21:10:984] nsprecv: reading from transport...
(3880) [11-3月 -2014 12:21:10:984] nttrd: entry
(3880) [11-3月 -2014 12:21:32:406] ntt2err: entry
(3880) [11-3月 -2014 12:21:32:406] ntt2err: soc 352 error - operation=5, ntresnt[0]=517, ntresnt[1]=54, ntresnt[2]=0
(3880) [11-3月 -2014 12:21:32:406] ntt2err: exit
(3880) [11-3月 -2014 12:21:32:406] nttrd: exit
(3880) [11-3月 -2014 12:21:32:406] nsprecv: error exit
(3880) [11-3月 -2014 12:21:32:406] nserror: entry
(3880) [11-3月 -2014 12:21:32:406] nserror: nsres: id=0, op=68, ns=12547, ns2=12560; nt[0]=517, nt[1]=54, nt[2]=0; ora[0]=0, ora[1]=0, ora[2]=0
(3880) [11-3月 -2014 12:21:32:406] nsrdr: error exit
(3880) [11-3月 -2014 12:21:32:406] snsbitts_ts: entry
(3880) [11-3月 -2014 12:21:32:406] snsbitts_ts: acquired the bit
(3880) [11-3月 -2014 12:21:32:406] snsbitts_ts: normal exit
(3880) [11-3月 -2014 12:21:32:406] snsbitcl_ts: entry
(3880) [11-3月 -2014 12:21:32:406] snsbitcl_ts: normal exit
(3880) [11-3月 -2014 12:21:32:406] snsbitts_ts: entry
(3880) [11-3月 -2014 12:21:32:406] snsbitts_ts: acquired the bit
(3880) [11-3月 -2014 12:21:32:406] snsbitts_ts: normal exit
(3880) [11-3月 -2014 12:21:32:406] nsdo: nsctxrnk=0
(3880) [11-3月 -2014 12:21:32:406] snsbitcl_ts: entry
(3880) [11-3月 -2014 12:21:32:406] snsbitcl_ts: normal exit
(3880) [11-3月 -2014 12:21:32:406] nsdo: error exit
(3880) [11-3月 -2014 12:21:32:406] nioqrc:  wanted 1 got 0, type 0
(3880) [11-3月 -2014 12:21:32:406] nioqper:  error from nioqrc
(3880) [11-3月 -2014 12:21:32:406] nioqper:    ns main err code: 12547
(3880) [11-3月 -2014 12:21:32:406] nioqper:    ns (2)  err code: 12560
(3880) [11-3月 -2014 12:21:32:406] nioqper:    nt main err code: 517
(3880) [11-3月 -2014 12:21:32:406] nioqper:    nt (2)  err code: 54
(3880) [11-3月 -2014 12:21:32:406] nioqper:    nt OS   err code: 0
(3880) [11-3月 -2014 12:21:32:406] nioqer: entry
(3880) [11-3月 -2014 12:21:32:406] nioqer:  incoming err = 12151
(3880) [11-3月 -2014 12:21:32:406] nioqce: entry
(3880) [11-3月 -2014 12:21:32:406] nioqce: exit

结论及解决方案

通过以上的方法,从跟踪信息可以确定是网络层的问题由于丢包引起的,主要还是由于防火墙上策略设置的问题,最后查明原来在防火墙上禁用了长连接。开启后问题解决。 hhh6.jpg

相关推荐