Oracle 19c RAC中不存在单机版ASM,ASM必须依赖CRS框架运行;ora.asm是受CRS管理的资源,强依赖ora.cssd、ora.ctssd等组件,且磁盘初始化强制使用AFD或udev+asmtool,oracleasm已彻底移除。Oracle 19c RAC **根本不存在“单机版ASM”这个概念**——ASM 在 19c 中已彻底与 Clusterware 绑定,无法脱离集群框架独立运行。这不是“不支持”,而是架构层面的强制约束。
ora.asm 资源必须依赖 CRS 管理
19c 的 asm 实例不再是传统意义上的后台进程(如 asm_pmon),而是由 oracle clusterware 作为受管资源统一调度的 ora.asm 资源。它依赖以下 crs 组件才能启动:
-
ora.cssd(集群同步服务):提供节点成员资格和心跳保障 -
ora.ctssd(集群时间同步服务):确保跨节点时间一致 -
ora.cluster_interconnect.haip(可选但默认启用):私网通信基础
如果你在单节点上只装 Grid Infrastructure 而不启动 CRS(比如仅用 crsctl start crs 后立刻停掉),ora.asm 将因依赖缺失而拒绝启动,ps -ef | grep asm_pmon 查不到进程,asmcmd lsdsk 报 ORA-15077: could not locate ASM instance。
单节点部署也必须走 RAC 框架,哪怕只用一个节点
Oracle 官方明确要求:所有 19c ASM 使用场景(包括所谓“单节点 RAC”或 Oracle Restart 环境)都必须通过完整的 GI 安装流程部署,且:
- 必须运行
root.sh完成 CRS 初始化 - 必须使用
crsctl start resource ora.asm启动 ASM,而非手动startup nomount - 磁盘发现机制强制绑定 AFD 或 udev +
asmtool,oracleasm已被移除内核支持
尝试绕过 CRS、直接用 sqlplus / as sysasm 启动会失败,报错类似 ORA-01078: failure in processing system parameters,因为 ASM 的 SPFILE 默认存于 OCR 或 ASM 磁盘组中,而 OCR 本身又依赖 CSSD 和 Voting Disk —— 这是一个闭环依赖。
为什么不能像 11g 那样“纯单实例 ASM”?
关键变化在存储栈底层:
-
oracleasm内核模块在 OEL8+/RHEL8+ 上默认不编译,modprobe oracleasm直接报Module oracleasm not found - 19c 强制启用 ASMFD(
asmfd -i),它工作在 block device 层,拦截所有非 ASM 的写入;若强行用旧方式初始化磁盘,kfed read会报KFED-00322: Invalid OSM block type - ACFS/ADVM 驱动也不再随系统启动自动加载,在非 RAC 环境下需手动执行
acfsload,否则asmca中 ACFS 菜单不显示、卷无法挂载
这些改动不是为了增加复杂度,而是为消除单点故障面——ASM 不再是“可选组件”,而是集群存储基础设施的不可分割部分。哪怕你只部署一个节点,也要按 RAC 的逻辑走完 CRS 生命周期管理。
实际部署中最容易忽略的一点
很多人以为“只装一个节点就不用配私网”,结果 root.sh 执行到一半卡住,crsctl check cluster 显示 CRS-4638: Oracle High Availability Services is online,但 crsctl stat res -t 里 ora.asm 始终是 OFFLINE。真正原因往往不是配置错误,而是:没有在 /etc/hosts 中为私网 IP(如 10.0.0.101)配置对应主机别名(如 rac01-priv),导致 CSSD 初始化时无法解析本地私网地址,后续所有依赖全部失效——这个细节在日志里不会明说,只会表现为“资源启动超时”。











