Oracle 10g RAC OCFS2集群存储迁移摘要

用户一个Oracle 10g RAC的基于ocfs2的集群,RedHat 5.4 64bit环境,需要更换存储和升级更换8GHBA卡,过程总结如下:

准备篇

1、先在root用户下,用df -h 查看原存储挂载的使用情况,评估迁移的数据量

2、用mount显示现在存储的挂载的情况和格式,把/etc/fstab 文件备份、记录下来

3、考虑到加入新HBA卡,原存储LUN识别位置会发生改变,难以识别,通过

/sbin/scsi_id -g -u -s /block/sdX,查看现有存储的每个LUN的uuid,记录下来,为保险起见,在每个挂载的LUN,touch 一个标识原sdX的和挂载点的空文件,以便同时挂载新老存储时方便识别。

4、记录下新的存储的LUN的UUID,截图备查。

操作篇

1、oracle下

su - oracle 切换到oracle用户

sqlplus  / as sysdba

shutdown immediate

退出oracle

在oracle安装的$ORACLE_HOME/crs/bin目录下,以root用户执行 ./crs_ctl disable crs,以便在这个切换重启过程中RAC crs资源不自动启动,防止数据损坏。

2、把/etc/fstab里的原存储的自动挂载注解掉,逐台关闭服务器,插入新8G FC  HBA卡,先启动1台rac主机,启动后果然存储的ID发生改变,自动发现与原来fdisk -l 的id不一致,先不管

3、在存储端发现新的服务器,将预先分好的LUN分配给主机,原服务器上已经安装过多路径软件,这里没有做改变,主机端需要重新启动以便发现新分配的存储,重起后fdisk-l发现更多的存储LUN,有文件格式是原LUN,但sdX的存储完全不对,这时原来记录的UUID使用上了,用/sbin/scsi_id -g -u -s /block/sdX,逐个查看,用cat /sys/block/sda/device/vendor 也可以看到存储的生产厂商(新老存储不同厂商),这里一定仔细,老存储有数据,新存储需要挂载后格式化。

4、根据uuid把原存储的LUN还挂载到原目录下,如

mount -o datavolume,nointr -t ocfs2 /dev/sdi1 /oa 类似,把原来的存储逐一挂载到原目录,这时可以在$ORACLE_HOME/crs/bin目录下,通过./crs_crl start crs把crs启动起来,可以通过 ./crs_crl  check crs 来检查,切换到oracle下,通过crs_stat -t查看RAC资源是否在线,RAC online后,那原存储和RAC启动没有问题

5、在根目录下,根据原来的挂载目录建立新目录,如原/oa,那就建/oa1目录,用来挂载新存储,LUN大于2T,需要用parted来分区,操作如下:

parted /dev/sdX

mklabel gpt

mkpart primary 0% 100%

print

quit

把规划的LUN都分好区后,需要把分区格式化为ocfs2,只需要在一个node做一次,命令mkfs.ocfs2 -b 4K -C 32K -N 4 -L oa /dev/sdc1,逐一格式化

通过mount -o datavolume,nointr -t ocfs2 /dev/sdi1 /oa1类似的命令,把规划的新存储按对应关系挂载到新的目录下。

6、停掉oracle ,停掉crs资源,通过cp -rp /原存储挂载目录 /新存储挂载目录,把文件和子目录及对应的权限都拷贝到新存储中,过程漫长,可以通过du -sh 查看新存储的容量变化,把老存储的内容原封不动拷贝到新存储。

7、拷贝完成后,umount掉所有挂载到存储,然后按原来的挂载目录,把新存储挂载到原来的挂载点,重新启动crs资源,用crs_stat -t  查看rac是否在线,如正常,那说明新存储已经可以正常工作了。

8、停数据库,停crs,关机,把原4G HBA卡那掉,重新开机后,盘符发生改变,通过mount先手工加载,起动crs,都正常后,在/etc/fstab 下,语法如下

/dev/sde1 on /oa type ocfs2 (rw,_netdev,datavolume,nointr,heartbeat=local),逐条加入,这样新存储就可以开机自动加载了,不要忘了 crscrl enable crs,让crs可以自动启动。

9、另一个节点只要同样分配LUN,也按原来的目录挂载,最后crs_stat -t 2个节点都在线,并且重启后存储挂载和crs都自动启动,工作正常,可通过在sqlplus下执行

select instance_name from v$instance;

select open_mode  fromv$database;

查看数据库工作情况,这样存储迁移和HBA卡更换就完成了。

总结

通过以上迁移方式,只涉及到数据库很少的操作,不需要导入导出数据库,完全在linux的文件层面完成迁移,对oracle水平要求比较低,逻辑上简单,可操作性强,可以比较顺利完成迁移。

相关推荐