RAC重建OCR/Voting disk总结

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------

 

你可能感兴趣的:(vmware,oracle,数据库,database,disk,磁盘)