Oracle 连接故障的排查
1、 故障现象
通过resin中间件建立连接池,时间特别长。
2、 故障分析和排除
1)检查建立连接的jsp程序,非常简单的调用jdbc,没有问题。担心jdbc driver for oracle在数based on IBM AIX,但因为找不到更合适的版本,只能放弃这个方向。
2)在数据库端执行lsnrctl status反应时间特别长。Lsnrtcl start,lsnrctl stop也很慢。
检查发现listener的log很大,对该log改名
Mv listener.log listener.log.old
Touch listener.log
执行lsnrctl的时间很快缩短,似乎问题得到了解决。
标准的listener.ora的格式如下(支持两个instance):
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = ora92))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.11)(PORT = 1521))
)
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = client)
(ORACLE_HOME = /app/oracle/product/9.2.0)
)
(SID_LIST =
(SID_DESC =
(SID_NAME = bbnec)
(ORACLE_HOME = /app/oracle/product/9.2.0)
)
)
3)在数据库端和另一台服务器(双机环境)执行sqlplus conn,发现还是很慢。Lsnrctl依然很慢。
典型的listener故障报错信息如下:
aix broken pipe
lost contact
等等。
重新启动数据库,故障现象没有好转。
SQL>shutdown immediate
SQL>startup
4)无奈之下,重新启动计算机。
重新启动计算机时,由于没在主控台,需要通过网络远程登录过去。在服务器的ip 地址能ping通,而且确认服务器已经启动的情况下,telnet该服务器需要等待非常长的时间,以致于好几次都放弃telnet登录了。最终通过telnet能顺利登录服务器,但故障现象依旧。
为什么telnet 需要很长时间呢?
检查 DNS 设置,原来服务器配置了/etc/resolv.conf。这个文件的意义在于,如果不存在,表示本机的域名服务由/etc/hosts提供,如果存在且空,表示本机是域名服务器,如果存在且非空,表示本机是由域名服务器提供域名解析的客户机。
3、 总结
在排除故障的过程中,曾经猜想过可能是DNS问题,因为在ping hostname的时候就非常慢。但是,做梦也没想到,在一个正式的生产系统中,有人会做这样一个有害的dns设置。而且,连接慢应该是一个久已存在的问题,只是以前没有注意到而已。问题的原因很简单,但排除故障的过程很长,花了整整一天,只是因为发生了不该发生的事情。
本文转载自:http://wenku.baidu.com/view/d046670552ea551810a68766.html?from_page=view&from_mod=download