ora-15031是asm磁盘规格不匹配错误,仅发生于asm实例创建或挂载磁盘组时,根本原因在于asm_diskstring配置不当、磁盘权限不符或设备未就绪,需先确认asm实例运行及磁盘组已挂载。
ora-15031 不是备库日志应用失败的直接原因,它根本不会在备库恢复过程中出现——这个错误只发生在 asm 实例尝试创建或挂载磁盘组时,且必然伴随 ora-15018 或 ora-15014 等前置错误。你看到的“备库应用日志出现 ora-15031”,实际是误读了告警日志或 sql*plus 输出上下文:真正出问题的是 asm 实例没起来,导致备库无法访问归档日志所在的 asm 磁盘组(比如 reco 或 fra),进而使 mrp 进程卡住或报其他错误(如 ora-19809、ora-19804)。
确认 ASM 实例是否运行且磁盘组已挂载
先别急着查备库的 alter database recover managed standby database 命令,先验证底层存储是否就绪:
- 用
ps -ef | grep asm检查+ASM进程是否存在;若无,说明 ASM 实例根本没启动 - 以
grid用户连接:sqlplus / as sysasm,执行select name, state, type from v$asm_diskgroup;—— 如果目标磁盘组(如RECO)状态不是MOUNTED,MRP 就没法读取归档日志 - 检查
v$asm_operation是否有卡住的 rebalance 或 mount 任务,避免误判为“挂载成功”
排查 asm_diskstring 配置是否匹配实际磁盘路径
ORA-15031 的本质是 ASM 扫不到你声称存在的磁盘,而最常见诱因就是 asm_diskstring 设置错误。注意以下几点:
- 该参数值必须能被
kfod实际扫描到磁盘,例如:kfod asm_diskstring='/dev/asm/*' disks=all要返回非空结果;若返回空,说明路径写错、通配符不生效、或设备权限不对 - 不要用绝对路径加具体磁盘名(如
/dev/asm/ocr01)作为asm_diskstring,它只接受带通配符的目录式模式(如/dev/asm/*或/dev/mapper/asm*) - 在 RAC 环境中,确保所有节点的
asm_diskstring一致,且对应设备在各节点上真实存在、主次设备号一致(尤其使用 udev 或 multipath 时)
检查磁盘权限与归属是否符合 ASM 要求
即使路径对、参数对,权限不对照样触发 ORA-15031:
- 磁盘设备文件(如
/dev/asm/arc01)属主必须是grid,属组必须是asmadmin(或asmdba,取决于版本),权限建议为crw-rw---- - 若使用 ASMLIB(已淘汰但仍有遗留环境),需确认
oracleasm listdisks能列出对应磁盘,且/etc/sysconfig/oracleasm中的ORACLEASM_SCANORDER和ORACLEASM_SCANEXCLUDE没过滤掉它们 - 在 AIX 或 Solaris 上,还需检查
lspv或format输出是否显示磁盘处于“available”状态,而非“defined”
真正卡住人的地方,往往不是参数写错,而是磁盘路径在 OS 层面看似存在,却因 udev 规则未生效、multipath 别名未刷新、或 ASM 实例启动早于设备就绪,导致首次 mount 失败后 ASM 不再自动重试。这种情况下,srvctl stop asm -n <node></node> 后手动 asmca 或 sqlplus / as sysasm 执行 startup + alter diskgroup ... mount 才能绕过初始失败态。别依赖 root.sh 或 srvctl 的“一次成功”假设。











