Oracle RAC资源自动重启由CRS控制,与数据库参数无关;节点级重启由crsctl set css rebootpolicy配置,资源级重启需用crsctl modify resource设置RESTART_ATTEMPTS等属性,并依赖ora.cssd和ora.diskmon正常运行。

Oracle RAC资源自动重启由CRS控制,不是靠数据库参数
Oracle RAC中,实例、监听、ASM、VIP等资源的自动重启行为完全由Oracle Clusterware(即CRS)管理,和init.ora或spfile里的数据库参数无关。误以为设置restart_on_failure=TRUE之类就能生效,是常见误区——CRS根本不认识这种参数。
用crsctl set css rebootpolicy配置节点级重启策略
节点崩溃后是否自动重启,取决于CSS(Cluster Synchronization Services)的rebootpolicy,它控制整个节点在心跳丢失或CSSD异常时的行为:
-
crsctl set css rebootpolicy always:节点异常时强制重启(默认值,但仅适用于Oracle 11.2.0.2+) -
crsctl set css rebootpolicy never:禁止自动重启,需人工干预 -
crsctl set css rebootpolicy lossofquorum:仅当法定票数(quorum)丢失时重启(如多数Voting Disk不可访问)
执行后需重启ohasd或整个CRS栈才生效;注意该策略不作用于单个资源,而是整个节点存活逻辑。
对单个资源(如数据库实例)启用自动重启需设置RESTART_ATTEMPTS和FAILURE_THRESHOLD
每个CRS托管资源都有自己的重启策略,通过crsctl modify resource调整。关键参数是:
-
RESTART_ATTEMPTS:失败后最多重试几次(默认2),设为0表示禁用自动重启 -
FAILURE_THRESHOLD:单位时间内失败多少次触发“资源被标记为OFFLINE”,不再尝试重启(默认1) -
FAILURE_INTERVAL:计算FAILURE_THRESHOLD的时间窗口(秒,默认60)
示例:让数据库实例orcl在10分钟内最多重启5次,超限则停服
crsctl modify resource "ora.orcl.db" -attr "RESTART_ATTEMPTS=5,FAILURE_THRESHOLD=5,FAILURE_INTERVAL=600"
注意:ora.orcl.db必须是crsctl stat res -t里显示的确切资源名,大小写敏感,且修改后需用crsctl stop resource + crsctl start resource触发策略加载,不能热生效。
监听和VIP资源默认已启用自动重启,但私网中断会导致它们反复failover
监听器(ora.LISTENER.lsnr)和VIP(ora.<node>.vip</node>)默认RESTART_ATTEMPTS=2,但若私有网络不稳定,它们会因GNS或HAIP探测失败而频繁重启/漂移,掩盖真实问题。此时不应调高RESTART_ATTEMPTS,而应:
- 检查
cssd日志中是否有missed heartbeat或network timeout - 确认私网MTU一致、无ARP风暴、交换机端口未启STP
- 避免将私网接口绑定到NetworkManager或DHCP客户端
强行让VIP无限重启,可能造成客户端连接持续中断,比短暂离线更伤业务。
真正容易被忽略的是:CRS资源重启依赖于ora.cssd和ora.diskmon的健康状态。如果Voting Disk路径权限错误或ASM磁盘组DISKGROUP未挂载,连ora.cssd自己都起不来,所有资源重启策略形同虚设——先保底层,再谈自动恢复。


















