在线扩展oracle 11g rac的asm磁盘空间需严格确保三者对齐:所有rac节点os层设备可见性一致(路径、权限、属主、major/minor号)、asm实例全局识别新磁盘(v$asm_disk中header_status为candidate/provisioned)、磁盘组冗余策略合规(high冗余必须成对添加);跳过任一验证易致ora-15032/ora-15027或disk_repair_time超时。
在线扩展 oracle 11g rac 的 asm 磁盘空间,不是执行一次 alter diskgroup ... add disk 就完事。它依赖底层存储可见性、asm 实例识别状态、磁盘组冗余策略三者严格对齐;跳过验证直接加盘,大概率卡在 disk_repair_time 超时或报 ora-15032/ora-15027。
新磁盘必须在所有 RAC 节点 OS 层完全一致可见
常见错误现象:节点1能 ls -l /dev/mapper/DATA_NEW 看到设备,节点2却提示 No such file or directory;或者权限、属主、major/minor 号不一致——这会导致后续 ADD DISK 只在单节点生效,磁盘组状态异常甚至无法 mount。
- 用
ls -l /dev/mapper/(UDEV)或oracleasm listdisks(ASMLib)核对每个节点的设备路径、属主(必须是grid:asmadmin)、权限(brw-rw----) - 检查 major/minor 号是否跨节点一致:
ls -l /dev/mapper/DATA_NEW输出中第 5–6 列数字需完全相同 - UDEV 场景下,确保
/etc/udev/rules.d/99-oracle-asm.rules在所有节点内容一致,并执行udevadm trigger && udevadm settle - ASMLib 场景下,每个节点都必须执行
oracleasm scandisks,不能只在节点1做
ASM 实例必须已扫描识别该磁盘(v$asm_disk.path 中存在)
即使 OS 层能看到设备,ASM 实例也可能“看不见”——典型表现是执行 SELECT path FROM v$asm_disk WHERE path LIKE '%NEW%' 返回空集。此时直接 ADD DISK 会报 ORA-15032: not all alterations performed + ORA-15027: disk 'xxx' is not a valid disk。
- 在每个节点分别连接 ASM 实例:
sqlplus / as sysasm - 运行
SELECT path, header_status FROM v$asm_disk WHERE path LIKE '%NEW%';,确认返回非空且header_status = 'CANDIDATE'或'PROVISIONED' - 若为空,先执行
ALTER SYSTEM SCAN DISKS;,再重查;注意该命令需在每个节点单独执行 - 验证是否全局识别:
asmcmd lsdsk -k在所有节点输出应完全一致
ADD DISK 语法与重平衡参数的关键细节
ADD DISK 本身是在线操作,但重平衡(rebalance)过程会持续占用 I/O,尤其当磁盘组已有 TB 级数据时,POWER 值设高可能引发业务延迟。别把“在线”等同于“无感”。
- 基础命令必须带完整路径和显式
NAME:ALTER DISKGROUP DATA_DG ADD DISK '/dev/mapper/DATA_NEW' NAME DATA_NEW_01;—— 路径大小写敏感,含转义符需原样匹配v$asm_disk.path - 省略
NAME会导致磁盘被自动命名为DATA_0001类编号名,后续诊断或DROP时极易混淆 -
REBALANCE POWER推荐值:POWER 1(低峰期可接受)→POWER 3(默认,平衡性好)→POWER 8(紧急扩容,需评估系统负载) - 加盘后立即控制重平衡:
ALTER DISKGROUP DATA_DG REBALANCE POWER 3 WAIT;,WAIT防止后台任务堆积,避免影响后续操作
HIGH 冗余磁盘组加盘必须成对添加
这是最容易被忽略的硬约束。HIGH 冗余要求镜像副本分布在不同 failure group,单盘加入会被拒绝,报 ORA-15036: disk 'xxx' is not readable 或直接 ORA-15032。
- 先查目标磁盘组冗余类型:
SELECT name, type FROM v$asm_diskgroup WHERE name = 'DATA_DG';,结果为HIGH即需成对 - 成对指:两个新磁盘必须位于不同 failure group(通常对应不同物理路径、不同控制器或不同存储阵列)
- 命令需一次性指定两个路径:
ALTER DISKGROUP DATA_DG ADD DISK '/dev/mapper/DATA_NEW_A', '/dev/mapper/DATA_NEW_B' NAME DATA_NEW_A_01, DATA_NEW_B_01; - EXTERNAL/NORMAL 冗余无此限制,但 NORMAL 下新增磁盘仍会参与镜像分配,需预留足够空间
整个流程中最容易被跳过的其实是“每个节点独立验证”,而不是某条 SQL 写错。RAC 不是单机,v$asm_disk 视图是实例级的,一个节点看到 ≠ 全局可用。磁盘组状态异常往往就始于某个节点漏扫、漏授权、漏 udevadm settle。











