oracle rac one node是专为单实例高可用设计的轻量集群形态,基于rac底层栈(crs、asm等)运行单实例,故障时自动迁至候选节点,无需共享存储双写;成本低在于免多实例license、无需infiniband、运维简化;需12.1+版本支持srvctl convert与稳定ron.db资源,且license须单独包含“oracle real application clusters one node”选项。

Oracle RAC One Node 不是“降级版 RAC”,而是专为单实例高可用设计的轻量集群形态——它用 RAC 的底层集群栈(CRS、ASM、OCR/Voting Disk)支撑一个始终只在单节点运行的数据库实例,故障时自动迁移到候选节点,无需共享存储双写或复杂负载分发。成本低的关键在于:不需多实例 License(按 CPU 计费时省一半以上),不强制要求 InfiniBand 或双私网,且运维复杂度远低于全 RAC。
确认 RAC One Node 的许可与版本兼容性
RAC One Node 自 Oracle 11.2.0.2 起正式支持 Data Guard,但生产环境强烈建议使用 12.1 及以上版本(如 19c),因为:
- 11.2.0.1 仅以一次性补丁形式提供,平台支持有限,且无长期补丁支持;
- 12.1+ 支持
srvctl convert database命令,可从单机库或 RAC 库在线转为 RAC One Node,避免重建; - 19c 中
ora.ron.db资源类型已稳定,srvctl relocate serverpool故障迁移成功率更高。
必须检查 v$license 或 MOS 文档 ID 1557682.1,确认当前 License 含 “Oracle Real Application Clusters One Node” 选项——它和标准 RAC 是独立选件,混用不合法。
配置候选节点池与服务绑定
RAC One Node 的故障转移依赖 Server Pool 和服务(Service)的协同。不能直接用 srvctl start database 启动,必须通过服务驱动:
- 创建专用 Server Pool:
srvctl add serverpool -serverpool RON_POOL -min 1 -max 2 -servers "rac1,rac2"; - 将数据库注册进该池:
srvctl modify database -db RON -serverpool RON_POOL; - 定义应用服务并绑定到池:
srvctl add service -db RON -service RON_APP -serverpool RON_POOL -failovertype SESSION -failovermethod BASIC; - 客户端连接字符串中必须使用该服务名(如
RON_APP.example.com),而非 SID —— 否则故障迁移后连接会失败。
注意:-min 1 表示至少一个节点承载实例,-max 2 表示最多允许两个节点参与候选。若设为 -max 1,则失去故障转移能力。
验证故障迁移路径与静默切换条件
RAC One Node 的“自动迁移”不是无条件触发,它依赖 CRS 对节点健康状态的判断,常见失败点:
- 私网中断但公网仍通时,CRS 默认不驱逐节点(因心跳未完全丢失),导致脑裂风险 —— 必须设置
css misscount和reboottime参数严格匹配业务容忍窗口; - 候选节点资源不足(如内存低于
memory_target阈值)会导致迁移卡在 “STARTING” 状态,需提前在srvctl config database -db RON中核对Memory Size; - 手动触发迁移命令是
srvctl relocate database -db RON -node rac2 -verbose,但生产中应避免,优先依赖 CRS 自动决策; - 迁移过程约 30–90 秒,期间新连接会被服务层拒绝(非断连),老连接保持直到事务结束或超时(由
sqlnet.expire_time控制)。
最关键的遗漏点:很多人忘了在候选节点上预配置监听器别名(listener.ora 中的 SID_LIST)和 TNSNAMES 入口,导致迁移后监听无法识别实例名,服务启动失败。











