Oracle Restart仅适用于单实例非集群环境,RAC中由CRS全权负责高可用管理;二者共用ohasd.bin但初始化参数与资源模型不同,RAC下crsctl stat res -t显示集群资源即表明已启用CRS模式。
Oracle Restart 不是为 RAC 设计的,它只适用于单机(non-RAC)环境。在 Oracle 11g RAC 中,OHASD 和 CRS 已经接管全部高可用管理职责,Oracle Restart 不会、也不能启用或共存。
如果你看到 RAC 节点上运行了 ohasd.bin,那只是 Oracle High Availability Services(OHAS)的一部分,不是 Oracle Restart —— 后者仅存在于单实例 + Grid Infrastructure 的非集群部署中。
为什么不能在 RAC 中配置 Oracle Restart
oracle restart 是 oracle 11g 引入的轻量级高可用机制,目标场景明确:单主机、无共享存储、无集群通信需求的数据库部署。它的启动入口是 /etc/init.d/ohasd,由 root 运行,但该脚本在 rac 安装后会被 crsctl start crs 替代,且 ohasd 在 rac 下直接演进为完整的 crs 栈。
- RAC 必须启用
Cluster Ready Services (CRS),而Oracle Restart与CRS使用同一套二进制(ohasd.bin),但初始化参数和资源模型完全不同 -
crsctl check crs返回CRS-4638: Oracle High Availability Services is online,说明已是完整集群服务模式,Oracle Restart模式已被覆盖 - 尝试在 RAC 节点上手动执行
srvctl add database -d ... -r SINGLE或修改ora.<db>.db</db>类型为SINGLE会导致资源注册失败或CRS-2551错误
如何确认当前是 CRS 模式而非 Oracle Restart 模式
运行以下命令,观察输出是否含集群资源标识:
crsctl stat res -t
如果输出中出现类似 ora.asm、ora.cssd、ora.crsd、ora.cluster_interconnect.haip 等资源,且状态为 ONLINE,说明已进入 CRS 模式;Oracle Restart 下只会显示 ora.<db>.db</db>、ora.<listener>.lsnr</listener> 等本地资源,且 crsctl stat res -init -t 才有响应。
-
crsctl stat res -init -t显示的是 OHASD 初始化资源(如ora.cssd、ora.ctssd),RAC 和 Restart 都有,但不能据此判断模式 - 真正区分点在于:
crsctl stat res -t是否列出Cluster Resources分区 —— RAC 有,Restart 没有 - 检查进程:
ps -ef | grep crsd存在即为 CRS;ps -ef | grep ohasd单独存在且无crsd.bin则可能是 Restart(但 11.2+ 默认不单独启用)
如果误以为需要 Oracle Restart,实际要做什么
在 RAC 环境中,“自动重启失败组件”这件事已经由 CRS 全权负责,无需额外配置 Oracle Restart。你真正该关注的是:
- 确保所有关键资源(如
ora.asm、ora.<db>.db</db>、ora.<service>.svc</service>)的AUTO_START属性设为always:crsctl modify resource "ora.racdb.db" -attr "AUTO_START=always" - 验证 OCR 和 Voting Disk 可访问性:
ocrcheck、crsctl query css votedisk,这是 CRS 自动恢复的前提 - 监听器必须用
srvctl管理,而非手工启停;否则 CRS 无法感知其状态,不会触发重启 - 数据库实例的
SPFILE必须位于 ASM 或集群文件系统(如 OCFS2),否则节点重启后 CRS 无法挂载磁盘组并启动实例











