本文以 Oracle 19c 两节点 RAC 环境为例进行演示,但文中的检查思路同样适用于4节点、6节点等多节点 RAC 场景,主要区别在于检查结果中节点数、实例数及 PDB 状态记录数会相应增加。
一、排查目标
确认以下内容是否正常:
-
两个 RAC 节点是否都在线?
-
集群资源是否正常?
-
数据库两个实例是否都正常打开?
-
如果是 CDB/PDB 架构,业务 PDB 是否都正常打开?
二、生产环境排查原则
生产环境优先使用只读、查看类命令,避免执行会引起切换、重启、停止、迁移的操作。
三、最简排查步骤
1. 检查节点状态
切换到 grid 用户执行:
su - grid
olsnodes -n -s
命令说明
-
olsnodes:查看集群节点信息 -
-n:显示节点编号 -
-s:显示节点状态
检查目的
确认两个 RAC 节点是否都已加入集群并处于活动状态。
2. 检查集群资源和数据库资源状态
grid用户继续执行:
crsctl stat res -t
检查目的
查看集群关键资源是否正常在线,包括:
-
数据库资源
-
ASM
-
监听
-
VIP
-
SCAN
-
网络资源
重点关注
-
Target是否为ONLINE -
State是否为ONLINE -
数据库资源的
State details是否为Open -
资源状态是否为
STABLE
3. 检查数据库实例状态
切换到 oracle 用户登录数据库:
su - oracle
export ORACLE_SID=<当前节点对应实例名>
sqlplus / as sysdba
说明:在服务器本地使用 sqlplus / as sysdba 登录数据库前,应先设置 ORACLE_SID 为当前节点对应的实例名,以确保连接到目标实例。
执行:
set linesize 200
select inst_id, instance_name, host_name, status
from gv$instance
order by inst_id;
检查目的
确认两个实例是否都已正常打开。
说明
-
gv$instance为全局视图 -
在任意一个节点执行即可查看整个 RAC 所有实例状态
4. 检查 PDB 状态(适用于 CDB/PDB 架构)
Oracle用户SQL窗口继续执行:
set lines 200
col name for a20
select inst_id, con_id, name, open_mode
from gv$pdbs
order by inst_id, con_id;
检查目的
确认各业务 PDB 在两个实例上的打开状态是否正常。
说明
-
gv$pdbs为全局视图 -
在任意一个节点执行即可查看所有实例上的 PDB 状态
四、最简判断标准
RAC 层面正常标准
-
两个节点状态正常
-
集群资源正常在线
-
数据库资源正常在线并已打开
数据库层面正常标准
-
两个实例状态正常
-
各业务 PDB 状态正常
五、最简排查命令清单
grid 用户
su - grid
olsnodes -n -s
crsctl stat res -t
oracle 用户
su - oracle
sqlplus / as sysdba
set linesize 200
select inst_id, instance_name, host_name, status
from gv$instance
order by inst_id;
set lines 200
col name for a20
select inst_id, con_id, name, open_mode
from gv$pdbs
order by inst_id, con_id;
六、命令作用简述
olsnodes -n -s
查看 RAC 集群节点信息、节点编号及节点状态。
crsctl stat res -t
查看集群资源、数据库资源、监听、VIP、SCAN、ASM 等状态。
gv$instance
查看整个 RAC 所有实例的状态。
gv$pdbs
查看整个 RAC 所有实例上的 PDB 打开状态。
七、实操记录(已脱敏)
[root@racnode2 ~]# su - grid
[grid@racnode2 ~]$ olsnodes -n -s
racnode1 1 Active
racnode2 2 Active
[grid@racnode2 ~]$ crsctl stat res -t
--------------------------------------------------------------------------------
Name Target State Server State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.LISTENER.lsnr
ONLINE ONLINE racnode1 STABLE
ONLINE ONLINE racnode2 STABLE
ora.net1.network
ONLINE ONLINE racnode1 STABLE
ONLINE ONLINE racnode2 STABLE
ora.ons
ONLINE ONLINE racnode1 STABLE
ONLINE ONLINE racnode2 STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.DATA.dg(ora.asmgroup)
1 ONLINE ONLINE racnode1 STABLE
2 ONLINE ONLINE racnode2 STABLE
ora.RECO.dg(ora.asmgroup)
1 ONLINE ONLINE racnode1 STABLE
2 ONLINE ONLINE racnode2 STABLE
ora.asm(ora.asmgroup)
1 ONLINE ONLINE racnode1 Started,STABLE
2 ONLINE ONLINE racnode2 Started,STABLE
ora.scan1.vip
1 ONLINE ONLINE racnode2 STABLE
ora.racnode1.vip
1 ONLINE ONLINE racnode1 STABLE
ora.racnode2.vip
1 ONLINE ONLINE racnode2 STABLE
ora.appcdb.db
1 ONLINE ONLINE racnode1 Open,HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1,STABLE
2 ONLINE ONLINE racnode2 Open,HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1,STABLE
ora.reportadg.db
1 ONLINE ONLINE racnode1 Open,Readonly,HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1,STABLE
2 ONLINE ONLINE racnode2 Open,Readonly,HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1,STABLE
--------------------------------------------------------------------------------
[grid@racnode2 ~]$ exit
logout
[root@racnode2 ~]# su - oracle
[oracle@racnode2 ~]$ export ORACLE_SID=APPCDB2
[oracle@racnode2 ~]$ sqlplus / as sysdba
SQL> set linesize 200
SQL> select inst_id, instance_name, host_name, status
2 from gv$instance
3 order by inst_id;
INST_ID INSTANCE_NAME HOST_NAME STATUS
---------- -------------------------------- ------------------------ ------------------------
1 APPCDB1 racnode1.example.com OPEN
2 APPCDB2 racnode2.example.com OPEN
SQL> set lines 200
SQL> col name for a20
SQL> select inst_id, con_id, name, open_mode
2 from gv$pdbs
3 order by inst_id, con_id;
INST_ID CON_ID NAME OPEN_MODE
---------- ---------- -------------------- --------------------
1 2 PDB$SEED READ ONLY
1 3 PDB_APP1 READ WRITE
1 5 PDB_APP2 READ WRITE
2 2 PDB$SEED READ ONLY
2 3 PDB_APP1 READ WRITE
2 5 PDB_APP2 READ WRITE
6 rows selected.
检查结论:
Oracle 19c 两节点 RAC 集群运行正常,双节点在线,集群资源正常,双实例均已打开,业务 PDB 在两个实例上均正常提供读写服务。
总结:
检查 Oracle 19c 两节点 RAC 运行状态时,可通过节点状态、集群资源、实例状态及 PDB 打开状态四个层面进行最简排查。根据本次检查结果,两个节点均为 Active,集群资源均为 ONLINE,两个实例均为 OPEN,业务 PDB 在双节点上均为 READ WRITE,整体运行状态正常。
