必须用srvctl操作数据库、ASM和监听器,否则OCR记录与实际状态脱节;启停实例须同时指定-d和-i参数;ASM必须用srvctl start asm而非start diskgroup;监听器启停需显式指定名称(如LISTENER_SCAN1);查配置唯一可信源是srvctl config。

必须用 srvctl 操作数据库、ASM、监听器等服务,不能绕过它直接用 SQL*Plus 或 crsctl 启停——否则 OCR 记录和实际状态会脱节,后续资源依赖判断全乱。
启停单个数据库实例时,srvctl 的 -i 和 -d 参数不能颠倒
启动或停止某个实例,必须同时指定数据库名(-d)和实例名(-i),顺序无关,但缺一不可。只写 -d 会操作整个数据库(所有实例),只写 -i 会报错找不到上下文。
-
srvctl start instance -d p19c0 -i p19c01:只启节点1上的实例 -
srvctl stop instance -d p19c0 -i p19c02:只停节点2上的实例 - 误写成
srvctl stop instance -i p19c01→ 报错PRCD-1084 : Failed to retrieve database for instance p19c01 - 生产环境建议先用
srvctl status database -d p19c0确认当前各实例状态,再针对性操作
启停 ASM 实例必须用 srvctl start asm,不是 start diskgroup
srvctl start diskgroup 只挂载磁盘组,不启动 ASM 进程本身;若 ASM 进程没起来,数据库实例根本无法访问数据文件,srvctl start database 会卡在依赖检查阶段。
- 正确启动节点1的 ASM:
srvctl start asm -n rac01 - 错误操作:
srvctl start diskgroup -g DATA→ 磁盘组可能 mount 成功,但ora.asm资源仍是 OFFLINE - 验证是否真启动:
srvctl status asm -n rac01(输出应含running on rac01),而非只查crsctl status res ora.DATA.dg - 如果 ASM 启动失败,大概率是 OCR 中记录的 ASM spfile 路径错误,或磁盘心跳(voting disk)不可达
监听器启停必须显式指定名称,SCAN 监听器名不是 LISTENER
默认监听器名是 LISTENER,但 SCAN 监听器名通常是 LISTENER_SCAN1(也可能为 _SCAN2 或 _SCAN3)。省略 -l 参数时,srvctl 默认操作的是 LISTENER,对 SCAN 监听器无效。
- 停本节点本地监听:
srvctl stop listener -n rac01 - 停 SCAN 监听器(必须先确认名字):
srvctl config scan_listener→ 得到SCAN Listener LISTENER_SCAN1→ 再执行srvctl stop listener -l LISTENER_SCAN1 - 误操作:
srvctl stop listener(无参数)→ 只停LISTENER,SCAN 仍在运行,应用仍可通过 SCAN 连接,达不到预期效果 - 启停后务必用
srvctl status listener -l LISTENER_SCAN1验证,别只信lsnrctl status,后者不反映集群注册状态
查配置必须用 srvctl config,别信本地文件或 SQL 查询
OCR 是唯一可信源。tnsnames.ora、listener.ora、甚至 v$parameter 都可能和集群实际配置不一致,尤其在做过手工修改或跨版本升级后。
- 查数据库启动参数:
srvctl config database -d p19c0,不是show parameter spfile - 查监听器端口和协议:
srvctl config listener -l LISTENER,不是翻$ORACLE_HOME/network/admin/listener.ora - 查 ASM 磁盘组依赖:
srvctl config asm -n rac01,不是查v$asm_diskgroup - 任何配置类问题,第一步永远是
srvctl config,第二步才是比对本地文件——跳过这步,90% 的“诡异问题”都源于 OCR 和文件不一致
最容易被忽略的一点:所有 srvctl 操作都必须在对应 Oracle Home 下执行,且用户权限要匹配——数据库操作用 oracle 用户,集群级操作(如 stop cluster)必须用 root,混用会导致命令静默失败或权限拒绝,但错误信息极不明确。











