停节点前必须先停监听以隔离流量,再用srvctl stop instance -o immediate停实例,最后用crsctl stop cluster -n安全停集群;启动时需先启集群、等asm磁盘组mounted后,再启实例和监听。

停节点前必须先停监听,否则连接会中断
RAC 单节点重启不是简单执行 crsctl stop cluster 就完事。应用连接默认走 SCAN + VIP,如果先停集群服务,监听还在跑,新连接仍会被路由到该节点,但后续实例一停,连接就直接报 ORA-12545 或 ORA-12514。所以第一步永远是隔离流量。
- 先在目标节点用
srvctl stop listener -n <node_name></node_name>停掉本地监听(比如srvctl stop listener -n rac1) - 立即验证:运行
srvctl status listener -n rac1,确认输出为 “not running” - 检查客户端是否已自动切到另一节点:在业务侧发几个测试连接,或查
v$session的inst_id,确认新会话都落在inst_id=2(假设另一节点是 rac2)
停实例要用 srvctl stop instance,别进 SQL*Plus 手动 shutdown
手动用 sqlplus / as sysdba 连上再 shutdown immediate 会绕过 CRS 资源管理,导致 OCR 中状态不一致,下次启不来,或者 srvctl status database 显示异常。
- 正确命令是:
srvctl stop instance -d <db_unique_name> -i <instance_name> -o immediate</instance_name></db_unique_name>
(例如:srvctl stop instance -d p19c0 -i p19c01 -o immediate) - 必须指定
-o immediate,否则默认是normal,可能卡住等待事务完成 - 停完立刻查:
srvctl status database -d p19c0,应显示 “Instance p19c01 is not running on node rac1”
停集群服务用 crsctl stop cluster -n,不是 stop crs
crsctl stop crs 是停本机所有 CRS 组件(包括 CSS、CRS、EVM),但会强制终止进程,可能留下残留资源锁;而 crsctl stop cluster -n <node_name></node_name> 是受控退出,会按依赖顺序依次停止资源,更安全。
- 执行:
/u01/app/19.3.0/grid/bin/crsctl stop cluster -n rac1 - 等待输出出现
CRS-2673: Attempting to stop 'ora.crsd' on 'rac1'及后续成功日志 - 切到另一节点运行
olsnodes -s,确认 rac1 状态为down(不是unreachable)
启动时顺序不能错:先 crsctl start cluster,再等 ASM 自动挂载
重起节点后,别急着 srvctl start database。Grid Infrastructure 启动后,ASM 实例和磁盘组是自动拉起的,但需要时间 —— 尤其是 OCR/Voting 磁盘组必须先 online,否则数据库无法注册。
- 启动:
/u01/app/19.3.0/grid/bin/crsctl start cluster -n rac1 - 等 2–3 分钟,检查:
crsctl check cluster -n rac1应全 green;asmcmd lsdg中+OCR和+DATA的state都是MOUNTED - 此时再执行:
srvctl start instance -d p19c0 -i p19c01
(不用加-o,因为默认就是open)
最常被忽略的是监听没恢复 —— srvctl start cluster 不会自动重启监听,得手动补一句:srvctl start listener -n rac1,否则业务连不上。











