通过对日志的分析,怀疑是oracle 10.2.0.1这个版本上一个严重的BUG。 根据ORACLE官方解释,在任何操作系统版本都有此问题。
现象:
监听器启动后,隔一段时间(长短不定),就会出现无法连接: 若是用10201版本的SQLPLUS,则会出现 NO LISTENER。9207 版本
的SQLPLUS,则会出现:没反应,HANG住。
原因:
10201 版本上的一个BUG:4518443。其会自动创建一个子监听器,当出现此情况时,监听器将会挂起。
/opt/oracle/product/10g/network/log/listener.log有如下语句:
WARNING: Subscription for node down event still pending
当再次出现这种现象时,建议客户先检查是否真因为此BUG造成此现象:
在操作系统命令行下执行下列命令:
$ ps -ef | grep tnslsnr
ora10g 8909 1 0 Sep 15 ? 902:44 /u05/10GHOME/DBHOME/bin/tnslsnr sales -inherit
ora10g 22685 8909 0 14:19:23 ? 0:00 /u05/10GHOME/DBHOME/bin/tnslsnr sales –inherit
正常情况只有一个监听器,而此BUG则会出现两个监听器。
解决方法:
打补丁4518443 或者在listener.ora 文件里加入:
SUBSCRIBE_FOR_NODE_DOWN_EVENT_=OFF
其中,是数据库的监听器的名称。如:默认情况下,监听器名为:LISTENER 。则语句就是:
SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER=OFF
重启监听程序:
lsnrctl stop
lncrctl start
建议:先确定发生故障时,是否是上述的现象;
如果要修改改参数,建议在周末进行,并且进行跟踪观察该参数对数据库的影响,如果出现异常,可以删除该参数后,重启
监听即可恢复原先的状态。
如果要打补丁,需要跟oracle确定补丁的版本,以免由于打补丁引入新的bug。据说,oracle的这个版本bug比较多,建议以
后使用10.2.0.3以上的版本或者升级到这个版本。