前几天,客户打电话,说数据库有问题。已经连接上的用户正常,新用户无法连接到数据库。电话指挥,启动监听时,报告地址已经被占用。用lsnrctl status 命令查看监听状态,一直等待,无法连接到监听,长时间等待后,报错退出。具体什么错误,现场人员没说清楚。由于比较紧张,我也没多问。基本判断是监听出了问题。然后用ps -ef命令查看,结果发现系统中有两个监听进程,一个的父ID是1,另一个的父ID是第一个监听的PID。让他们将两个监听进程都KILL掉,然后重新启动监听,故障排除。
由于当时不在现场,因此,上面的现象都是在电话里听现场人员讲的。
事后,我去检查,在日志中发现以下错误:
[php]
***********************************************************************
Fatal NI connect error 12170.
VERSION INFORMATION:
TNS for IBM/AIX RISC System/6000: Version 10.1.0.3.0 - Production
TCP/IP NT Protocol Adapter for IBM/AIX RISC System/6000: Version 10.1.0.3.0 - Production
Oracle Bequeath NT Protocol Adapter for IBM/AIX RISC System/6000: Version 10.1.0.3.0 - Production
Time: 29-DEC-2005 04:22:27
Tracing not turned on.
Tns error struct:
ns main err code: 12535
TNS-12535: TNS: operation timed out
ns secondary err code: 12560
nt main err code: 505
TNS-00505: Operation timed out
nt secondary err code: 78
nt OS err code: 0
Client address: (ADDRESS=(PROTOCOL=tcp)(HOST=XXXX)(PORT=1025))
[/php]
这种类似错误还有几个,但任何一个类似错误,从时间上看,都跟故障发生时间对不上。
[php]
TNSLSNR for IBM/AIX RISC System/6000: Version 10.1.0.3.0 - Production on 29-DEC-2006 15:00:27
Copyright (c) 1991, 2004, Oracle. All rights reserved.
System parameter file is /oracle/app/oracle/oracle10g/network/admin/listener.ora
Log messages written to /oracle/app/oracle/oracle10g/network/log/listener.log
Trace information written to /oracle/app/oracle/oracle10g/network/trace/listener.trc
Trace level is currently 0
Started with pid=2297864
Error listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=XXXX)(PORT=1521)))
TNS-12542: TNS:address already in use
TNS-12560: TNS: protocol adapter error
TNS-00512: Address already in use
IBM/AIX RISC System/6000 Error: 67: Address already in use
[/php]
这个错误应该是我在电话里第一次让他们在KILL进程之前启动监听时报告的错误,跟电话里得到的消息一致。
现在的问题是,在系统中,怎么会出现两个监听进程?而且从PID来看,一个监听进程启动了另一个监听进程,这在道理上说不通!
由于这两天上不了metalink,到这里来问问,看大家以前遇到过这样的问题没有!
谢谢!