RMAN在RAC中默认不跨节点并行,必须显式分配多个带唯一名称的通道、使用共享存储路径(如ASM)、并在RUN块内成对ALLOCATE/RELEASE,否则备份将单点执行或报错。

RMAN在RAC中默认不跨节点并行,必须显式分配通道且路径统一,否则备份会变成单点执行或报错。
为什么ALLOCATE CHANNEL在RAC里常“没用上”
常见现象是脚本里写了ALLOCATE CHANNEL c1 DEVICE TYPE DISK,但实际只在一个节点跑满CPU/I/O,其他节点idle。根本原因是RMAN会把通道绑定到当前连接的实例,不会自动分发到其他节点——除非你手动指定多个通道并确保它们被不同实例承载。
- 检查是否真跨节点:执行备份时,在各节点分别查
v$session,看PROGRAM含rman的会话是否分布在多个INST_ID - RAC中
CONFIGURE CHANNEL是全局配置,但只影响后续命令的默认行为,不触发跨实例调度;真正起作用的是RUN { ALLOCATE CHANNEL ... }块内的显式分配 - 如果只写
ALLOCATE CHANNEL ch1 DEVICE TYPE DISK,RMAN可能复用同一实例的进程,尤其当该实例负载低时,其余节点完全不参与
多节点并行必须满足的三个硬条件
缺一不可,否则看似并发,实则串行或失败:
-
FORMAT路径必须是所有节点可访问的共享存储:优先用ASM(如'+DATA/BACKUP/%U'),次选NFS挂载点(需两节点mount -t nfs参数一致、oracle用户UID/GID相同、目录可写) - 每个
ALLOCATE CHANNEL必须带唯一名称(如ch1、ch2),不能重复使用同一名称,否则报RMAN-06017 - 必须在
RUN块内成对出现:ALLOCATE后紧跟RELEASE,避免通道残留占用资源;若漏写RELEASE,下次备份可能因通道名冲突而卡住
备份脚本里怎么写才真正跨节点
以双节点RAC为例,下面这段才是有效跨节点并行的最小可行写法:
RMAN> RUN {
ALLOCATE CHANNEL ch1 DEVICE TYPE DISK FORMAT '+DATA/BACKUP/db_%U';
ALLOCATE CHANNEL ch2 DEVICE TYPE DISK FORMAT '+DATA/BACKUP/db_%U';
BACKUP AS COMPRESSED BACKUPSET DATABASE PLUS ARCHIVELOG DELETE INPUT;
RELEASE CHANNEL ch1;
RELEASE CHANNEL ch2;
}
- 不用
PARALLELISM参数:它只控制单实例内通道数,对跨节点无效;RAC中并行靠显式ALLOCATE多个通道实现 - 归档日志备份必须单独处理:上面
PLUS ARCHIVELOG阶段,RMAN会自动调用已分配的通道,但若之前只分配了ch1,ch2就闲置;所以至少分配两个,确保归档阶段也能并发读取 - 别信
SHOW ALL输出里的PARALLELISM值——它不反映实际执行时的节点分布,只说明默认通道数
最容易被忽略的ASM快照控制文件陷阱
即使通道分配正确,BACKUP仍可能报ORA-00245,本质是RMAN试图读取快照控制文件时,发现ASM路径下无真实文件。这不是权限或路径问题,而是快照文件未物理生成。
- 先清空再重配:
CONFIGURE SNAPSHOT CONTROLFILE NAME CLEAR;→CONFIGURE SNAPSHOT CONTROLFILE NAME TO '+DATA/snapcf_xfdb.f'; - 立即触发创建:执行一次任意备份(如
BACKUP ARCHIVELOG ALL DELETE INPUT;),这步强制在ASM中落盘物理文件 - 验证方式:用
asmcmd ls +DATA/snapcf_xfdb.f确认存在,且大小非零;否则后续所有备份都会退回到本地临时快照,失去RAC一致性


















