ASM磁盘损坏后需通过磁盘组在线替换并rebalance迁移数据,而非直接换物理盘;11g RAC无自动故障隔离,MISSING/FAILED状态且冗余不足时将影响可用性,须先确认状态、冗余类型及Failgroup分布,再统一udev规则、加盘、监控rebalance、安全删盘,并优先保障OCR/Voting Disk和SPFILE安全。
asm 磁盘损坏后不能直接“换盘修好”,必须通过磁盘组层面的在线替换完成 —— 换言之,不是换物理盘,而是用新盘替代旧盘在磁盘组中的位置,并触发 rebalance 迁移数据。11g rac 中无自动故障隔离机制(如 12c+ 的 asm flex diskgroup),一旦磁盘状态为 missing 或 failed,且冗余不足(比如外部冗余),就可能立刻影响数据库可用性。
确认磁盘状态和冗余类型再动手
先查清是不是真坏了,以及坏一块会不会丢数据:
登录任意节点 grid 用户,执行:sqlplus / as sysasm,然后运行:
SELECT GROUP_NUMBER, DISK_NUMBER, NAME, PATH, STATE, MODE_STATUS, TOTAL_MB, FREE_MB FROM V$ASM_DISK WHERE STATE != 'NORMAL';
重点看 STATE 和 MODE_STATUS:
• STATE = 'OFFLINE' 且 MODE_STATUS = 'MISSING':磁盘已不可见,但未被踢出磁盘组
• STATE = 'FAILED':ASM 已标记失败,需人工干预
• 外部冗余(EXTERNAL REDUNDANCY)下任何一块盘失效即无冗余,必须立即处理;Normal 冗余允许丢失一个 Failgroup,High 允许两个 —— 但前提是 Failgroup 划分合理
- 查磁盘组冗余:
SELECT NAME, TYPE, STATE FROM V$ASM_DISKGROUP; - 查 Failgroup 分布:
SELECT GROUP_NUMBER, NAME, FAILGROUP FROM V$ASM_DISK ORDER BY GROUP_NUMBER, FAILGROUP; - 别只看单节点输出,用
GV$ASM_DISK查所有实例视图,确保没漏掉静默离线的盘
添加新盘并触发 rebalance 替换旧盘
新加的物理盘必须被所有 RAC 节点识别为同一设备名(靠 udev 规则绑定),且权限归属 grid:asmadmin、模式 0660。常见坑是节点间设备名不一致(比如 node1 是 /dev/emcpowera1,node2 是 /dev/emcpowerb1),导致加盘失败或 rebalance 卡住。
- 验证新盘是否可见且可访问:
ls -l /dev/asm-*或你定义的 udev 名(如/dev/asm-data04) - 加盘命令(以 DATA 磁盘组为例):
ALTER DISKGROUP DATA ADD DISK '/dev/asm-data04' REBALANCE POWER 5;
•POWER值建议设为 5–11(默认 1),值越高 rebalance 越快,但 I/O 压力越大,业务高峰期慎用
• 不要加FORCE,除非明确知道该盘未被其他磁盘组使用 - 监控进度:
SELECT * FROM V$ASM_OPERATION;,关注EST_MINUTES和STATE(EXECUTING表示进行中)
删除故障盘前务必确认 rebalance 完成
很多人在 V$ASM_OPERATION 显示 DONE 后就急着删盘,结果发现 V$ASM_DISK 里旧盘仍显示 OFFLINE 或 MISSING —— 这说明数据还没真正迁完,只是操作记录结束了。真正安全的判断依据是:
• V$ASM_DISK 中旧盘 STATE 变为 UNKNOWN 或彻底消失(需等 ASM 自动清理)
• V$ASM_DISKGROUP 中 USABLE_FILE_MB 恢复到正常水平(接近 FREE_MB)
• ASMCMD 下 lsdsk -G DATA 不再列出故障盘路径
- 删盘命令:
ALTER DISKGROUP DATA DROP DISK 'DATA_0002';(用NAME字段值,不是 PATH) - 删盘后会再次触发 rebalance,此时不能再加新盘,否则可能冲突
- 如果删盘卡住(
V$ASM_OPERATION长时间WAITING),检查是否有未归档日志或正在写的 ASM 文件(如控制文件、spfile),必要时重启 ASM 实例
OCR/Voting Disk 和 SPFILE 迁移必须优先于数据盘
磁盘组损坏若涉及 OCR 或 Voting Disk,RAC 集群可能无法启动 —— 所以哪怕只换 DATA 盘,也要先确认 OCR/Vote 是否安全。11g 中这些文件默认放在独立磁盘组(如 +OCR_VOTE),不能和数据混放。
- 查当前位置:
ocrcheck、crsctl query css votedisk、show parameter spfile - 若 OCR/Vote 所在磁盘组也受损,必须先用
ocrconfig -add +NEW_OCR加新位置,再ocrconfig -replace +OLD_OCR切换,最后ocrconfig -delete +OLD_OCR - SPFILE 在 ASM 里时,不能直接
CREATE SPFILE=... FROM PFILE覆盖,必须先CREATE PFILE='/tmp/pfile.ora' FROM SPFILE,再CREATE SPFILE='+NEW_OCR' FROM PFILE='/tmp/pfile.ora',否则集群启动失败 - 切完 OCR/Vote/SPFILE 后,用
crsctl stop crs && crsctl start crs在所有节点顺序重启,验证集群资源全 online
整个过程最易被忽略的是 udev 规则同步和 Failgroup 分布验证 —— 新盘加进去但没划进正确 Failgroup,等于白加;节点间设备名不一致,会导致部分节点加盘成功、部分失败,rebalance 一半就停。动手前花 10 分钟核对两遍,比事后救库省三天。


















