ORA-15063错误与AU_SIZE设置无直接因果关系,其根本原因是ASM实例未发现磁盘,需优先检查v$asm_disk中目标路径是否存在、asm_diskstring配置是否显式正确、grid用户权限及磁盘头残留。
ORA-15063 错误和 AU_SIZE 设置**没有直接因果关系**。这个错误从不因 AU_SIZE 配错而触发,强行调大或改小它不仅不能解决 ORA-15063,反而可能引入新问题(比如重建磁盘组失败、文件无法访问)。
真正该盯住的,是 ASM 实例“压根没看见磁盘”这件事——AU_SIZE 是磁盘组创建后才固定的元数据属性,而 ORA-15063 发生在发现磁盘、挂载磁盘组阶段,连磁盘都找不到,根本轮不到读 AU 大小。
确认 v$asm_disk 是否返回目标磁盘路径
这是唯一可信的第一步。别猜,直接查:
SELECT path, header_status, mode_status, state FROM v$asm_disk;
重点看三件事:
-
path列是否包含你期望的设备路径(如/dev/mapper/datap1) -
header_status是否为MEMBER、PROVISIONED或CANDIDATE(说明磁盘被识别) - 如果某块盘完全不在结果里,
asm_diskstring或权限一定出问题,和AU_SIZE无关
检查 asm_diskstring 是否为空或通配符失效
Oracle 19c RAC 中 asm_diskstring 默认为 NULL,但实际常因 udev 规则、multipath 映射或权限缺失导致扫描失败。必须显式指定:
- 查当前值:
SHOW PARAMETER asm_diskstring; - 常见无效写法:
'ORCL:*'(ASMLIB 已弃用)、'/dev/oracleasm/disks/*'(RAC 不适用) - 安全写法:明确列出所有设备路径,逗号分隔、无空格:
'/dev/mapper/datap1','/dev/mapper/datap2' - RAC 必须加
SID='*'并用SCOPE=BOTH同步所有节点:ALTER SYSTEM SET asm_diskstring='/dev/mapper/datap1' SCOPE=BOTH SID='*';
验证 grid 用户对设备文件是否有读写权限
即使 asm_diskstring 写对了,grid 用户没权限,ASM 进程照样跳过该设备:
- 执行:
ls -l /dev/mapper/datap1,确认属主是grid:asmadmin(或等效组),权限为brw-rw---- - udev 规则必须稳定:检查
/etc/udev/rules.d/99-oracle-asmdevices.rules是否绑定正确 UUID,并 reload:udevadm control --reload-rules && udevadm trigger - 不要依赖
oracleasm scandisks:19c 已弃用 ASMLIB,该命令无效果
清理磁盘头残留才是关键动作
很多 ORA-15063 实际是磁盘头残留导致的“伪丢失”——ASM 拒绝覆盖已有元数据:
- 若
v$asm_disk中对应盘显示header_status = FORMER,说明曾属其他磁盘组 - 用
dd清前 4MB 最稳妥:dd if=/dev/zero of=/dev/mapper/datap1 bs=1048576 count=4 - 清完立刻重查
v$asm_disk,状态应变为CANDIDATE或PROVISIONED - 切勿只清前几 KB:ASM 校验头信息分布在多个位置,4MB 是 Oracle 官方推荐最小清理范围
AU_SIZE 是磁盘组创建后的静态属性,不能解决发现阶段的问题。排查 ORA-15063 时盯着它,等于修车先换轮胎却不检查油量——方向错了。











