环境:Linux 4.7 + Oracle 10g Version 10.2.0.1.0
故障现象:
[oracle@dbserv ~]$ lsnrctl status
LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 25-JUN-2012 10:15:56
Copyright (c) 1991, 2005, Oracle.All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
...无响应…
[oracle@dbserv ~]$ lsnrctl start
LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 25-JUN-2012 10:17:32
Copyright (c) 1991, 2005, Oracle.All rights reserved.
...无响应…
网上资料说,这个问题被最终确认为一个BUG,BUG号为:4518443,如下是诊断及具体处理过程:
查看日志,正常:
[oracle@dbserv ~]$ cd /oracle/admin/test/bdump/
[oracle@dbserv bdump]$ tail -100lf alert_test.log
Thread 1 advanced to log sequence 1600
Current log# 1 seq# 1600 mem# 0: /oradata/test/redo01.log
Sun Jun 24 12:00:14 2012
Thread 1 advanced to log sequence 1601
Current log# 2 seq# 1601 mem# 0: /oradata/test/redo02.log
Mon Jun 25 05:40:49 2012
Thread 1 advanced to log sequence 1602
Current log# 3 seq# 1602 mem# 0: /oradata/test/redo03.log
发现两个监听进程:
[oracle@dbserv ~]$ ps -ef | grep tnslsnr
oracle 1307710 Jun21 ?00:00:14 /oracle/product/10.2.0/bin/tnslsnr LISTENER -inherit
oracle23977 227080 10:24 pts/200:00:00 grep tnslsnr
oracle24120 130770 Jun23 ?00:00:00 /oracle/product/10.2.0/bin/tnslsnr LISTENER -inherit
在这里出现两个Listener进程,而且一个进程和另一个的子进程。如下删除了子进程后,系统恢复正常:
[oracle@dbserv ~]$ kill -9 24120
[oracle@dbserv ~]$ ps -ef | grep tnslsnr
oracle1307710 Jun21 ?00:00:14 /oracle/product/10.2.0/bin/tnslsnr LISTENER -inherit
oracle24733 227080 10:28 pts/200:00:00 grep tnslsnr
[oracle@dbserv ~]$ lsnrctl status
LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 25-JUN-2012 10:28:30
Copyright (c) 1991, 2005, Oracle.All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
AliasLISTENER
VersionTNSLSNR for Linux: Version 10.2.0.1.0 - Production
Start Date21-JUN-2012 02:14:36
Uptime4 days 8 hr. 13 min. 53 sec
Trace Leveloff
SecurityON: Local OS Authentication
SNMPON
Listener Parameter File/oracle/product/10.2.0/network/admin/listener.ora
Listener Log File/oracle/product/10.2.0/network/log/listener.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=dbserv)(PORT=1521)))
Services Summary...
Service "test" has 1 instance(s).
Instance "test", status READY, has 1 handler(s) for this service...
Service "testXDB" has 1 instance(s).
Instance "test", status READY, has 1 handler(s) for this service...
Service "test_XPT" has 1 instance(s).
Instance "test", status READY, has 1 handler(s) for this service...
The command completed successfully
[oracle@dbserv ~]$ lsnrct reload
-bash: lsnrct: command not found
[oracle@dbserv ~]$
故障恢复正常,如果此时监听还是无响应,则可以Kill另一个Listener进程后重启监听即可。
在非RAC环境下,在Listener上增加
SUBSCRIBE_FOR_NODE_DOWN_EVENT_<listener_name>=OFF
参数也能避免该Oracle Bug
在linstener上增加参数:
[oracle@dbserv admin]$ vi listener.ora
# listener.ora Network Configuration File: /oracle/product/10.2.0/network/admin/listener.ora
# Generated by Oracle configuration tools.
SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER_TEST=OFF
SID_LIST_LISTENER_test =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /oracle/product/10.2.0)
(PROGRAM = extproc)
)
)
LISTENER_test=
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC2))
(ADDRESS = (PROTOCOL = TCP)(HOST = dbserv)(PORT = 1521))
)
)
转自:http://blog.itpub.net/post/38575/527965
解决参开:http://qbaok.blog.163.com/blog/static/101292652009827113945863/;
http://www.eygle.com/archives/2007/06/tns_child_listener_forked.html