关于Oracle10.2.0自行启动两个监听进程导致服务中断问题

来源:互联网 发布:手机全景拍摄软件 编辑:程序博客网 时间:2024/05/18 07:49

环境:

 

AIX6.1

 

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bi

 

Tomat 5.0.28

 

Oracle的安装文件是 10gr2_aix5l64_database.cpio.gz

 

 

 

问题描述:

 

服务运行大约一周后,Oracle不能连接、网站、业务系统中断服务。tomcat没有问题,但是Oracle监听不能正常服务,勇pl/sql连接长时间无反应,用proxool的监控servlet看一下发现是可用连接池可用连接数为0。初步确定是数据库出现了问题。

 

 

 

 

 

排查问题:

 

1、用sqlplus/nolog、conn /as sysdba、select cos(1) from dual 后可以正常查询数据库内容,确定数据库本身没有问题,问题可能在监听上;

 

2、执行lsnrctl status,


$ lsnrctl stop

LSNRCTL for IBM/AIX RISC System/6000: Version 10.2.0.1.0 - Production on 01-SEP- 2010 14:46:33

Copyright (c) 1991, 2005, Oracle. All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=KJPTSERVER1)(PORT=1521)) )

......

 

长时间没有反应,确定问题在监听上;

 

3、执行ps -ef|grep tnslsnr,

 

结果如下

 

$ ps -ef|grep tnsl
oracle 422142 1 0 Aug 25 - 9:44 /oracle/database/product/10.2.0/bin/tnslsnr LISTENER -inherit

oracle 1024058 422142 0 04:50:31 - 0:00 /oracle/database/product/10.2.0/bin/tnslsnr LISTENER -inherit


oracle 1077302 831654 0 14:50:11 pts/1 0:00 grep tnsl

 


 

发现两个lsnrctl进程(前两个),从激活时间看,第一个监听是正常的、最初启动Oracle时创建的,第二个监听是第一个的派生、是不正常的。

 

4、kill第二个可疑监听进程

 

kill -9 1024058

 

一切恢复正常。

 

 

 

 

 

原因解读:

 

在Metalink上可以找到相关问题的很多解释,这个问题被最终确认为Oracle10201一个BUG,BUG号为:4518443,其会自动创建一个子监听器,当出现此情况时,监听器将会挂起。

Oracle称在较大压力下,监听进程可能出现间歇性停止服务,此时Oracle会spaw出另外一个监听进程,进而导致两个监听进程互相影响的故障。

检查监听日志文件 /oracle/database/product/10.2.0/network/log/listener.log 有如下语句:

WARNING: Subscription for node down event still pending

 

 

 

 

 

解决方案:


1、在非RAC环境

下,可以通过在listener.ora中设置参数:

SUBSCRIBE_FOR_NODE_DOWN_EVENT_<listener_name>=OFF

来暂时回避这个BUG。

 

具体操作:
在listener.ora 文件里加入(我加在了最后):(NO-RAC)

SUBSCRIBE_FOR_NODE_DOWN_EVENT_<listener_name>=OFF

其中,<listener_name> 是数据库的监听器的名称。如:默认情况下,监听器名为:LISTENER 。则语句就是:
SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER


=OFF


重启监听程序:

lsnrctl stop

 


lsnrctl start

 

 


lncrctl start

 



2、Oracle已经推出了相关Patch用来修正这个问题,可以在metalink上下载相关补丁并使用

 

/oracle/database/product/10.2.0/OPatch/opatch apply 安装即可。遗憾的是需要oracle服务帐号,我这里的没有购买oracle又没找到“免费”的,所以没有试验。

 

 

 

如果哪位有10.2.0的4518443补丁文件麻烦留言或者发给我freemail1001@163.com,windows、aix、linux下的都可以。

 

 

 

 

 

我在windows[10.2.0.1.0]、linux[10.2.0.1.0]下安装的都没有问题,只有aix下会出现这样的问题,怀疑只有oracle10.0.2.0.1的aix发行版本才有这个bug。

 

bug 4518443 LISTENER 无响应

上一篇 / 下一篇  2008-09-06 10:59:30

查看( 293 ) / 评论( 0 ) / 评分( 0 / 0 )

    大清早被叫起来,说是产品库挂掉了。登上去看 网页打不开,plsql devper也连不过去 没响应,判断大概是listener又出问题了,登到OS上 ps -ef|grep listener,果然有出现了多个子进程

$ ps -ef |grep LIS
oracle    5679     1  1 11:02 ?        00:00:02 /home/oracle/product/10.2.0/db_1/bin/tnslsnr LISTENER -inherit
oracle    7035 24877  0 11:06 pts/0    00:00:00 grep LIS
oracle    7037     1  0 11:06 ?        00:00:00 /home/oracle/product/10.2.0/db_1/bin/tnslsnr LISTENER -inherit

lsnrctl stop/status/reload 均没反应,直接KILL掉进程,再lsnrctl start就恢复正常了。

查了下,果然是个BUG--  bug 4518443  ,ORACLE 10.2.0.3之前版本都有。

解决方法是:打补丁4518443 或者在listener.ora 文件里加入:
SUBSCRIBE_FOR_NODE_DOWN_EVENT_<listener_name>=OFF
其中,<listener_name> 是数据库的监听器的名称。如:默认情况下,监听器名为:LISTENER 。则语句就是:
SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER=OFF
重启监听程序:
lsnrctl stop
lncrctl start
 
但有时候这种方法没有什么用即使加了SUBSCRIBE_FOR_NODE_DOWN_EVENT_=OFF。连续两天出现swap和load过高导致数据库无法提供服务,甚至OS都无法登陆。在ps后发现有两个监听进程,kill后系统恢复正常。按照Oracle的建议,删除了ONS的配置文件$ORACLE_HOME/opmn/conf/ons.config,暂时看起来正常了
 
按照metalink的说法,这个语句关闭了监听自动向ONS(Oracle Notification Services)注册,正是这个注册可能导致监听启动子进程。ONS是RAC中的一个组件,禁用该特性将导致RAC的FAN(Fast Application Notification)特性不可用。还好我这里两台都是单机,这么解决应该没什么问题。
原创粉丝点击