COPIES参数必须与BACKUP命令同行生效,仅作用于紧随其后的备份;指定多路径需在FORMAT中列全且数量匹配;DELETE默认只删一份,须用ALL或指定备份集编号才删全部副本。
COPIES参数必须和BACKUP命令写在同一行才生效
rman的copies不是全局开关,也不是配置项,它只对紧随其后的backup命令起作用。单独执行configure archivelog backup copies for device type disk to 2,只影响后续**未显式指定copies** 的归档日志备份;一旦你在backup里写了copies 1,那这次就只出1份——显式优先级永远最高。
常见错误是把COPIES当成独立语句写:
BACKUP DATABASE;<br>COPIES 2;
这会报错或静默忽略。正确写法必须是:
BACKUP COPIES 2 DATABASE FORMAT '/bkp/db_%U_%c.bkp';
%c是强制要求的占位符,表示副本序号(从1开始),缺了就会触发RMAN-20039: format requires %c when duplexing。
指定多路径时必须列全所有目标位置
用COPIES生成多份物理文件,RMAN默认把它们写到同一目录、仅靠%c区分文件名(如0uvmv8a7_1_1.bkp和0uvmv8a7_1_2.bkp)。但如果你想分存到不同磁盘路径,就必须在FORMAT里**一次性列出全部路径**,且数量必须严格等于COPIES值:
-
BACKUP COPIES 2 DATABASE FORMAT '/disk1/%U_%c.bkp', '/disk2/%U_%c.bkp';✅ -
BACKUP COPIES 2 DATABASE FORMAT '/disk1/%U.bkp';❌ 报错RMAN-01005,因为没给第二份指定位置
路径必须全部可写,且不能混用设备类型(比如一个写DISK、一个写SBT),RMAN不支持跨设备COPIES。
删除时默认只删一份,不是全删
这是最易踩坑的地方:你用BACKUP COPIES 2生成了两份完全一样的备份集,但执行DELETE BACKUP时,RMAN默认只删其中一份,另一份仍标记为AVAILABLE,空间不会释放干净。
要真正删掉所有副本,必须显式加ALL:
-
DELETE BACKUP→ 只删一份 -
DELETE ALL BACKUP→ 删该备份集的所有副本 -
DELETE BACKUPSET 123456→ 指定备份集编号删整套(含所有COPIES)
注意:DELETE OBSOLETE也不会自动处理冗余副本,它只按保留策略(如REDUNDANCY 1)标记过期,而COPIES产生的多份属于“同一代”,不会被判定为obsolete。
COPIES和压缩、通道数、备份集大小互不影响
COPIES只管“拷几份”,和其他参数正交:
- 加
AS COMPRESSED BACKUPSET,每份都是独立压缩的,不是先压缩再复制 - 开4个通道做
BACKUP COPIES 2 DATABASE,结果仍是2份完整备份集,不是8份;通道只是加速单份的写入过程 -
MAXSETSIZE限制的是单个备份集最大体积,不影响副本数量;FILESPERSET控制一个备份集打包几个数据文件,和COPIES无关
性能上,COPIES会增加I/O压力(重复写),不提速,只为容错——这点常被误当作“并行备份”来用。


















