author:skate
time:2010/05/10
我的测试环境:
母系统:win2003
虚拟软件:vmware3.2.1
guest系统:centos4.7
oracle db:oracle10.2.1
前两天由于意外原因,同事从新插拔下电源,使我的rac测试环境意外断电,致使表决(votingdisk)虚拟磁盘
故障,致使系统都起不来。怎么办呢?我当时想法是,不到最后一刻,坚决不重装。恢复的过程也是熟悉的过程。
由于是votingdisk磁盘故障,系统无法启动,报votingdisk磁盘无法识别,为了让系统能启动,我把votingdisk磁盘
在vmware里重新添加了一遍,才让系统可以重新启动。系统起来之后,节点rac1又遇到gnome的bug,还好不影响rac的
正常工作。
因为我的votedisk损坏,而且有没有备份,所以只能重建votedisk
votedisk损坏只能重建,重建votedisk有两种方法
1.如果有votedisk备份的话,就用备份恢复
eg:
备份votedisk:dd if=/dev/raw/raw2 of=/tmp/votedisk.bak
恢复votedisk:dd if=/tmp/votedisk.bak of=/dev/raw/raw2
2.没有votedisk备份的话,那就只能重新安装clusterware了(votedisk中信息是在安装clusterware或添加删除节点
时把节点的信息添加进去的,并有ocssd进程维护)
根据我描述的故障现象,现在只能重新安装clusterware来重新初始化votedisk,已达到恢复的目的
这也是最快的方法
步骤:
1.停止所有节点的clusterware stack
[root@rac2 ~]# su - oracle
[oracle@rac2 ~]$ su
Password:
[root@rac2 oracle]# crsctl stop crs
2.备份每个节点的clusterware的目录
[root@rac1 oracle]# mv /u01/crs /u01/crsbak
3.为了避免新配置和旧的配置信息冲突,最好清除就得clusterware配置信息
清理旧配置信息(在各节点运行)
3.1 删除crs自启动信息
修改 /etc/inittab, 删除以下三行.
h1:2:respawn:/etc/init.evmd run >/dev/null 2>&1 </dev/null
h2:2:respawn:/etc/init.cssd fatal >/dev/null 2>&1 </dev/null
h3:2:respawn:/etc/init.crsd run >/dev/null 2>&1 </dev/null
linux:
rm /etc/oracle/*
rm -f /etc/init.d/init.cssd
rm -f /etc/init.d/init.crs
rm -f /etc/init.d/init.crsd
rm -f /etc/init.d/init.evmd
rm -f /etc/rc2.d/K96init.crs
rm -f /etc/rc2.d/S96init.crs
rm -f /etc/rc3.d/K96init.crs
rm -f /etc/rc3.d/S96init.crs
rm -f /etc/rc5.d/K96init.crs
rm -f /etc/rc5.d/S96init.crs
rm -Rf /etc/oracle/scls_scr
rm -f /etc/inittab.crs
cp /etc/inittab.orig /etc/inittab
ps -ef|grep init.d
/etc/init.d/init.crsd
/etc/init.d/init.evmd
/etc/init.d/init.cssd
3.2 清理旧配置信息
rm -rf /etc/oracle/* (删除ocr.loc)
rm -rf /var/tmp/.oracle或/tmp/.oracle
3.3使用dd清除vote disk和ocr(裸设备)
dd if=/dev/zero f=/dev/votedisk_device bs=8192 count=2560
dd if=/dev/zero f=/dev/ocr_device bs=8192 count=12800
参考:
清除10g RAC CRS的方法
http://6month.itpub.net/post/37672/470422
4.分别在每个节点上执行$CRS_HOME/install/rootdelete.sh
5.在任何一个节点上执行脚本$CRS_HOME/install/rootdeinstall.sh,只需要在一个节点上执行即可
以上就是删除crs的配置,下面就是重新安装crs ,执行如下的命令检查,如果没有返回值,那就可以继续安装了
ps -e | grep -i ‘ocs[s]d’
ps -e | grep -i ‘cr[s]d.bin’
ps -e | grep -i ‘ev[m]d.bin’
6.和在步骤5同一个节点上执行脚本$CRS_HOME/root.sh
7.在其他节点执行$CRS_HOME/root.sh,然后注意下最后一个节点的输出,最后还要运行"./VIPCA"
8.用netca重新配置监听器,确认注册到ocr中
这个时候用crs_stat -t -v 可以看到listener,ONS,GSD,VIP注册到ocr中,还需要把asm,数据库也注册到ocr中
9.向ocr中注册ASM
srvctl add asm -n rac1 -i +ASM1 -o $ORACLE_HOME
srvctl add asm -n rac2 -i +ASM2 -o $ORACLE_HOME
10.启动ASM
srvctl start asm -n rac1
srvctl start asm -n rac2
一般在启动最后一个asm实例的时候会报错,一般是因为rac无法确认用哪个网络作为 private interconnect
所以可以通过向两个ASM实例的pfile中添加下面两个参数
在文件里添加两个参数/u01/app/oracle/product/10.2.0/db_1/dbs/init+ASM2.ora
+ASM1.cluster_interconnects='192.168.0.31'
+ASM2.cluster_interconnects='192.168.0.22'
ip一定要写对,否则会出现问题,然后在重启asm实例,问题即可解决
11. 手工注册database对象(数据库的名字要和db_name大小写一样)
srvctl add database -d RAC -o $ORACLE_HOME
12. 手工注册两个实例对象(实例名要和isntance_name大小写一样)
srvctl add instance -d RAC -i rac1 -n rac1
srvctl add instance -d RAC -i rac2 -n rac2
13.修改实例和asm实例的对应关系
srvctl modify instance -d RAC -i RAC1 -s +ASM1
srvctl modify instance -d RAC -i RAC2 -s +ASM2
14.启动数据库(在这过程一般也会报错,所以要向asm实例那样手工指定private interconnect)
sql> alter system set cluster_interconnects='192.168.0.31' scope=spfile sid='*'
sql> alter system set cluster_interconnects='192.168.0.22' scope=spfile sid='*'
然后启动数据库
srvctl start database -d RAC
15.检查ons是否正常
[root@rac2 oracle]# ps -ef |grep ons
root 4008 10066 0 08:39 pts/0 00:00:00 grep ons
root 5660 1 0 06:42 ? 00:00:00 sendmail: accepting connections
oracle 16107 1 0 07:21 ? 00:00:00 /u01/crs/oracle/product/10.2.0/crs/opmn/bin/ons -d
oracle 16108 16107 0 07:21 ? 00:00:00 /u01/crs/oracle/product/10.2.0/crs/opmn/bin/ons -d
[root@rac2 oracle]# onsctl ping
Number of onsconfiguration retrieved, numcfg = 0
ons is not running ...
[root@rac2 oracle]# onsctl start
Number of onsconfiguration retrieved, numcfg = 0
Number of onsconfiguration retrieved, numcfg = 0
onsctl: ons started
[root@rac2 oracle]# onsctl ping
Number of onsconfiguration retrieved, numcfg = 0
ons is running ...
[root@rac2 oracle]#
如果ons无法启动,可以用如下命令,也可以直接编辑文件$CRS_HOME/opmn/conf/ons.config
racgons add_config hostname1:port hostname2:port
racgons remove_config hostname1:port hostname2:port
16.检查网络是否正常用命令oifcfg
eg:添加接口配置
oifcfg setif -global eth0/192.168.2.0:public
oifcfg setif -global eth1/192.168.0.0:cluster_interconnect
17.用下面的两个命令核查配置的正确性
1. [oracle@rac1 ~]$ /tmp/10201_clusterware_linux32/clusterware/cluvfy/runcluvfy.sh stage -post crsinst -n rac1,rac2
2. crs_stat -t -v
到此votingdisk就已经重新配置成功了,但是在这过程中也遇到很不少问题,下面就是对问题
总结,其中第三个问题走了很多弯路,用了小半天的时间,其他的问题很快就都解决了。
1. 由于votingdisk磁盘故障,所以在vmware里重新添加删除磁盘
2. crs的启动问题(节点时间同步)
3. asm2实例无法启动的问题(把点写成逗号)
4. 无法启动数据库的问题
5. onsctl启动的问题
6. 更改/dev/raw属主的问题
7. oifcfg注册网络的问题
具体的问题及解决方法,请参考另一篇文章:http://blog.csdn.net/wyzxg/archive/2010/05/09/5572418.aspx
参考文档:
重建votedisk/ocr
http://www.laoxiong.net/10g_rebuild_crs_rac.html
http://www.dbasoul.com/2010/700.html
------end------