利用ASM功能实现零停机oracle RAC存储迁移

在实际生产过程中,经常会遇到比如新旧存储替换等场景,如果是一般情况可能只有做数据迁移才能实现,而迁移可能就存在停机的可能

这里介绍利用ASM DG加盘踢盘功能实现零停机存储迁移;原理很简单 将新存储磁盘添加到data dg,之后将老的磁盘踢出data磁盘组,即可实现存储迁移

solaris的ZFS的pool功能可以实现类似ASM的零停机迁移本地目录存储迁移,请参考如下
利用 ZFS实现存储迁移 - 墨天轮文档

  1. 存储划盘给集群
  2. 可能需要重启机器才能识别到新加盘
    (IBM,SUN小机等也存在这种问题,需要重启才能识别新加盘,双节点轮流重启可以不影响生产)

新加四块盘磁盘的属性不同

oracle@db4 \~\]$ ll /dev/dm\* brw-rw---- 1 root disk 253, 0 Aug 31 10:04 /dev/dm-0 brw-rw---- 1 grid asmadmin 253, 1 Aug 31 10:08 /dev/dm-1 brw-rw---- 1 root disk 253, 10 Aug 31 10:04 /dev/dm-10 brw-rw---- 1 root disk 253, 11 Aug 31 10:04 /dev/dm-11 brw-rw---- 1 root disk 253, 12 Aug 31 10:04 /dev/dm-12 brw-rw---- 1 grid asmadmin 253, 2 Aug 31 10:08 /dev/dm-2 brw-rw---- 1 grid asmadmin 253, 3 Aug 31 10:08 /dev/dm-3 brw-rw---- 1 grid asmadmin 253, 4 Aug 31 10:07 /dev/dm-4 brw-rw---- 1 grid asmadmin 253, 5 Aug 31 10:08 /dev/dm-5 brw-rw---- 1 grid asmadmin 253, 6 Aug 31 10:08 /dev/dm-6 brw-rw---- 1 grid asmadmin 253, 7 Aug 31 10:07 /dev/dm-7 brw-rw---- 1 root disk 253, 8 Aug 31 10:04 /dev/dm-8 brw-rw---- 1 root disk 253, 9 Aug 31 10:04 /dev/dm-9 \[oracle@db4 \~\]$ \[oracle@db4 \~\]$ su - 查看多路径状态 \[root@db4 \~\]#**multipath --ll** 新加四块盘是没有别名的 crs3 (36006016056804c0099bbc25c79d5871a) dm-6 DGC,VRAID size=2.0G features='2 queue_if_no_path retain_attached_hw_handler' hwhandler='1 emc' wp=rw \|-+- policy='round-robin 0' prio=50 status=active \| \|- 16:0:1:6 sdal 66:80 active ready running \| \`- 18:0:1:6 sdam 66:96 active ready running \`-+- policy='round-robin 0' prio=10 status=enabled \|- 18:0:0:6 sdo 8:224 active ready running \`- 16:0:0:6 sdn 8:208 active ready running crs2 (36006016056804c0097bbc25c191f51e4) dm-5 DGC,VRAID size=2.0G features='2 queue_if_no_path retain_attached_hw_handler' hwhandler='1 emc' wp=rw \|-+- policy='round-robin 0' prio=50 status=active \| \|- 16:0:0:3 sdh 8:112 active ready running \| \`- 18:0:0:3 sdi 8:128 active ready running \`-+- policy='round-robin 0' prio=10 status=enabled \|- 18:0:1:3 sdag 66:0 active ready running \`- 16:0:1:3 sdaf 65:240 active ready running crs1 (36006016056804c0096bbc25c2e129aaf) dm-3 DGC,VRAID size=2.0G features='2 queue_if_no_path retain_attached_hw_handler' hwhandler='1 emc' wp=rw \|-+- policy='round-robin 0' prio=50 status=active \| \|- 16:0:1:2 sdad 65:208 active ready running \| \`- 18:0:1:2 sdae 65:224 active ready running \`-+- policy='round-robin 0' prio=10 status=enabled \|- 16:0:0:2 sdf 8:80 active ready running \`- 18:0:0:2 sdg 8:96 active ready running dbbak (3600601605a804c00cfc1c35ca78f2198) dm-0 DGC,VRAID size=2.0T features='2 queue_if_no_path retain_attached_hw_handler' hwhandler='1 emc' wp=rw \|-+- policy='round-robin 0' prio=50 status=active \| \|- 18:0:0:0 sdc 8:32 active ready running \| \`- 16:0:0:0 sdb 8:16 active ready running \`-+- policy='round-robin 0' prio=10 status=enabled \|- 16:0:1:0 sdz 65:144 active ready running \`- 18:0:1:0 sdaa 65:160 active ready running mpathm (36006016056804c000d3f0e6346a3cc75) dm-12 DGC,VRAID size=500G features='2 queue_if_no_path retain_attached_hw_handler' hwhandler='1 emc' wp=rw \|-+- policy='round-robin 0' prio=50 status=active \| \|- 18:0:1:11 sdaw 67:0 active ready running \| \`- 16:0:1:11 sdav 66:240 active ready running \`-+- policy='round-robin 0' prio=10 status=enabled \|- 16:0:0:11 sdx 65:112 active ready running \`- 18:0:0:11 sdy 65:128 active ready running mpathl (36006016056804c000d3f0e63d1536140) dm-10 DGC,VRAID size=500G features='2 queue_if_no_path retain_attached_hw_handler' hwhandler='1 emc' wp=rw \|-+- policy='round-robin 0' prio=50 status=active \| \|- 16:0:0:10 sdv 65:80 active ready running \| \`- 18:0:0:10 sdw 65:96 active ready running \`-+- policy='round-robin 0' prio=10 status=enabled \|- 16:0:1:10 sdat 66:208 active ready running \`- 18:0:1:10 sdau 66:224 active ready running mpathk (36006016056804c000c3f0e639c8cd30a) dm-9 DGC,VRAID size=500G features='2 queue_if_no_path retain_attached_hw_handler' hwhandler='1 emc' wp=rw \|-+- policy='round-robin 0' prio=50 status=active \| \|- 16:0:1:9 sdar 66:176 active ready running \| \`- 18:0:1:9 sdas 66:192 active ready running \`-+- policy='round-robin 0' prio=10 status=enabled \|- 16:0:0:9 sdt 65:48 active ready running \`- 18:0:0:9 sdu 65:64 active ready running mpathj (36006016056804c000c3f0e6307e54cd5) dm-8 DGC,VRAID size=500G features='2 queue_if_no_path retain_attached_hw_handler' hwhandler='1 emc' wp=rw \|-+- policy='round-robin 0' prio=50 status=active \| \|- 16:0:1:8 sdap 66:144 active ready running \| \`- 18:0:1:8 sdaq 66:160 active ready running \`-+- policy='round-robin 0' prio=10 status=enabled \|- 16:0:0:8 sdr 65:16 active ready running \`- 18:0:0:8 sds 65:32 active ready running data4 (36006016056804c00b0bbc25c0a9ff654) dm-2 DGC,VRAID size=505G features='2 queue_if_no_path retain_attached_hw_handler' hwhandler='1 emc' wp=rw \|-+- policy='round-robin 0' prio=50 status=active \| \|- 16:0:1:4 sdah 66:16 active ready running \| \`- 18:0:1:4 sdai 66:32 active ready running \`-+- policy='round-robin 0' prio=10 status=enabled \|- 16:0:0:4 sdj 8:144 active ready running \`- 18:0:0:4 sdk 8:160 active ready running data3 (36006016056804c00aebbc25c43721e7f) dm-7 DGC,VRAID size=505G features='2 queue_if_no_path retain_attached_hw_handler' hwhandler='1 emc' wp=rw \|-+- policy='round-robin 0' prio=50 status=active \| \|- 16:0:0:7 sdp 8:240 active ready running \| \`- 18:0:0:7 sdq 65:0 active ready running \`-+- policy='round-robin 0' prio=10 status=enabled \|- 18:0:1:7 sdao 66:128 active ready running \`- 16:0:1:7 sdan 66:112 active ready running data2 (36006016056804c00adbbc25cd11a9458) dm-4 DGC,VRAID size=505G features='2 queue_if_no_path retain_attached_hw_handler' hwhandler='1 emc' wp=rw \|-+- policy='round-robin 0' prio=50 status=active \| \|- 16:0:1:5 sdaj 66:48 active ready running \| \`- 18:0:1:5 sdak 66:64 active ready running \`-+- policy='round-robin 0' prio=10 status=enabled \|- 16:0:0:5 sdl 8:176 active ready running \`- 18:0:0:5 sdm 8:192 active ready running data1 (36006016056804c00acbbc25cab85eb40) dm-1 DGC,VRAID size=505G features='2 queue_if_no_path retain_attached_hw_handler' hwhandler='1 emc' wp=rw \|-+- policy='round-robin 0' prio=50 status=active \| \|- 18:0:0:1 sde 8:64 active ready running \| \`- 16:0:0:1 sdd 8:48 active ready running \`-+- policy='round-robin 0' prio=10 status=enabled \|- 16:0:1:1 sdab 65:176 active ready running \`- 18:0:1:1 sdac 65:192 active ready running \[root@db4 \~\]# **3.---获取所有磁盘wwid** **Linux 7--** for i in \`cat /proc/partitions \| awk {'print $4'} \| grep sd\`; do val=\`/sbin/blockdev --getsize64 /dev/$i\` ; val2=\`expr $val / 1073741824\`; echo "/dev/$i:$val2 \` /usr/lib/udev/scsi_id -g -u /dev/$i\`" ; done **Linux 6--** for i in \`cat /proc/partitions \| awk {'print $4'} \| grep sd\`; do val=\`/sbin/blockdev --getsize64 /dev/$i\` ; val2=\`expr $val / 1073741824\`; echo "/dev/$i:$val2 \` scsi_id -g -u /dev/$i\`" ; done **4.修改配置文件(两节点均要)** **cat /etc/multipath.conf** 将新加四块盘加入到配置文件 注意alisa 和wwid号 ![](https://file.jishuzhan.net/article/1752672842626895873/a6a958910bd01005da0d880ba0601cb3.webp) multipath { wwid 36006016056804c000d3f0e6346a3cc75 alias data5 } multipath { wwid 36006016056804c000d3f0e63d1536140 alias data6 } multipath { wwid 36006016056804c000c3f0e639c8cd30a alias data7 } multipath { wwid 36006016056804c000c3f0e6307e54cd5 alias data8 } **重启动多路径软件** #**service multipathd restart** 启用multipath配置后,会在/dev/mapper下生成多路径逻辑盘 #**cd /dev/mapper** 原来还是mpathl等 重启后应该能看的到别名 ![](https://file.jishuzhan.net/article/1752672842626895873/aae533459e65ae93aa7a4f22b5d3d824.webp) 检查多路径状态 ![](https://file.jishuzhan.net/article/1752672842626895873/a730e2541bd9498f9485777d192b2dc6.webp) **5.配置 udev(两节点)** 利用udev绑定盘符(是Oracleasm绑定如果用作文件系统使用请忽略下面的步骤) #**cd /etc/udev/rules.d/** 修改/etc/udev/rules.d/60-dm-permissions.rules,添加如下内容到最后面 ![](https://file.jishuzhan.net/article/1752672842626895873/c4e583baa18e56417c456702a2a68261.webp) ENV{DM_NAME}=="data5", OWNER:="grid", GROUP:="asmadmin", MODE:="660", SYMLINK+="iscsi/oraasm-$env{DM_NAME}" ENV{DM_NAME}=="data6", OWNER:="grid", GROUP:="asmadmin", MODE:="660", SYMLINK+="iscsi/oraasm-$env{DM_NAME}" ENV{DM_NAME}=="data7", OWNER:="grid", GROUP:="asmadmin", MODE:="660", SYMLINK+="iscsi/oraasm-$env{DM_NAME}" ENV{DM_NAME}=="data8", OWNER:="grid", GROUP:="asmadmin", MODE:="660", SYMLINK+="iscsi/oraasm-$env{DM_NAME}" **重启udev服务** Linux 6 #**start_udev** Linux 7: **udevadm control --reload-rules** **/sbin/udevadm trigger --type=devices --action=change** 查看结果 主要看权限 **#ll /dev/dm\*** 确认盘的权限为**grid:asmadmin** ![](https://file.jishuzhan.net/article/1752672842626895873/c53a8962bfbb5423ad2f8eb86f8867ac.webp) **6,磁盘组加盘删盘(单节点即可)** **column path format a20** **select name,state,type,total_mb,free_mb from v$asm_diskgroup;** 检查磁盘组状态 **select name,path,total_mb,free_mb,MOUNT_STATUS,HEADER_STATUS,MODE_STATUS from v$asm_disk order by path;** **select name,path,total_mb,free_mb,MOUNT_STATUS,HEADER_STATUS,MODE_STATUS from v$asm_disk where name like 'DATA%' order by path;** 检查新加盘的状态 ![](https://file.jishuzhan.net/article/1752672842626895873/095658d9c72ab0b5577012df4c787db1.webp) **alter diskgroup DATA add disk '/dev/mapper/data9';** **alter diskgroup DATA add disk '/dev/mapper/data10';** **alter diskgroup DATA add disk '/dev/mapper/data7';** **alter diskgroup DATA add disk '/dev/mapper/data8';** **alter diskgroup ARCH add disk '/dev/mapper/arch2';** 将盘加到磁盘组 ![](https://file.jishuzhan.net/article/1752672842626895873/ffb3f66cace90719e1b9ef623ffed96a.webp) **alter diskgroup DATA rebalance power 6;** **调整磁盘均衡的并发(生产环境 根据实际情况调整并发度)** **select \* from v$asm_operation;** 均衡结束后将就的磁盘剔除磁盘组 (非必须等到均衡结束) ![](https://file.jishuzhan.net/article/1752672842626895873/9afd984b510844dd15fbce5c8a90ee4c.webp) **alter diskgroup DATA drop disk 'DATA_0000','DATA_0001','DATA_0002','DATA_0003';** **alter diskgroup ARCH drop disk 'ARCH_0000';** 踢完结束后状态 ![](https://file.jishuzhan.net/article/1752672842626895873/b647d4e9cf7ffc1c1b5046bcfe98e8fe.webp) 如果旧盘需要重新回收继续使用,记得修改**/etc/multipath.conf 和/etc/udev/rules.d/60-dm-permissions.rules 删掉就磁盘的信息** **墨天伦个人主页:** [潇湘秦的个人主页 - 墨天轮](https://www.modb.pro/u/433896 "潇湘秦的个人主页 - 墨天轮")

相关推荐
找不到、了5 分钟前
MySQL的窗口函数介绍
数据库·mysql
执笔诉情殇〆29 分钟前
springboot集成达梦数据库,取消MySQL数据库,解决问题和冲突
数据库·spring boot·mysql·达梦
软件技术NINI1 小时前
springMvc的简单使用:要求在浏览器发起请求,由springMVC接受请求并响应,将个人简历信息展示到浏览器
数据库·mysql
SailingCoder2 小时前
MongoDB Memory Server与完整的MongoDB的主要区别
数据库·mongodb
水木石画室2 小时前
MongoDB 常用增删改查方法及示例
数据库·mongodb
旷世奇才李先生2 小时前
MongoDB 安装使用教程
数据库·mongodb
qq_339282232 小时前
mongodb 中dbs 时,local代表的是什么
数据库·mongodb
阿里云大数据AI技术3 小时前
AI搜索 MCP最佳实践
数据库·人工智能·搜索引擎
笑衬人心。4 小时前
项目中数据库表设计规范与实践(含案例)
服务器·数据库·设计规范
cpsvps4 小时前
触发器设计美国VPS:优化数据库性能的关键策略
数据库·oracle