`

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

阅读更多

环境:

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

详见metalink。340091.1,主要摘录如下:

写道
Bug 4518443 is fixed in 10.2.0.3

- OR -

Apply Patch 4518443 for the problem (if a patch is available)

- OR -

As a workaround, the following parameter can be added to listener.ora
SUBSCRIBE_FOR_NODE_DOWN_EVENT_<listener_name>=OFF
Where <listener_name> should be replaced with the actual listener name configured in the LISTENER.ORA file.

For example, if the listener name is LISTENER (default), the parameter would be:
SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER=OFF

This will prevent the listener from registering against ONS (Oracle Notification Services), which is the area affected by bug:4518443. For more information on ONS, please refer to eg. the Oracle10g Release 2 documentation ("Oracle Clusterware and Oracle Real Application Clusters Administration and Deployment Guide").

Please note, adding SUBSCRIBE_FOR_NODE_DOWN_EVENT_<listener_name> to listener.ora file on RAC, will mean that FAN (fast application notification) will not be possible. See Note 220970.1 RAC: Frequently Asked Questions for further information on FAN
 

 

解决方案:
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

lncrctl start

 

按照 metalink的说法,这个语句关闭了监听自动向ONS(Oracle Notification Services)注册,正是这个注册可能导致监听启动子进程。ONS是RAC中的一个组件,禁用该特性将导致RAC的FAN(Fast Application Notification)特性不可用。

如果是RAC则必须打补丁。

我采用的是这个方式。

 

补充一下:有网友反映,

“有时候加上这句话无效,连续两天出现swap和load过高仍导致数据库无法提供服务,甚至OS都无法登陆。kill掉子进程后系统恢复正常。按照Oracle的建议,删除了ONS的配置文件$ORACLE_HOME/opmn/conf /ons.config,暂时看起来正常了。

我没有遇到,先不做评论,到时候再说吧。

 

2、

在$ORACLE_HOME/opmn/conf目录下将ons.config文件移除


3、打补丁

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。

  • 大小: 21.6 KB
  • 大小: 18.3 KB
分享到:
评论

相关推荐

    Oracle10.2.0-server 安装包

    Oracle10.2.0-server 安装包 链接:https://pan.baidu.com/s/1l_s30v1uXqLUjYTYozVong 提取码:rmib 复制这段内容后打开百度网盘手机App,操作更方便哦

    两个oracle数据库的监听的配置

    通过上述配置,我们可以在同一台服务器上成功地运行两个不同的Oracle实例,并且可以通过网络访问这些实例。这对于提高系统的可维护性、扩展性和可用性具有重要意义。需要注意的是,实际操作过程中还需根据具体的业务...

    Oracle 10.2.0 最新的JDBC驱动ojdbc14.jar

    其中,`hostname`是Oracle服务器的主机名,`port`是监听的TCP端口,`service_name`是Oracle服务名,`username`和`password`是数据库登录凭证。 4. 执行SQL语句: ```java Statement stmt = conn.createStatement...

    oracle驱动jar包10.2.0

    Oracle驱动jar包10.2.0是Oracle公司为Java应用程序提供的一种数据库连接驱动,它使得Java程序能够与Oracle数据库进行交互。Oracle JDBC驱动(Java Database Connectivity)是Oracle官方提供的用于在Java应用程序中...

    oracle监听无法启动

    ### Oracle监听无法启动问题解析与解决方案 在Oracle数据库管理中,遇到监听器(Listener)无法启动的情况是非常常见的问题之一。监听器是Oracle网络组件的重要部分,主要负责接收客户端的连接请求,并将其转发到...

    超经典 windowsXP下oracle9.2.0.6到oracle10.2.0升级.doc

    ### Oracle 9.2.0.6 至 Oracle 10.2.0 升级实战 #### 一、背景及重要前提 本文档详细记录了在Windows XP平台下,从Oracle 9.2.0.6升级至Oracle 10.2.0的全过程。在进行此类升级时,需特别注意Oracle 9i版本的要求...

    RedHat AS4 下安装oracle10.2.0

    首先创建`oinstall`和`dba`两个组,然后创建`oracle`用户,并将其添加到这两个组中。此外,通过修改`/etc/security/limits.conf`和`/etc/pam.d/login`文件,设置Oracle用户的最大进程数和文件句柄数,以适应Oracle...

    Linux下配置PHP5连接Oracle 10.2.0

    Linux下配置PHP5连接Oracle 10.2.0

    linux下oracle启动及关闭

    总之,Linux下Oracle的启动与关闭涉及多个层面的操作,包括环境变量的配置、监听器和数据库实例的管理,以及辅助工具的控制。熟练掌握这些命令和流程,对于高效管理和维护Oracle数据库至关重要。

    oracle监听无法启动[文].pdf

    ### Oracle监听无法启动的原因及解决方法 在日常的数据库维护工作中,经常会出现Oracle监听器(Listener)无法启动的情况。...通过上述步骤,可以有效地解决Oracle监听器无法启动的问题,确保数据库服务的稳定运行。

    设置oracle10g自动启动

    在Redhat Linux环境中设置Oracle 10g数据库自动启动是一项重要的系统管理任务,这确保了在服务器重启后,Oracle数据库能够自动恢复并提供服务。Oracle 10g是一款广泛使用的数据库管理系统,尤其在企业级应用中,其...

    在Fedora 8上安装Oracle(10.2.0)

    在Fedora 8系统上安装Oracle 10.2.0是一个相对复杂的过程,因为Oracle数据库通常不直接支持Linux的最新版本。Fedora 8是一个较旧的操作系统,Oracle 10g则是一个历史悠久的数据库产品,这使得安装过程中可能需要解决...

    在3650上安装RedHat Linux及Oracle10.2.0并升级到10.2.0.3 同时创建数据库和导入数据.pdf

    在本教程中,我们将详细介绍如何在3650服务器上安装Red Hat Linux AS 5以及Oracle 10.2.0数据库,并将其升级至10.2.0.3,同时创建数据库并导入数据。首先,让我们一步步地了解这个过程。 1. **Linux安装** - 观察...

    Oracle10g默认目录结构

    在标准的Oracle Universal Installer安装流程中,Oracle_Base通常被设置为`system_drive:\oracle\product\10.2.0`,具体路径可能会根据不同的操作系统和安装选项而有所变化。此目录下包含了所有与Oracle相关的配置、...

    oracle启动脚本

    - **初始化脚本**:创建一个名为`vioracle10g`的初始化脚本,该脚本位于`/etc/rc.d/init.d/`目录下,用于实现Oracle服务的自动启动与停止功能。 - **脚本内容**: - 定义了`ORA_HOME`变量指向Oracle安装路径,`ORA_...

    OracleDBConsoleorcl服务无法启动问题解决

    - 根据日志信息,可以看到环境变量`ORACLE_HOME`设置为了`c:\oracle\product\10.2.0\db_1`,这与安装路径D:\oracle\product\10.1.0\Db_1不符,可能导致服务无法找到正确的Oracle安装位置。 - 在批处理文件`emctl....

    oracle客户端连接服务器常见问题

    ### Oracle客户端连接服务器常见问题及解决方案 在使用Oracle数据库的过程中,客户端与服务器之间的连接问题是较为常见的技术难点之一。本文将针对“Oracle客户端连接服务器常见问题”进行深入解析,并提供具体的...

    OpenSUSE10.2.0下面安装ORACLE

    使用`groupadd`命令创建`oinstall`和`dba`组,然后创建`oracle`用户,将其分配到这两个组。设置适当的密码,并设定用户的家目录。 接下来,创建Oracle的安装目录,例如`/opt/oracle/product/10.2.0`,并调整所有者...

Global site tag (gtag.js) - Google Analytics