ASM磁盘组挂载失败首要确认+ASM实例是否真运行,再检查设备权限、节点路径一致性及兼容性版本。四层原因叠加易致隐蔽故障,节点路径不一致最易被忽略。
ASM实例没起来,磁盘组自然挂不了
oracle rac中磁盘组挂载失败,第一反应不是查磁盘路径,而是确认+asm实例是否真正运行。rac里每个节点都有自己的asm实例,但它们不自动同步状态——某个节点的+asm1可能已crash,而+asm2还活着,这时在节点1上执行asmcmd lsdg必然报错ora-15032: not all alterations performed或直接连接拒绝。
实操建议:
- 用
ps -ef | grep asm_pmon确认本地ASM进程是否存在,别只信crsctl stat res -t——它可能显示资源online,但实际pmon已僵死 - 检查
grid用户下$ORACLE_HOME/log/hostname/asmalert.log,重点看最近10分钟是否有ORA-15110(no diskgroups mounted)或ORA-15077(could not locate ASM instance) - 手动启动时用
srvctl start asm -n nodename,而非sqlplus / as sysasm后startup——后者绕过CRS管控,后续资源状态会不一致
/dev/oracleasm下的设备权限不对,OCR/Voting Disk就认不出来
RAC依赖ASM管理OCR和Voting Disk,但这些设备文件(如/dev/oracleasm/disks/DISK1)的属主和权限一旦被重置,ASM实例能启动,却无法open磁盘头,导致CREATE DISKGROUP失败或挂载时卡在DISMOUNTED状态。
常见错误现象:运行oracleasm listdisks能看到盘符,但asmcmd lsdsk -k返回空,或报ORA-15033: diskgroup 'DATA' is not mounted且无进一步错误。
实操建议:
- 确认所有ASM磁盘设备属主是
grid:asmadmin,权限为0660;不是root:root或oracle:oinstall - 检查
/etc/sysconfig/oracleasm中ORACLEASM_UID=grid和ORACLEASM_GID=asmadmin是否匹配当前环境,改完必须oracleasm force-scandisks再oracleasm scandisks - 若使用UDEV规则映射磁盘,确保
OWNER="grid"、GROUP="asmadmin"、MODE="0660"三者齐全,缺一不可
ASM磁盘路径在RAC节点间不一致,挂载变成单点行为
RAC要求所有节点看到的ASM磁盘路径完全一致,比如节点1是/dev/oracleasm/disks/DATA01,节点2却是/dev/mapper/mpathb,即使权限正确,CRS也无法跨节点协调磁盘组状态,结果就是只有发起挂载的节点显示MOUNTED,其他节点始终DISMOUNTED,crsctl stat res ora.DATA.dg -p里PLACEMENT字段为空。
实操建议:
- 在所有节点运行
blkid | grep oracleasm和ls -l /dev/oracleasm/disks/,逐项比对输出是否完全相同 - 避免直接用原始设备名(如
/dev/sdb)配置ASM磁盘,SCSI ID变化或热插拔会导致路径漂移;优先用WWID或UDEV规则生成稳定别名 - 修改磁盘路径后,必须重启
oracleasm服务并重新scan:service oracleasm stop && service oracleasm start && oracleasm scandisks,不能只reload
磁盘组兼容性版本低于数据库版本,挂载被静默拒绝
ASM磁盘组有COMPATIBLE.ASM和COMPATIBLE.RDBMS两个关键属性,如果数据库实例版本是19c,而磁盘组的COMPATIBLE.RDBMS仍为11.2.0.0.0,那么19c实例尝试挂载时不会报错,但v$asm_diskgroup里该DG的STATE永远是DISMOUNTED,且alter diskgroup ... mount命令返回成功——这是最隐蔽的坑。
实操建议:
- 查磁盘组兼容性:连接ASM实例后运行
SELECT name, compatibility, database_compatibility FROM v$asm_diskgroup WHERE name = 'DATA'; - 升级需满足前提:所有依赖该DG的数据库实例必须关闭,且
COMPATIBLE.ASM不能低于目标COMPATIBLE.RDBMS - 升级命令是
ALTER DISKGROUP DATA SET ATTRIBUTE 'compatible.rdbms' = '19.0.0';,注意引号和版本格式,写成'19'或19.0都会失败
磁盘组挂载问题往往不是单一原因,而是ASM实例状态、设备权限、路径一致性、兼容性四个层面叠在一起。最容易被忽略的是节点间磁盘路径不一致——看起来都“能识别”,但CRS根本不认为它们是同一组设备。











