srvctl status 是查 oracle rac 集群服务状态最直接、最可靠的命令,它按数据库、实例、监听器、节点应用等逻辑单元分层输出,精准反映 crs 登记状态:如 srvctl status database -d orcl 显示各实例运行节点,srvctl status instance -d orcl -i orcl2 定位单实例健康度,srvctl status listener 和 srvctl status scan_listener 分别验证本地监听与 scan 入口,srvctl status nodeapps -n rac2 则综合判断 vip、网络、ons 等节点级服务是否就绪。
srvctl status 是查 oracle rac 集群服务状态最直接、最可靠的命令,比 crs_stat 或 crsctl stat res 更贴近业务视角,且输出明确区分“数据库”“实例”“监听器”等逻辑单元。
srvctl status database 查整个数据库服务是否在线
这是日常巡检第一动作,它不关心底层资源细节,只回答“这个数据库能不能连、有没有实例在跑”:
- 执行
srvctl status database -d orcl,输出类似Instance orcl1 is running on node rac1表示正常;若某实例显示is not running,说明该节点数据库没起来,不是 CRS 资源问题就是实例自身故障 - 如果返回
PRCD-1084 : Failed to retrieve database orcl,常见原因是数据库未注册进集群(srvctl add database漏了),或当前用户不是oracle(必须用 Oracle 软件所有者执行) - 注意:-d 后跟的是
DB_UNIQUE_NAME,不是DB_NAME;查错时先确认srvctl config database输出的唯一名称
srvctl status instance 查单个实例是否健康
当 srvctl status database 显示某个实例 offline,下一步必须定位到具体节点和实例名:
- 执行
srvctl status instance -d orcl -i orcl2,能精准判断orcl2在rac2上的状态,避免误判为网络或 VIP 问题 - 若提示
PRCR-1001 : Resource does not exist,说明该实例未被srvctl add instance注册过,常见于手动建库后未补注册步骤 - 该命令不检查实例内部状态(比如是否 hang 在 recovery),仅反映 CRS 认为它“应运行且已启动”。真要确认可用性,得连上去执行
select status from v$instance
srvctl status listener 和 scan_listener 区分两类监听器
RAC 里监听器不止一个,srvctl status listener 默认查的是本地节点的 LISTENER(端口 1521),而 SCAN 监听器是跨节点负载入口,必须单独查:
-
srvctl status listener返回Listener LISTENER is running on node: rac1,只代表本机监听进程活着,不代表客户端能通过 SCAN 连上 - 必须补查
srvctl status scan_listener,它会告诉你 SCAN VIP 对应的监听器是否在运行。若这里显示 offline,即使本地 listener 正常,SCAN 连接也会失败 - 如果
srvctl status scan报错或无输出,说明 SCAN VIP 本身没起来,这时要回退查srvctl status nodeapps -n rac1看 VIP 和 Network 是否正常
srvctl status nodeapps 是节点级服务的“总开关”视图
它把 VIP、GSD、ONS、监听器打包成一个逻辑组,适合快速判断节点是否“准备好承接连接”:
- 执行
srvctl status nodeapps -n rac2,若其中任意一项显示is not running(比如GSD is not running),但其他项都 running,通常可忽略——因为 GSD 在 11gR2+ 默认 disable,不影响功能 - 真正关键的是 VIP 和 Listener 必须都显示
is running;若 VIP enabled 但 not running,大概率是网卡配置或路由问题,不是 CRS 层面能解决的 - 注意:该命令必须指定
-n节点名,不能省略;且需由grid或oracle用户执行,root 执行会报权限错误
真正容易被忽略的点是:srvctl 的输出只反映 CRS 的“登记状态”,不等于服务实际可用。比如监听器进程在,但 lsnrctl status 发现它没注册任何实例,或者 SCAN 监听器在,但 DNS 解析不到 SCAN 名——这些都得跳出 srvctl,用底层命令交叉验证。











