用户一个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%
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水平要求比较低,逻辑上简单,可操作性强,可以比较顺利完成迁移。