Chanel [K]

面朝大海,春暖花开

Archive for the ‘Oracle Clusterware’ tag

Procwatcher: Useful Script to Monitor Oracle Processes

without comments

也许总在某个时候,作为Oracle DBA的你心里会想,这进程到底在干什么呢?为什么占用这么高的CPU?为什么写这么多数据到磁盘上产生这么大的IO?

当然,我们有各种各样的诊断方法来确认这些进程在做什么,不过,也很有可能在初步的诊断之后,还是一无所获,这时候也许类似于oradebug short_stack这样的命令或者是操作系统级别的debug命令能够让我们在重重迷雾中找到一些指路的明灯。不能否认,在某些时候,只是灵光一闪,从某些特征上忽然醒悟了该从哪个方向入手,就能帮助我们最终解决问题。

这里介绍的Procwatcher是一个shell脚本,运行在UNIX/LINUX操作系统级别,帮助我们给指定的Oracle Clusterware后台进程(比如crsd.bin, evmd.bin等)以及Oracle RDBMS后台进程(比如dbwr, smon, pmon等)进行定期的debug跟踪,将收集的stack traces按照进程和日期存储在磁盘上。

不要期望能够完全看明白stack trace的内容,那些是给专业的Oracle Support人员看的,但是我们至少可以知道在一个进程非常缓慢或者非常忙碌的时候,它被hang在了什么地方,也许是一个类似于kslwait这样的函数,这些就是蛛丝马迹,可以通过这些关键字去Metalink中找寻更有价值的信息。或者把这些trace内容上传给Oracle Support人员,也对解决疑难问题有很大帮助。

此脚本的内部注释非常完整,基本上所有的帮助信息都可以从脚本注释中找到。

启动和关闭脚本的命令分别是:

./prw.sh start 
./prw.sh stop

注意点:
1. 获取stack trace通常会对被debug的进程有短暂的suspend操作,比如ocssd.bin如果被suspend过长(超过css misscount时间),则会导致节点被重启。可以修改脚本中的CRSPROCS参数,将不需要trace的进程去除。

2. 在AIX平台上慎用EXAMINE_CRS=true,也就是在AIX平台上最好不要用这个脚本去获取Oracle Clusterware后台进程的stack trace,可能造成程序被hang住。

3. 默认保留2天的trace记录,可以通过下面的语法修改为3天或者更多。

./prw.sh start 3

可以登录Metalink的朋友可以在Note:459694.1中下载该脚本。
没有Metalink帐号的朋友在这里下载脚本。

Written by kamus

March 4th, 2009 at 5:18 pm

Oracle Clusterware consolidated logging

with 2 comments

使用过Oracle Clusterware 10gR1的朋友应该还记得各个后台进程的log都被散乱地放在各自的目录中,可惜的是,也许你刚刚熟悉了每个log的位置,然后当你将10gR1升级到10gR2,你就发现所有的log你都找不到了,它们不再在原来的位置,Oracle重新整理放在了统一的目录下。

这里记录一下10gR2和11gR1中Oracle Clusterware的log位置。以下$ORACLE_HOME指Oracle RDBMS软件的安装目录,$ORA_CRS_HOME指Oracle Clusterware软件的安装目录。

CRS logs $ORA_CRS_HOME/log/[hostname]/crsd/
CSS logs $ORA_CRS_HOME/log/[hostname]/cssd/
EVM logs $ORA_CRS_HOME/log/[hostname]/evmd
$ORA_CRS_HOME/evm/log/
Resource logs $ORA_CRS_HOME/log/[hostname]/racg
$ORACLE_HOME/log/[hostname]/racg
SRVM logs $ORA_CRS_HOME/log/[hostname]/client
$ORACLE_HOME/log/[hostname]/client
Cluster Network Communication logs $ORA_CRS_HOME/log
OPMN logs $ORA_CRS_HOME/opmn/logs
alert logs $ORA_CRS_HOME/log/[hostname]/alert[hostname].log
OPROCD logs /var/opt/oracle/[hostname]
CLSOMON files $CRS_HOME/log/[hostname]/cssd/oclsomon

当Oracle Clusterware发生问题的时候,需要寻求Oracle Support的帮助,那么这些位置的log都是可能会需要的。

我们也可以使用在10gR2之后Oracle提供的perl脚本来获取诊断信息。
在10gR2版本中,执行:

$./diagcollection.pl -collect

在11gR1版本中,执行:

$ORA_CRS_HOME/bin/diagcollection.pl -crshome=$ORA_CRS_HOME -collect

该脚本执行结束以后,将会产生几个tar.gz文件,包括crsData_[hostname].tar.gz,ocrData_[hostname].tar.gz,oraData_[hostname].tar.gz和basData_[hostname].tar.gz 。

另外如果Oracle Support需要你提供Oracle Clusterware的安装情况,那么可以使用cluvfy实用程序来获得输出。

su - oracle 
cluvfy stage -post crsinst -n all -verbose

Written by kamus

March 4th, 2009 at 1:43 pm

Using Diagwait during Oracle Clusterware Node evictions

with 2 comments

什么情况下Oracle Clusterware会重启(Evict,驱逐)节点机器?

1. 节点机器在interconnect network上无法ping通,没有了network heartbeat,比如网络问题。
2. 节点机器无法存取Voting Disk,没有了disk heartbeat,比如磁盘问题。
3. 由于节点机器过于繁忙,导致没有空闲资源来完成上述的两种动作之一,比如CPU问题,内存问题。

具体的Timeout算法参看Metalink Note:294430.1

通常,在某个节点被驱逐之后,cssd.log或者crsd.log或者操作系统自身的log中会有具体的信息记载,通过这些log可以知道到底是什么原因导致了节点被驱逐。但是,可能在某些情况下,由于操作系统在被强行reboot之前过于繁忙,根本没有任何空余的CPU时间片来将内存中的log内容写入到磁盘log文件中,这时候,我们在log中看到的就是忽然的一段时间空白之后就是Cluster重新启动的信息了。

在10.2.0.3之后,我们可以设置diagwait,来延迟eviction,让系统在重启之前等待几秒,尽量让log可以写入到磁盘上。该功能目前已经backport到10.1.0.5中,因此在 10.1.0.5 (or higher), 10.2.0.3 (or higher) 和11.1.0.6 (or higher)这些版本中都可以设置diagwait。

在不支持的版本中设置diagwait将会得到”unrecognized parameter diagwait specified” 错误提示。

设置diagwait的方法,使用root用户执行以下命令:
1. 停止Clusterware

#crsctl stop crs 
#<CRS_HOME>/bin/oprocd stop

2. 确认Clusterware stack已经完全关闭

#ps -ef |egrep "crsd.bin|ocssd.bin|evmd.bin|oprocd"

3. 在集群的任意节点上设置diagwait等待时间13秒

#crsctl set css diagwait 13 -force

4. 检查diagwait设置是否成功

#crsctl get css diagwait

如果设置成功,则返回13,否则返回”Configuration parameter diagwait is not defined”。

5. 重新启动Oracle Clusterware

#crsctl start crs

在解决完导致节点被驱逐的问题之后,可以将diagwait参数取消。

取消的方法仍然按照上面的命令步骤,只是将第3步中的命令改为:

#crsctl unset css diagwait

在Oracle 10gR2 + AIX5L的系统中,可能由于各种原因(比如操作系统的bug或者数据库的bug),导致OPROCD进程驱逐节点,检查以及解决的方法可以参看Metalink Note:419312.1

Written by kamus

March 2nd, 2009 at 5:14 pm