必须重启CRS,因crsctl set node role仅更新OCR配置,不触发动态重载;Hub与Leaf资源栈差异大(如ASM不启动、监听改用LISTENER_LEAF且端口为1525),唯重启CRS才能加载新资源配置。
不能靠“添加节点”就简化管理,flex cluster 的简化效果完全取决于角色设计是否合理;leaf node 不是省事的捷径,而是特定读负载场景下的有约束选项。
为什么 crsctl set node role 之后必须重启 CRS
Oracle 12cR2 的 Flex Cluster 中,crsctl set node role 只修改 OCR 中的角色配置项,并不触发动态重载。Hub 和 Leaf 的资源栈差异极大:Leaf Node 上默认不启动 ora.asm、不注册 ora.LISTENER.lsnr、改用 ora.LISTENER_LEAF.lsnr(端口默认 1525),这些变化只能在 CRS 完全重启后由新启动流程加载对应资源配置。
- 不重启直接执行
crsctl check cluster -all会显示旧状态,crsctl get node role虽返回新配置,但实际资源行为未变 - 重启前若强行启动 DB 实例,会报错
ORA-01078: failure in processing system parameters或ORA-00443: background process "asm" did not start - 重启命令必须以 root 执行:
/u01/app/12.2.0/grid/bin/crsctl stop crs→ 等待所有资源清空 →/u01/app/12.2.0/grid/bin/crsctl start crs
Leaf Node 上启动只读数据库实例的前提条件
12cR2 允许 Leaf Node 运行只读 DB 实例(即所谓 Reader Node),但这不是默认能力,需同时满足三个硬性条件:
- 集群必须已启用 GNS(
srvctl config gns必须返回有效配置;否则crsctl set node role leaf会报CRS-4693: GNS must be configured for leaf node role) - 该 Leaf Node 必须能访问共享存储(用于存放数据文件、控制文件、online redo log —— 即使只读,实例仍需完整打开控制文件和数据字典)
- 数据库必须显式配置为只读模式:
ALTER DATABASE OPEN READ ONLY;若尝试OPEN或OPEN UPGRADE,实例将立即中止并报ORA-01126: database must be mounted in exclusive mode and not open for this operation
Hub 转 Leaf 后监听和服务注册的变化
角色切换后最易被忽略的是监听行为断层:Leaf Node 不再使用标准 LISTENER,而是自动启用独立的 LISTENER_LEAF,且只接受只读服务注册。这意味着:
根据 package.json 中的 engines 字段自动检测 Node.js 版本需求,未安装 nvm 时自动安装并切换至对应版本。支持 Windows、macOS、Linux。适用于 Node.js 项目开发、版本切换和环境配置。
-
lsnrctl status默认查的是LISTENER,输出里永远看不到 DB 服务,容易误判“服务没起来” - 必须显式查
lsnrctl status LISTENER_LEAF才能看到注册的只读服务(如orcl_READONLY) - 客户端连接字符串中的
(ADDRESS=(PROTOCOL=TCP)(HOST=...)(PORT=1521))需改为PORT=1525,否则连接被拒绝,错误为ORA-12514: TNS:listener does not currently know of service requested in connect descriptor - 如果已有应用依赖
tnsnames.ora中的LISTENER别名,必须同步更新别名指向LISTENER_LEAF
Leaf Node 无法运行 ASM 是设计限制,不是配置错误
Leaf Node 上执行 srvctl start asm 或手动启动 +ASM 实例,一定会失败,报错 ORA-00443: background process "asm" did not start 或 CRS-2674: Start of 'ora.asm' on 'nodeX' failed。这不是权限或路径问题,而是 Oracle 在代码层禁用了 Leaf Node 的 ASM 栈加载逻辑 —— 因为 Leaf Node 的定位就是“通过 Hub 获取数据”,而非“参与存储管理”。试图绕过该限制(比如手工复制 ASM 相关 bin 文件、修改 init.ora)会导致 CRS 启动校验失败,整个节点无法加入集群。
真正需要本地存储能力的场景,应坚持使用 Hub Node;Leaf Node 只适合部署对存储无写入依赖、且能容忍只读语义的应用(如报表中间件、只读查询服务、EBS 查询模块)。

















