不能,cluster_database=false仅使实例以单实例模式启动,但底层仍依赖Oracle Clusterware组件,未真正关闭RAC。
cluster_database=false 能否让 RAC 实例降级为单实例运行
不能直接“关闭 rac 特性”,cluster_database=false 只是禁止实例加入集群,不等于卸载或禁用 oracle clusterware。它只是让当前实例以单实例模式启动,但底层仍依赖 ocr、vote disk 和 crsd 等组件——这些没停,rac 没真正“关掉”。
- 设置
cluster_database=false后,实例不再尝试注册到 GES/GCS,也不参与全局缓存,但仍在同一个 Clusterware 管理下运行 - 必须确保所有其他节点已 shutdown(或至少
crsctl stop crs),否则启动时可能因资源争用或 OCR 冲突报错ORA-01078: failure in processing system parameters或CRS-2640: Required resource 'ora.asm' is not running - 该参数仅影响数据库实例行为,不影响
ASM实例——ASM 默认就是集群模式,cluster_database=false对它无效
修改 cluster_database 参数的实际操作步骤
核心是改 SPFILE + 重启,但顺序和验证点容易出错。
- 先用
sqlplus / as sysdba连上已有实例,执行:ALTER SYSTEM SET cluster_database=false SCOPE=SPFILE;
- 必须关闭所有实例(包括 ASM):用
srvctl stop database -d <db_name>和srvctl stop asm -n <node_name>,别只用shutdown immediate—— 否则 Clusterware 仍认为实例“在线” - 再停本地 CRS:
crsctl stop crs(这步常被跳过,导致后续启动失败) - 最后用
sqlplus / as sysdba启动:STARTUP NOMOUNT
,再ALTER DATABASE MOUNT;此时若报ORA-00439: feature not enabled: Real Application Clusters,说明你还没打补丁或 license 不支持单实例模式(极少见,但存在)
为什么 set cluster_database=false 后还是连不上?
常见不是参数问题,而是监听和网络配置没同步调整。
-
listener.ora中如果还保留SID_LIST里指向 RAC 的SID_DESC(含GLOBAL_DBNAME带DB_UNIQUE_NAME或SCAN名),客户端连接会超时或路由失败 - 检查
local_listener参数是否仍指向 SCAN 地址:SHOW PARAMETER local_listener
,应改为本机 IP + 非 SCAN 端口,比如(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.10)(PORT=1521))) -
tnsnames.ora客户端配置里删掉所有含LOAD_BALANCE=on、FAILOVER=on或多个ADDRESS的条目,只留单地址 - 确认
sqlnet.ora没启用SQLNET.ALLOWED_LOGON_VERSION_SERVER=8类限制——某些老客户端在单实例模式下握手更敏感
维护完成后如何安全切回 RAC 模式
不是简单改回 true 就完事,OCR 和资源状态必须对齐。
- 先确保 Clusterware 已全部启动:
crsctl check crs全绿,且ocrcheck正常 - 用
srvctl config database -d <db_name>确认数据库资源定义仍存在;若丢失,需用srvctl add database ...重建 - 改回参数:
ALTER SYSTEM SET cluster_database=true SCOPE=SPFILE;
,然后srvctl start database -d <db_name>(不要用 SQL*Plus 的startup) - 启动后立刻查:
SELECT INST_ID, INSTANCE_NAME, HOST_NAME, STATUS FROM gv$instance;
,必须看到所有节点的STATUS=OPEN,且INST_ID连续;若某节点卡在MOUNTED,大概率是 ASM 没起来或磁盘组 offline
最易忽略的是:改 cluster_database 之后,没清空 $ORACLE_HOME/rdbms/admin 下的 init.ora 备份(如果有),下次误用 PFILE 启动就会失效。还有人忘记改完就重启 CRS,结果实例被自动拉起又回到 RAC 模式——因为 srvctl 启动时会覆盖 SPFILE 里的设置。

















