RMAN的BACKUP ARCHIVELOG不支持直接指定多个FORMAT路径,必须显式ALLOCATE CHANNEL并命名不同通道(如ch_arc1、ch_arc2),每个通道绑定独立FORMAT路径,再在BACKUP命令中通过CHANNEL子句明确指定,否则默认仅使用首个通道。
为什么 BACKUP ARCHIVELOG 不能直接写多个路径
rman 的 backup archivelog 命令本身不支持像 backup copies 2 那样直接指定多个 format。它默认只走当前已分配的通道,而每个通道只能绑定一个 format 路径。如果你没显式分配通道,rman 就用默认通道(device type disk 的隐式通道),结果所有归档日志都挤进同一个目录,根本没法分流。
必须显式 ALLOCATE CHANNEL 并命名不同路径
要实现归档日志同时备份到多个物理位置,核心是:为每个目标路径单独 ALLOCATE CHANNEL,且必须命名不同(如 ch1、ch2),再在 BACKUP 中显式指定它们。RMAN 不会自动把归档日志分发给所有已分配通道——你得手动控制。
- 每个通道必须用唯一名字,重复名会报
RMAN-06017: channel string is already allocated - 每个
ALLOCATE CHANNEL后必须跟独立的FORMAT,指向不同挂载点或文件系统,例如:FORMAT '/nfs/arc1/%U'和FORMAT '/local/arc2/%U' - 归档日志备份阶段不能复用 DATAFILE 通道——如果之前只分配了
ch_data用于数据文件,BACKUP DATABASE PLUS ARCHIVELOG进入归档阶段时会因无可用通道而退化为单通道,甚至触发ORA-19625
正确写法:RUN 块内分配 + 显式指定通道
下面这个脚本能把归档日志同时写入两个路径,且不干扰主库 I/O:
RMAN> RUN {
ALLOCATE CHANNEL ch_arc1 DEVICE TYPE DISK FORMAT '/backup/arc_site1/%U';
ALLOCATE CHANNEL ch_arc2 DEVICE TYPE DISK FORMAT '/backup/arc_site2/%U';
BACKUP ARCHIVELOG ALL NOT BACKED UP 1 TIMES
PLUS ARCHIVELOG DELETE INPUT
CHANNEL ch_arc1, ch_arc2;
RELEASE CHANNEL ch_arc1;
RELEASE CHANNEL ch_arc2;
}
注意三点:
-
NOT BACKED UP 1 TIMES防止重复备份同一份归档 -
DELETE INPUT必须和PLUS ARCHIVELOG搭配使用才生效,否则只删原始归档,不删刚备份的副本 - 通道名必须出现在
CHANNEL子句里,否则 RMAN 默认只用第一个分配的通道
容易被忽略的存储与权限陷阱
多路径备份失败,80% 不是语法问题,而是底层环境卡住:
- 两个目标路径不能挂载在同一 NFS server 或共享存储卷上——NFS lease timeout 或元数据锁会导致某个通道长时间阻塞
- Oracle 用户对两个路径都必须有
rwx权限,且 SELinux 或 AppArmor 未拦截写入(常见于 RHEL/CentOS) - 若用
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 2,它只对后续BACKUP ARCHIVELOG生效,但依然依赖当前已分配的通道数;如果只分配了 1 个通道,RMAN 会串行写两遍,不是并发写两路
真正可靠的多路径归档备份,永远以显式 ALLOCATE CHANNEL 为前提,路径分散、权限到位、通道命名不重叠——少一个条件,就可能变成“看着写了两份,其实只落盘一份”。











