rac加盘必须四要素严格对齐:路径、属主、权限、major/minor号;v$asm_disk中header_status须为candidate;add disk需带name子句并合理设置rebalance power;disk_repair_time须适配冗余策略。

所有RAC节点OS设备路径、权限、major/minor号必须完全一致
漏掉任一节点的设备校验,ALTER DISKGROUP ... ADD DISK会只在部分节点生效,最终磁盘组状态异常甚至无法 MOUNT。这不是“能 ls 出来就行”,而是四要素严格对齐:路径(如 /dev/mapper/asm-diskm)、属主(必须是 grid:asmadmin)、权限(必须为 brw-rw----)、major/minor 号(ls -l 输出第5–6列数字)。
UDEV 场景下,每个节点执行:ls -l /dev/mapper/asm-diskm
确认输出一致;再比对 major/minor 是否跨节点相同。不一致说明多路径未收敛或 udev 规则未生效。
务必检查 /etc/udev/rules.d/99-oracle-asm.rules 在所有节点内容完全一致,然后运行:udevadm trigger && udevadm settle
ASMLib 场景下,不能只在节点1执行 oracleasm scandisks,必须每个节点单独运行。
v$asm_disk 中 header_status 必须为 CANDIDATE 才能加盘
OS 层可见 ≠ ASM 层可见——这是 RAC 下最典型的“半边生效”问题。如果 v$asm_disk 里查不到目标路径,ADD DISK 必然失败,报 ORA-15032 + ORA-15027。
每个节点分别用 sqlplus / as sysasm 连接 ASM 实例,执行:SELECT path, header_status FROM v$asm_disk WHERE path LIKE '%asm-diskm%';
返回为空?立即在该节点执行:ALTER SYSTEM SCAN DISKS;
再重查。只有返回 header_status = 'CANDIDATE'(或 'PROVISIONED')才可安全加盘。
验证全局识别:每个节点运行 asmcmd lsdsk -k,输出必须完全一致。
ADD DISK 必须带 NAME 子句且 REBALANCE POWER 要匹配业务节奏
ADD DISK 语法中不指定 NAME 会导致后续诊断困难,且无法在 v$asm_disk 中快速定位该盘。正确写法示例:ALTER DISKGROUP DATA ADD DISK '/dev/mapper/asm-diskm' NAME DATA_0004 REBALANCE POWER 5;
REBALANCE 是真正在后台移动数据的阶段,持续占用 I/O。设高了不是更快,而是可能拖垮 LGWR、归档写入或引发 SQL 延迟飙升:
-
POWER 1:适合生产高峰期,rebalance 持续数小时以上,但业务延迟几乎无感 -
POWER 5~11:仅限低峰窗口期使用,务必轮询v$asm_operation监控EST_MINUTES和EST_RATE - 加盘完成后,建议立即将 POWER 降回 1:
ALTER DISKGROUP DATA REBALANCE POWER 1;
disk_repair_time 必须适配冗余策略,否则会超时失败
这个参数常被忽略,但它直接决定新磁盘加入失败后能否自动剔除。对于 NORMAL 冗余磁盘组,若 disk_repair_time 设置过短(如默认 3.6 小时),而 rebalance 过程因 I/O 压力或数据量大耗时更长,就会触发超时,导致磁盘被强制 offline,最终 ADD DISK 失败。
检查当前值:SELECT name, disk_repair_time FROM v$asm_diskgroup WHERE name = 'DATA';
调整建议(根据实际 rebalance 预估时长):ALTER DISKGROUP DATA SET ATTRIBUTE 'disk_repair_time' = '8.5h';
注意:该值需在所有节点一致生效,且修改后无需重启 ASM 实例。











