今天检查数据库中的备份输出脚本时,发现RMAN备份出现了错误。
解决cluster无法启动的问题。
一次RMAN备份报错的诊断过程(一):http://yangtingkun.itpub.net/post/468/493262
一次RMAN备份报错的诊断过程(二):http://yangtingkun.itpub.net/post/468/493273
一次RMAN备份报错的诊断过程(三):http://yangtingkun.itpub.net/post/468/493281
一次RMAN备份报错的诊断过程(四):http://yangtingkun.itpub.net/post/468/493308
一次RMAN备份报错的诊断过程(五):http://yangtingkun.itpub.net/post/468/493358
前面通过了多种方法,但是都无法解决这个问题,只好通过重启数据库来解决,在重启数据库的时候发现,问题很可能不是数据库造成的,而是CLUSTER状态异常导致的。
在前面无论是关闭数据库,还是关闭CLUSTER,都无法顺利正常关闭,最终都需要kill的方法来解决,正是使用了这种极端的手段,导致两个节点的服务器全部重启,最郁闷的是,其中一个节点的无法正常启动,另一个节点虽然顺利启动,但是启动cluster的时候出现了错误:
bash-3.00# more crsctl.2714
OCR initialization failed accessing OCR device: PROC-26: Error while accessing the physical storage Operating System error [No such device or address] [6]
以前碰到过类似的情况,不过上一次碰到这个问题时,两个节点都处于启动状态,所以大约10分钟后,CLUSTER服务和数据库就顺利启动了,但是现在一个节点无法正常启动,另一个节点无法访问OCR设置,也无法启动cluster,导致数据库无法启动。
咨询了一下coolyl,认为问题应该和Oracle关系不大,是VERITAS的CFS没有启动导致的,从操作系统检查虽然可以看到路径存在,但是无论是用sqlplus还是dd直接访问,都无法访问到对象:
bash-3.00$ sqlplus "/ as sysdba"
SQL*Plus: Release 10.2.0.3.0 - Production on 星期三 5月 27 14:20:18 2009
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
已连接到空闲例程。
SQL> startup mount
ORA-01078: failure in processing system parameters
ORA-01565: error in identifying file '/dev/vx/rdsk/datadg/tradedb_spfile'
ORA-27041: unable to open file
SVR4 Error: 6: No such device or address
Additional information: 2
SQL> exit
已断开连接
bash-3.00$ ls -l /dev/vx/rdsk/datadg/tradedb_spfile
crw-rw---- 1 oracle oinstall 311, 42038 May 27 12:30 /dev/vx/rdsk/datadg/tradedb_spfile
bash-3.00$ dd if=/dev/vx/rdsk/datadg/tradedb_spfile f=/export/home/oracle/spfiletradedb.ora
dd: /dev/vx/rdsk/datadg/tradedb_spfile: open: No such device or address
由于对veritas的CFS不熟悉,只好等硬件人员启动节点1,由于节点1在启动的时候还监测到了坏块,因此启动还需要一段时间。
正在没有什么办法可想的时候,得到了高人相助——shahand不愧是veritas的专业人士,简单几个命令就解决了问题。
bash-3.00# ls -l /opt/VRTS*/bin/gab*
lrwxrwxrwx 1 root root 15 Apr 17 2007 /opt/VRTS/bin/gabconfig -> /sbin/gabconfig
lrwxrwxrwx 1 root root 17 Apr 17 2007 /opt/VRTS/bin/gabdiskconf -> /sbin/gabdiskconf
lrwxrwxrwx 1 root root 15 Apr 17 2007 /opt/VRTS/bin/gabdiskhb -> /sbin/gabdiskhb
lrwxrwxrwx 1 root root 14 Apr 17 2007 /opt/VRTS/bin/gabdiskx -> /sbin/gabdiskx
lrwxrwxrwx 1 root root 13 Apr 17 2007 /opt/VRTS/bin/gabport -> /sbin/gabport
bash-3.00# cd /opt/VRTS
bash-3.00# cd bin
bash-3.00# ./gabconfig -a
GAB Port Memberships
===============================================================
bash-3.00# ./gabconfig -l
GAB Driver Configuration
Driver state : Configured
Partition arbitration: Disabled
Control port seed : Disabled
Halt on process death: Disabled
Missed heartbeat halt: Disabled
Halt on rejoin : Disabled
Keep on killing : Disabled
Quorum flag : Disabled
Restart : Enabled
Node count : 2
Disk HB interval (ms): 1000
Disk HB miss count : 4
IOFENCE timeout (ms) : 15000
Stable timeout (ms) : 5000
bash-3.00# ./gabconfig -x
bash-3.00# ./gabconfig -a
GAB Port Memberships
===============================================================
Port a gen 1f5c401 membership ;1
Port b gen 1f5c404 membership ;1
Port f gen 1f5c40e membership ;1
Port h gen 1f5c403 membership ;1
Port q gen 1f5c40c membership ;1
Port v gen 1f5c408 membership ;1
Port w gen 1f5c40a membership ;1
bash-3.00# vxprint -v
Disk group: rootdg
TY NAME ASSOC KSTATE LENGTH PLOFFS STATE TUTIL0 PUTIL0
v opt fsgen ENABLED 40968576 - ACTIVE - -
v rootvol root ENABLED 138861696 - ACTIVE - -
v swapvol swap ENABLED 65553792 - ACTIVE - -
v usr fsgen ENABLED 20494464 - ACTIVE - -
v var fsgen ENABLED 20494464 - ACTIVE - -
Disk group: datadg
TY NAME ASSOC KSTATE LENGTH PLOFFS STATE TUTIL0 PUTIL0
v ocr1 fsgen ENABLED 614400 - ACTIVE - -
v ocr2 fsgen ENABLED 614400 - ACTIVE - -
v tradedb_anhui_1 fsgen ENABLED 8390656 - ACTIVE - -
v tradedb_anhui_2 fsgen ENABLED 8390656 - ACTIVE - -
v tradedb_anhui_3 fsgen ENABLED 8390656 - ACTIVE - -
.
.
.
v vot1 fsgen ENABLED 614400 - ACTIVE - -
v vot2 fsgen ENABLED 614400 - ACTIVE - -
v vot3 fsgen ENABLED 614400 - ACTIVE - -
bash-3.00# ps -ef|grep ora
oracle 5682 2435 0 14:18:54 pts/1 0:00 -sh
oracle 8487 8485 0 15:20:34 ? 0:00 /opt/oracle/product/10.2/crs/bin/ocssd.bin
root 941 1 0 13:08:11 ? 0:01 /opt/oracle/product/10.2/crs/bin/crsd.bin reboot
oracle 2177 2170 0 13:11:48 ? 0:00 /usr/lib/ssh/sshd
oracle 939 1 0 13:08:11 ? 0:00 sh -c sh -c 'ulimit -c unlimited; cd /opt/oracle/product/10.2/crs/log/ahrac2/ev
oracle 2179 2177 0 13:11:48 pts/1 0:00 -sh
oracle 8485 8482 0 15:20:34 ? 0:00 /bin/sh -c ulimit -c unlimited; cd /opt/oracle/product/10.2/crs/log/ahrac2/cssd
root 8422 8356 0 15:20:32 ? 0:00 /opt/oracle/product/10.2/crs/bin/oprocd run -t 1000 -m 500 -f
oracle 9149 1 0 15:20:53 ? 0:00 /opt/oracle/product/10.2/database/bin/tnslsnr LISTENER_AHRAC2 -inherit
oracle 8365 939 0 15:20:32 ? 0:00 /opt/oracle/product/10.2/crs/bin/evmd.bin
oracle 3807 3804 0 13:30:45 ? 0:00 /usr/lib/ssh/sshd
oracle 8482 8357 0 15:20:34 ? 0:00 sh -c /bin/sh -c 'ulimit -c unlimited; cd /opt/oracle/product/10.2/crs/log/ahra
oracle 9267 9265 0 15:20:57 ? 0:00 /opt/oracle/product/10.2/crs/opmn/bin/ons -d
oracle 5697 5682 0 14:19:23 pts/1 0:00 bash
oracle 3809 3807 0 13:30:46 pts/3 0:00 -sh
oracle 9195 1 0 15:20:55 ? 0:00 /opt/oracle/product/10.2/database/bin/racgimon startd tradedb
root 9913 3858 0 15:21:21 pts/3 0:00 grep ora
oracle 9181 941 0 15:20:54 ? 0:00 /bin/sh /opt/oracle/product/10.2/database/bin/racgwrap start
oracle 9265 1 0 15:20:57 ? 0:00 /opt/oracle/product/10.2/crs/opmn/bin/ons -d
oracle 8773 8365 0 15:20:44 ? 0:00 /opt/oracle/product/10.2/crs/bin/evmlogger.bin -o /opt/oracle/product/10.2/crs/
oracle 9190 9181 0 15:20:54 ? 0:00 /opt/oracle/product/10.2/database/bin/racgmain start
oracle 9298 9195 0 15:20:58 ? 0:00 /opt/oracle/product/10.2/database/bin/racgeut -e _USR_ORA_DEBUG=0 -e ORACLE_SID
oracle 9331 9325 8 15:20:58 ? 0:22 oracletradedb2 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle 9299 9298 0 15:20:58 ? 0:00 /opt/oracle/product/10.2/database/bin/racgmdb -s open
oracle 9325 9299 0 15:20:58 ? 0:00 /opt/oracle/product/10.2/database/bin/sqlplus
当两个节点都正常关闭时,任何一个节点先启动后,都可以接管CFS,并加载共享存储设备,但是如果两个节点的状态不正常,就要求两个节点都处于启动状态,CFS才能自动解决状态错误,并加载共享存储,当前由于节点状态异常,且一个无法正常启动,导致CFS没有正常加载,也没有办法自己解决这个错误,需要手工干预。
通过上面的命令gabconfig –x,使得当前节点可以加载共享存储,加载完毕后,一直在检查的cluster后台进程终于可以顺利启动了。
CLUSTER启动后,数据库也顺利启动,而且前面描述的bug现象也消失了,RMAN也可以顺利的连接到数据库中。
随后另一个节点启动成功,执行/etc/init.d/init.crs start后,CLUSTER和数据库顺利启动。
至此问题终于解决。简单总结一下,开始的时候发现问题是由于RMAN连接报错,随后检查发现大量有3个JOB一直在运行,其中最早开始运行的JOB在等待其他节点的缓存数据,最后发现节点1上存在大量僵死的racgmain check进程。
一直认为是数据库中的默写资源被占用,因此杀掉了大量的僵死的会话,但是问题一直没有解决,知道最后尝试重启数据库时发现,数据库的状态和CLUSTER的状态都是不正常的,说明CLUSTER目前工作已经不正常了,因此一些gc cr requect请求会被Hang住,RMAN登陆时要锁住控制文件也无法实现,节点1上启动的大量的racgmain check进程也正是说明了这一点。
也正是CLUSTER状态不正常,导致/etc/init.d/init.crs stop无法正常关闭CLUSTER,造成节点异常重启,并最终导致了OCR设备无法访问的错误。
至于是什么问题导致了CLUSTER状态异常,目前恐怕已经不可考证了,可能是网络的闪断,也可能是CLUSTER或者CFS的bug造成的,Oracle的metalink上有一些类似的bug描述,不过现在已经无法验证了。
如果以后在碰到类似的问题(希望还是不要碰到了),到时候可以再诊断一下。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-618146/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/4227/viewspace-618146/