在一次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配置的时候,可以自动过滤或清理掉错误的配置。