Oracle 10g Lsnrctl没有反映 无法连接数据库

2015-02-13 23:46:12 · 作者: · 浏览: 42

问题诊断:Oracle监听宕了


经上网查询资料,发现这是由于Oracle 10.2.0.1.0中一个编号为4518443的bug导致的,这个bug会自动创建一个子监听器,当出现这种情况时,监听就会挂起。而且次BUG在任何操作系统中均存在。


解决方式:
1、查看LISTNER进程(两条语句均可以)
$ ps aux |grep LISTENER
$ ps aux |grep tnslsnr
正常情况只有一个LISTENER进程,而此BUG则会出现两个LISTENER进程,因此需要关闭一个进程。


2、kill LISTENER进程(两个进程均需要kill)
$ kill -9 26184


3、重启LISTENER
$ lsnrctl stop
$ lsnrctl start


4、再次查看LISTNER进程
$ ps aux |grep LISTENER


oracle? ? 9635 10.8? 0.0 204508? 9512 ?? ? ? ? Rsl? Sep18 620:18 $ORACLE_HOME/bin/tnslsnr LISTENER -inherit


这个时候就会发现只存在一条LISTENER进程


?


到这里为止只是保证了LISTENER可以正常使用,如果不再进一步处理,则过一段时间还是会出现相同的问题。因此我们需要彻底的解决此问题


5、彻底解决
5.1:升级解决
将oracle版本升级到oracle 10.2.0.3以后的版本既可以。
Ps:在线升级线上生产数据库是存在极大的风险的,一旦升级失败将导致线上应用全部无法访问,因此在线上使用的生产数据库不建议使用此方法来解决这个问题,除非是升级完毕后才投入到线上使用。


5.2:修改listener.ora文件
在listener.ora文件中加上如下参数,SUBSCRIBE_FOR_NODE_DOWN_EVENT_=OFF ##这里的listener_name是配置的listener的名字,如果是默认的就是LISTENER。具体修改如下


$ vi $ORACLE_HOME/network/admin/listener.ora


SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER=OFF


#可以添加在最后一行


然后再重启LISTENER
$ lsnrctl stop
$ lsnrctl start


注:如果仅仅是修改这一个BUG,建议大家使用修改listener.ora文件这个方式,同时也提醒大家在Oracle正式投入线上使用之前先升级Oracle。