RMAN在RAC中默认不自动跨节点执行备份,需显式配置共享存储路径、统一SCAN服务名连接、多节点无主脚本及控制文件自动备份至共享目录,缺一不可。

节点挂了,RMAN备份不能自动跳到另一节点继续执行——这是默认行为,不是bug,而是配置缺失导致的单点依赖。
RMAN多通道分配失败:ORA-12514报错怎么修
脚本里硬编码两个connect地址(如sys/oracle@rac1:1521/oradb和sys/oracle@rac2:1521/oradb),一节点宕机就直接报ORA-12514,因为RMAN不尝试重试或切换,只按顺序连,连不上就中断。
- 删掉所有带
connect参数的allocate channel语句——RAC环境下应让RMAN自动选择当前可用实例,而不是手动指定 - 改用统一服务名连接:
rman target sys/oracle@oradb(其中oradb是TNS中定义的SCAN VIP服务名,不是单个节点名) - 确保
tnsnames.ora里该服务名指向的是SCAN监听器,并启用FAILOVER=ON和LOAD_BALANCE=ON - 验证方式:停掉一个节点后,在剩余节点上手动运行
rman target /,再list backup,能查到历史备份即说明连接层已通
备份目标路径必须共享,否则节点切换后“找不到备份”
常见错误是备份脚本里写/home/oracle/bak这种本地路径,节点1跑完,节点2根本看不到文件,restore时RMAN-06023: no backup or copy of datafile found就来了。
- 所有节点必须挂载同一NFS路径(如
192.168.0.111:/data → /bak),且oracle用户在两节点都能touch /bak/test.txt - RMAN中
FORMAT必须显式包含共享路径,例如:FORMAT '/bak/rman/df_%U',别信默认'%U'——它会落到$ORACLE_HOME/dbs,那是本地目录 - 若用ASM,确认所有节点都能访问同一磁盘组(如
+DATA),并在FORMAT中写死:FORMAT '+DATA/BACKUP/%U' - 检查
CONTROLFILE AUTOBACKUP路径是否也指向共享位置:CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/bak/rman/control_%F'
备份脚本不能“只在节点1跑”,得支持双节点无主执行
用cron在节点1定时跑脚本,节点1挂了,备份就断七天——这不是高可用,是单点陷阱。
- 所有节点部署完全相同的脚本,但开头加判断逻辑:
srvctl status database -d oradb | grep "is running" | grep "oradb1",只让当前主实例执行(简单但有效) - 更稳的做法是用
crsctl stat res -t | grep rman_bk_job配合自定义集群资源,由Clusterware统一调度,避免竞态 - 脚本内务必加锁机制(如
if [ -f /bak/rman/.backup.lock ]; then exit; else touch /bak/rman/.backup.lock; trap 'rm -f /bak/rman/.backup.lock' EXIT),防止双节点同时启动 - 每次备份后,用
crosscheck backup和delete noprompt obsolete清理元数据,避免RMAN catalog里残留无效记录干扰后续restore
真正难的不是写几行RMAN命令,而是把“谁来执行”和“备份存哪”彻底解耦——执行可以漂移,存储必须始终在线且可见。漏掉任意一环,节点故障时备份就断档,恢复时才发现控制文件备份压根不在当前节点能访问的路径下。


















