以FORCE选项VOTEDISK导致OCR配置异常

在一次Oracle 10.2.0.1 RAC环境迁移到新存储的过程中,添加VOTEDISK后,OCR配置出现了异常。
由于RAC环境整体迁移到新存储上,因此需要将OCR和VOTEDISK从原有存储的裸设备上迁移到新存储的裸设备上。
在迁移OCR的时候已经碰到了不少错误,所幸都很快得以解决。
运行ocrconfig replace ocr出现PROT-16错误:https://yangtingkun.net/?p=116
运行ocrconfig replace ocrmirror出现PROT-22错误:https://yangtingkun.net/?p=146
没想到随后的votedisk迁移,虽然并未报错,但是却引发了更大的麻烦,步骤是先增加一个新存储上的votedisk,然后删除所有旧存储上的votedisk,最后添加其他四个新存储上的votedisk,命令如下:

# ./crsctl ADD css votedisk /dev/vote1 –force

使用上面的命令添加前三个votedisk没有问题,添加第四个和第五个时,可能是由于AIX上的10.2.0.1不支持,且使用了force选项,导致命令虽然成功执行,但是实际上ocr中记录的信息是混乱的。
通过命令检查votedisk的配置发现:

# ./crsctl query css votedisk
 0.     0    /dev/vote4
 1.     0    /dev/vote1
 2.     0    /dev/vote4
 3.     0    /dev/vote4
 4.     0    /dev/vote5

配置中出现了重复的VOTEDISK记录,随后通过一系列的delete和add命令使得查询的结果变得正常:

crsctl DELETE css votedisk /dev/vote4 –force
# ./crsctl DELETE css votedisk /dev/vote4 -force
# ./crsctl DELETE css votedisk /dev/vote4 -force
# ./crsctl DELETE css votedisk /dev/vote4 -force
# ./crsctl DELETE css votedisk /dev/vote5 -force
# ./crsctl ADD css votedisk /dev/vote2 -force
# ./crsctl ADD css votedisk /dev/vote3 –force
# ./crsctl query css votedisk
 0.     0    /dev/vote2
 1.     0    /dev/vote1
 2.     0    /dev/vote3

可惜问题并非如此简单,虽然随后的数据库相关操作都没有问题,但是在迁移完成后尝试重启时,发现votedisk的配置仍然存在问题,导致cluster环境无法启动。
检查时发现OCR中记录的信息已经和刚才配置好的信息不符,没有办法值得再次利用delete和add的方法解决,CLUSTER虽然成功启动,但是这个问题的本质是ocr中的配置存在错乱,仅仅利用add votedisk和delete votedisk无法彻底解决这个问题。果然不久以后查询VOTEDISK信息再次发现了问题。
为了解决OCR中错误的配置问题,专门申请了停机时间,并设计了OCR重建的方案,而最坏的打算是将整个RAC环境重建。
当然正常情况下,只需要重建OCR和VOT既可,大概的步骤如下:
备份ocr设备和votedisk设备:

# ./ocrconfig -export /home/oracle/rmanocr_date.exp
# dd IF=/dev/vote1 OF=/rmanhome/oracle/vote_disk_date.bak

删除ocr配置信息

# $ORA_CRS_HOME/bin/crsctl stop crs
# $ORA_CRS_HOME/install/rootdelete.sh
# $ORA_CRS_HOME/install/rootdeinstall.sh

crsctl stop crs和rootdelete.sh需要root在两个节点上分别运行,rootdeinstall.sh用root在节点1上运行。
确认cluster状态,这三个命令应该不返回结果

$ ps -ef | grep cssd
$ ps -ef | grep evmd
$ ps -ef | grep crsd

重建ocr和vot

# $ORA_CRS_HOME/root.sh

在节点1上使用root执行root.sh,等到节点1上的命令正常结束后,节点2上用root运行root.sh
root.sh的脚本在运行前需要检查,确保其中的配置正常。
确认votedisk正常

# ./crsctl query css votedisk

向ocr中添加rac的其他配置

$ <CRS_HOME>/bin/racgons add_config hostname1:port hostname2:port
其中端口信息可以从$ORA_CRS_HOME/log/hostname/racg/ora.instance_name.ons文件中获取。
$/u01/crs/bin/oifcfg setif -global eth1/private_ip:cluster_interconnect eth0/public_ip:public
利用netca添加监听利用srvctl添加asm、db和instance信息
$ srvctl ADD DATABASE -d dbname -o $ORACLE_HOME -p +DATA/dbname/spfiletest.ora -n global_name 
$ srvctl ADD instance -d dbname -i instance1 -n hostname
$ srvctl ADD instance -d dbname -i instance2 -n hostname

检查配置健康

$ cluvfy stage -post crsinst -n node1,node2

启动cluster和数据库

# $ORA_CRS_HOME/bin/crsctl START crs

而在实际迁移过程中,并没有执行这么复杂的操作。在备份完毕后,检查发现ocrconfig导出的备份似乎并没有包含混乱的votedisk配置信息,于是尝试利用ocrconfig –import功能导入刚刚导出的备份:

# ./ocrconfig -export /home/oracle/rmanocr_date.exp

结果发现ocr中votedisk的配置恢复了正常,而且此后也不会再发生变化。
看来Oracle在使用逻辑备份导出导入ocr配置的时候,可以自动过滤或清理掉错误的配置。

This entry was posted in ORACLE and tagged , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *