前置准备:连接到集群节点
在执行大多数 RAC 管理命令之前,你需要:

- 以
oracle用户身份登录 到集群的任意一个节点。 - 设置正确的环境变量,最简单的方式是进入对应数据库的
home目录,然后执行source脚本。
# 示例:连接到节点 rac1,设置 ORACLE_HOME 环境变量 ssh oracle@rac1 cd /u01/app/oracle/product/19.3.0/dbhome_1 . oraenv # 输入数据库名称,ORCLCDB
核心管理命令 (srvctl)
srvctl 是最重要的工具,其命令格式通常为:srvctl <object> <action> -db <db_name> ...
数据库 级别管理
srvctl database 用于管理整个 RAC 数据库。
| 命令 | 功能 | 示例 |
|---|---|---|
start |
启动数据库的所有实例和相关资源(如监听器、VIP)。 | srvctl start database -d ORCLCDB |
stop |
停止数据库的所有实例和相关资源。 | srvctl stop database -d ORCLCDB |
status |
查看数据库及其所有实例的运行状态。 | srvctl status database -d ORCLCDB |
add |
向集群注册一个新的数据库。 | srvctl add database -d ORCLCDB -o /u01/app/oracle/product/19.3.0/dbhome_1 -p /u01/app/oracle/admin/ORCLCDB/pfile/init.ora |
remove |
从集群中移除一个数据库(通常需要先停止)。 | srvctl remove database -d ORCLCDB -f |
modify |
修改已注册数据库的配置信息(如 ORACLE_HOME、PFILE 路径)。 | srvctl modify database -d ORCLCDB -o /new/oracle/home |
relocate |
将数据库的 VIP 和 SCAN VIP 从一个节点移动到另一个节点(通常用于维护)。 | srvctl relocate database -d ORCLCDB -n rac2 |
实例 级别管理
srvctl instance 用于管理数据库中的单个实例。
| 命令 | 功能 | 示例 |
|---|---|---|
start |
启动指定的数据库实例。 | srvctl start instance -d ORCLCDB -i ORCLCDB1 |
stop |
停止指定的数据库实例。 | srvctl stop instance -d ORCLCDB -i ORCLCDB1 |
status |
查看指定实例的状态。 | srvctl status instance -d ORCLCDB -i ORCLCDB1 |
add |
向数据库中添加一个新实例。 | srvctl add instance -d ORCLCDB -i ORCLCDB2 -n rac2 |
remove |
从数据库中移除一个实例。 | srvctl remove instance -d ORCLCDB -i ORCLCDB2 -f |
监听器 管理监听器
srvctl listener 用于管理集群监听器。

| 命令 | 功能 | 示例 |
|---|---|---|
start |
启动所有监听器或指定监听器。 | srvctl start listener |
stop |
停止所有监听器或指定监听器。 | srvctl stop listener |
status |
查看监听器状态。 | srvctl status listener |
add |
添加一个监听器。 | srvctl add listener -l LISTENER_SCAN2 |
remove |
移除一个监听器。 | srvctl remove listener -l LISTENER_SCAN2 |
VIP (Virtual IP) 管理
srvctl vip 用于管理虚拟 IP 地址。
| 命令 | 功能 | 示例 |
|---|---|---|
start |
启动指定节点的 VIP。 | srvctl start vip -n rac1 |
stop |
停止指定节点的 VIP。 | srvctl stop vip -n rac1 |
status |
查看 VIP 状态。 | srvctl status vip -n rac1 |
其他重要 srvctl 命令
| 命令 | 功能 | 示例 |
|---|---|---|
config |
查看当前集群资源的配置信息。 | srvctl config database -d ORCLCDB |
getenv |
获取数据库或实例的环境变量。 | srvctl getenv database -d ORCLCDB |
setenv |
设置数据库或实例的环境变量。 | srvctl setenv database -d ORCLCDB -T "NLS_LANG=AMERICAN_AMERICA.AL32UTF8" |
OCR 和 Voting Disk 管理
OCR (Oracle Cluster Registry) 和 Voting Disk 是集群高可用性的核心,通常使用 crsctl 工具管理。
OCR 管理
| 命令 | 功能 | 示例 |
|---|---|---|
query |
查看 OCR 的位置和状态。 | crsctl query crs storage |
backup |
手动备份 OCR。 | crsctl backup ocr |
restore |
从备份恢复 OCR。 | crsctl restore ocr -latest |
check |
检查 OCR 的完整性。 | ocrcheck |
replace |
替换 OCR 文件(用于磁盘故障或迁移)。 | crsctl replace ocr -new_ocr_location /new/disk/ocrfile |
Voting Disk 管理
| 命令 | 功能 | 示例 |
|---|---|---|
query |
查看 Voting Disk 的位置和状态。 | crsctl query css votedisk |
backup |
备份 Voting Disk。 | crsctl backup votedisk |
add |
添加新的 Voting Disk。 | crsctl add votedisk /new/disk/votedisk |
delete |
删除 Voting Disk。 | crsctl delete votedisk /old/disk/votedisk |
replace |
替换 Voting Disk。 | crsctl replace votedisk /old/disk/votedisk |
集群服务和 ASM 管理
集群服务 管理
| 命令 | 功能 | 示例 |
|---|---|---|
start |
启动集群服务。 | srvctl start service -d ORCLCDB -s SERVICE_NAME |
stop |
停止集群服务。 | srvctl stop service -d ORCLCDB -s SERVICE_NAME |
status |
查看服务状态。 | srvctl status service -d ORCLCDB -s SERVICE_NAME |
add |
添加一个服务。 | srvctl add service -d ORCLCDB -s SERVICE_NAME -r "ORCLCDB1,ORCLCDB2" -a "ORCLCDB1,ORCLCDB2" -P BASIC |
remove |
移除一个服务。 | srvctl remove service -d ORCLCDB -s SERVICE_NAME |
参数说明:
-r:Preferred Instances(首选实例)。-a:Available Instances(可用实例)。-P:Policy(服务策略),如BASIC,FAILOVER,NONE。
ASM (Automatic Storage Management) 管理
ASM 实例本身也是一个数据库,因此也使用 srvctl 管理。

| 命令 | 功能 | 示例 |
|---|---|---|
start asm |
启动 ASM 实例。 | srvctl start asm -n rac1 |
stop asm |
停止 ASM 实例。 | srvctl stop asm -n rac1 |
status asm |
查看 ASM 实例状态。 | srvctl status asm -n rac1 |
start diskgroup |
启动指定的磁盘组。 | srvctl start diskgroup -g DATA |
stop diskgroup |
停止指定的磁盘组。 | srvctl stop diskgroup -g DATA |
状态查看和诊断命令
集群整体状态
| 命令 | 功能 | 示例 |
|---|---|---|
olsnodes |
列出集群中的所有节点名称。 | olsnodes -n |
crsctl check cluster |
检查整个集群的运行状态。 | crsctl check cluster -all |
crsctl status resource |
查看集群资源(如数据库、监听器)的详细状态。 | crsctl status resource -t |
crsctl stat res ora.orclcdb.db |
查看特定数据库资源的详细状态。 | crsctl stat res ora.orclcdb.db -p |
ASM 相关状态
| 命令 | 功能 | 示例 |
|---|---|---|
asmcmd |
ASM 命令行工具,用于管理磁盘组和文件。 | asmcmd |
asmcmd lsdg |
列出所有磁盘组及其状态。 | asmcmd lsdg |
asmcmd lsdsk |
列出所有 ASM 磁盘。 | asmcmd lsdsk -G DATA |
重要维护场景示例
场景1:计划停机维护一个节点(以 rac1 为例)
-
将数据库实例从 rac1 迁移到 rac2
# 检查实例运行在哪个节点 srvctl status instance -d ORCLCDB -i ORCLCDB1 # 停止 rac1 上的实例 srvctl stop instance -d ORCLCDB -i ORCLCDB1 -o immediate
-
停止 rac1 上的 VIP 和监听器
srvctl stop vip -n rac1 srvctl stop listener -n rac1
-
停止 rac1 上的 ASM 实例
srvctl stop asm -n rac1
-
停止 rac1 上的集群资源(可选,通常由
crsctl stop has完成)# 在 rac1 上执行 crsctl stop has
-
完成维护后,启动 rac1
# 启动 HAS crsctl start has # 启动 ASM srvctl start asm -n rac1 # 启动监听器和 VIP srvctl start listener -n rac1 srvctl start vip -n rac1 # 启动数据库实例 srvctl start instance -d ORCLCDB -i ORCLCDB1
场景2:添加一个新的数据磁盘组
- 在存储层面准备好新的磁盘 (
/dev/sdb1)。 - 在所有节点上设置正确的磁盘权限。
# 在所有节点执行 chown oracle:dba /dev/sdb1 chmod 660 /dev/sdb1
- 使用
asmca或asmcmd创建磁盘组。# 使用 asmcmd (在任意节点上) asmcmd ASMCMD> mkdg -F HIGH -A 2M DATA2 /dev/sdb1
- 使用
srvctl将新的磁盘组注册到集群。srvctl add diskgroup -g DATA2 -l /dev/sdb1
| 功能模块 | 主要工具 | 核心命令 |
|---|---|---|
| 数据库/实例/服务 | srvctl |
start, stop, status, add, remove, modify |
| 监听器/VIP | srvctl |
start, stop, status, add, remove |
| OCR/Voting Disk | crsctl |
query, backup, restore, replace, add, delete |
| ASM | srvctl, asmcmd |
start asm, stop asm, lsdg, mkdg |
| 状态查询 | srvctl, crsctl, olsnodes |
status, check cluster, stat res |
重要提示:
- 生产环境操作务必谨慎,建议在维护窗口期进行。
- 在执行任何
remove或replace操作前,务必先进行备份。 - 阅读官方文档(Oracle Documentation)以获取针对你具体版本的最准确信息。
