Oracle官方自12.2起已弃用ASMLib,其在RHEL/CentOS 7+等新版系统中无法加载内核模块,多节点扫描结果不一致,易致OCR创建失败;应改用udev+WWID绑定稳定设备名。

oracleasm 工具在 RAC 多节点中根本不可靠
Oracle 官方从 12.2 开始已明确弃用 ASMLib,oracleasm 工具在多数新版内核(如 RHEL/CentOS 7+、OL8+)上无法加载内核模块,且多节点间磁盘扫描结果不一致——比如节点 A 扫出 /dev/sdb,节点 B 扫出 /dev/sdc,但实际是同一 LUN。这不是配置问题,而是设计缺陷。
常见错误现象:oracleasm scandisks 在某节点返回空,或 oracleasm listdisks 显示磁盘名不一致;gridSetup.sh 预检失败并报 ORA-15042;OCR 创建时提示 voting disk 路径不可达。
- ASMLib 依赖 SCSI 设备发现顺序,而该顺序在重启、路径切换、multipath 重载后必然变化
- 它无法识别 multipath 设备的 WWID,只能“猜”一条路径,一旦该路径失效,ASM 实例直接挂起
-
oracleasm configure -i生成的配置文件(/etc/sysconfig/oracleasm)对现代 udev/multipath 架构无实质约束力
替代方案:用 udev + WWID 绑定稳定设备名
不用 ASMLib,改用系统原生机制绑定物理磁盘到固定符号名,这才是生产环境唯一可维护的做法。
实操步骤:
- 确认磁盘原始路径可见且大小一致:
fdisk -l /dev/sdb、multipath -ll,所有节点输出必须完全相同 - 获取磁盘唯一标识:
scsi_id -g -u -d /dev/sdb(输出类似3600508b4000abcdef000000000000123) - 写 udev 规则(
/etc/udev/rules.d/99-oracle-asm.rules):KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM=="/sbin/scsi_id -g -u -d /dev/$parent", RESULT=="3600508b4000abcdef000000000000123", SYMLINK+="asm-disk1", OWNER="grid", GROUP="asmadmin", MODE="0660"
- 重载规则:
udevadm control --reload-rules && udevadm trigger,验证ls -l /dev/asm-disk*属主是否为grid:asmadmin
注意:不要用设备名(如 sdb)写规则,必须用 scsi_id 输出的 WWID;SYMLINK 名称(如 asm-disk1)需在所有节点保持一致,且不能与 multipath 别名冲突。
gridSetup.sh 启动前必须验证的三件事
即使 udev 规则生效,gridSetup.sh 仍可能卡在 pre-check 或静默退出,原因往往藏在底层状态里。
- 检查 ASM 实例是否已由 CRS 管理:
crsctl stat res ora.asm -p | grep STATE,若为OFFLINE,手动启动:crsctl start res ora.asm - 确认磁盘路径在所有节点完全一致:
su - grid -c "sqlplus / as sysasm" -e "SELECT path FROM v$asm_disk WHERE header_status = 'CANDIDATE';",输出应为空;若显示/dev/sdb等原始路径,说明 udev 未生效或权限不对 - 查日志定位真实失败点:
tail -50 /tmp/GridSetupActions*.log | grep -i "disk\|asm\|scsi",重点看cvuCheckDisk和asmca相关段落
最容易被忽略的是:OCR 和 voting disk 必须使用同一套 udev 符号链接(如 /dev/asm-disk1),不能一部分用 ASMLib 标记,一部分用裸设备路径——混合模式会导致集群启动失败且难以回滚。


















