一、生产启动顺序
Oracle RAC / ODA 环境启动顺序建议如下:
Grid / Clusterware
↓
ASM
↓
Listener / SCAN Listener
↓
CDB / RAC 实例
↓
PDB
1. 确认 Grid / Clusterware 正常
2. 确认 ASM 正常
3. 确认 Listener / SCAN Listener 正常
4. 启动 CDB 数据库资源
5. 进入 CDB$ROOT 打开指定 PDB
6. 最终确认 RAC 实例和 PDB 状态
核心原则:
srvctl 管 CDB / RAC 数据库资源 / ASM / Listener
SQL*Plus 管数据库内部状态 / PDB 打开状态
srvctl 是 Server Control Utility 的缩写,中文可理解为 Oracle 服务器/集群资源控制工具 。
在 Oracle RAC / ODA / Grid Infrastructure 环境中,srvctl 主要用于管理数据库、实例、监听、服务、ASM 等集群资源。
二、切换到 oracle 用户
su - oracle
确认当前用户:
whoami
正常应为:
oracle
三、查看集群资源总状态
crsctl stat res -t
crsctl = Cluster Ready Services Control
stat = status,查看状态
res = resource,资源
-t = table,以表格形式显示
重点关注:
ora.asm
ora.LISTENER.lsnr
ora.LISTENER_SCAN*.lsnr
ora.<数据库名>.db
正常状态应为:
ONLINE
如果整体资源状态正常,再继续启动 CDB 和 PDB。
四、确认 ASM 状态
查看 ASM 状态:
srvctl status asm
正常类似:
ASM is running on node teierp1
ASM is running on node teierp2
如果 ASM 没起来怎么办?
如果 ASM 未运行,先启动 ASM:
srvctl start asm
如果只需要启动某个节点 ASM,可以指定节点:
srvctl start asm -node 节点名
启动后再次确认:
srvctl status asm
也可以查看集群资源状态:
crsctl stat res -t
确认 ora.asm 为 ONLINE 后,再继续后续步骤。
说明:
ASM 是数据库文件、控制文件、redo、归档等底层存储管理组件。
如果 ASM 未正常运行,CDB 数据库通常无法正常启动。
五、确认监听状态
查看本地监听:
srvctl status listener
查看 SCAN 监听:
srvctl status scan_listener
正常应看到 Listener / SCAN Listener 正常运行。
如果监听没起来怎么办?
启动本地监听:
srvctl start listener
启动 SCAN 监听:
srvctl start scan_listener
启动后再次确认:
srvctl status listener
srvctl status scan_listener
说明:
监听未启动时,数据库本身可能已经打开,但客户端、应用或远程连接可能无法正常访问。
RAC 环境建议同时确认本地 Listener 和 SCAN Listener。
六、查询 RAC 中有哪些数据库资源
srvctl config database
示例输出:
erpcdb
mesadg
UTF8ADG
z16cdb
这里查出来的就是 srvctl -d 后面要填写的数据库资源名,通常也是 CDB / DB_UNIQUE_NAME。
七、查看目标 CDB 状态
以 erpcdb 为例:
srvctl status database -d erpcdb
正常可能看到:
Instance erpcdb1 is running on node teierp1
Instance erpcdb2 is running on node teierp2
如果实例未运行,则继续启动 CDB。
八、启动 CDB 数据库资源
srvctl start database -d erpcdb
说明:
该命令用于启动整个 erpcdb 数据库资源。
只需要在任意一个正常节点执行一次,不需要两个节点分别执行。
Oracle Clusterware 会根据数据库配置,自动启动该数据库对应的 RAC 实例。
启动后确认:
srvctl status database -d erpcdb
九、设置 ORACLE_SID 并进入 SQL*Plus
查看当前节点上的实例名:
ps -ef | grep pmon | grep -v grep
示例:
ora_pmon_erpcdb1
设置当前实例:
export ORACLE_SID=erpcdb1
进入数据库:
sqlplus / as sysdba
确认当前容器:
show con_name;
如果不是 CDB$ROOT,切换到根容器:
alter session set container=CDB$ROOT;
十、确认数据库角色和打开状态
select name, db_unique_name, database_role, open_mode from v$database;
如果是主库,通常应看到:
PRIMARY
READ WRITE
如果是 ADG / 备库,例如:
PHYSICAL STANDBY
不要按主库方式强行打开 PDB 为读写状态,需先确认业务要求。
十一、查看 PDB 状态
查看当前实例 PDB 状态:
show pdbs;
RAC 环境建议查看所有实例上的 PDB 状态:
set lines 200
col name for a30
col open_mode for a20
select inst_id, con_id, name, open_mode
from gv$pdbs
order by name, inst_id;
说明:
RAC 两个实例访问的是同一个 CDB,因此看到的 PDB 名称是一致的。
但 PDB 在不同实例上的打开状态可能不同,所以建议用 gv$pdbs 查看所有实例。
十二、打开指定 PDB
例如要打开 IETQMS:
alter pluggable database IETQMS open instances=all;
说明:
instances=all 表示在 RAC 所有实例上打开该 PDB。
RAC 环境建议加上 instances=all,避免只在当前实例打开。
十三、保存 PDB 自动打开状态
如果希望下次 CDB 启动后,该 PDB 自动打开:
alter pluggable database IETQMS save state instances=all;
十四、最终确认 PDB 状态
select inst_id, con_id, name, open_mode
from gv$pdbs
where name = 'IETQMS'
order by inst_id;
正常应看到各实例上该 PDB 为:
READ WRITE
退出 SQL*Plus:
exit
十五、快速命令汇总
1. 检查集群、ASM、监听
su - oracle
crsctl stat res -t
srvctl status asm
srvctl status listener
srvctl status scan_listener
2. ASM 未启动时
srvctl start asm
srvctl status asm
3. 监听未启动时
srvctl start listener
srvctl start scan_listener
srvctl status listener
srvctl status scan_listener
4. 查询并启动 CDB
srvctl config database
srvctl status database -d erpcdb
srvctl start database -d erpcdb
srvctl status database -d erpcdb
5. 进入数据库
ps -ef | grep pmon | grep -v grep
export ORACLE_SID=erpcdb1
sqlplus / as sysdba
6. 打开指定 PDB
show con_name;
alter session set container=CDB$ROOT;
select name, db_unique_name, database_role, open_mode from v$database;
show pdbs;
select inst_id, con_id, name, open_mode
from gv$pdbs
order by name, inst_id;
alter pluggable database IETQMS open instances=all;
alter pluggable database IETQMS save state instances=all;
select inst_id, con_id, name, open_mode
from gv$pdbs
where name = 'IETQMS'
order by inst_id;
exit
十六、一句话总结
RAC 环境启动指定 PDB 的生产顺序:
先确认 Grid 正常;
再确认 ASM 正常;
再确认 Listener / SCAN Listener 正常;
然后 srvctl start database -d CDB资源名 启动 CDB;
最后进入 CDB$ROOT 执行 alter pluggable database PDB名 open instances=all。
需要替换的内容只有三个:
CDB资源名:例如 erpcdb
当前节点实例名:例如 erpcdb1
PDB名:例如 IETQMS
这版就是生产速查版,重点够用,不绕。实际干活时就按顺序:先看底座,再拉 CDB,最后开 PDB。