COPIES参数仅对紧随其后的BACKUP命令生效,须与备份目标同写一行;CONFIGURE设置仅影响未显式指定COPIES的后续命令;显式指定优先级最高;每份副本为独立完整备份集,命名含_1、_2序号;删除时默认只删一份,需DELETE ALL INPUT或明确指定。
COPIES 参数到底写在哪儿才生效
oracle rman 的 copies 参数不是全局开关,它只对紧随其后的 backup 命令起作用,且必须和备份目标(如 archivelog、database)写在同一行或同一命令块内。单独执行 configure copies 只影响后续未显式指定 copies 的备份,但不覆盖已写死的命令。
-
BACKUP COPIES 2 DATABASE;—— 立即生效,生成两份完全相同的备份集文件 -
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 2;—— 仅对后续未带COPIES的BACKUP ARCHIVELOG命令生效 - 如果先
CONFIGURE设为 2,又在备份时写BACKUP COPIES 1 ARCHIVELOG ALL;,那这次就是 1 份——显式指定优先级更高
备份集冗余 ≠ 文件系统硬链接或副本
RMAN 的 COPIES 是在备份过程中由服务器进程同步写入多份独立的物理文件,每份都是完整备份集(不是引用或增量),所以占用空间是线性增长的。它不等价于 OS 层面的 cp 或硬链接,也不能靠后期复制 .bkp 文件来模拟。
- 写入路径必须全部可写,且 RMAN 自动按规则命名:原始文件名后追加
_1、_2等序号(如0uvmv8a7_1_1.bkp和0uvmv8a7_1_2.bkp) - 所有副本内容一致,校验和相同,恢复时任意一份都可单独使用
- 不能混用不同设备类型(比如一份写到
DISK,一份写到SBT),COPIES仅限同一种DEVICE TYPE
COPIES 和 BACKUPSET 多路复用(multiplexing)容易搞混
COPIES 控制的是“多少份备份集”,而 MAXSETSIZE 或 FILESPERSET 影响的是“一个备份集中打包几个数据文件”。更关键的是,MULTIPLEXING(通过 CONFIGURE BACKUP OPTIMIZATION OFF 或 BACKUP ... FORMAT 配合多个通道)决定的是“单个备份集是否被多个通道并发写入”,这和 COPIES 完全正交。
- 常见误操作:开了 4 个通道做
BACKUP DATABASE COPIES 2,以为会出 8 个文件——实际仍是 2 份完整备份集,只是每份内部可能由多个通道并行写完 - 真正控制“一个备份集里塞几个 DBF”的是
FILESPERSET;控制“一个备份集最大多大”的是MAXSETSIZE -
COPIES不提升备份速度,反而因重复 I/O 可能略慢;它只为容错服务,不是性能优化手段
删备份时 COPIES 的行为很反直觉
RMAN 删除备份时,默认只删“一份”——哪怕你当初用 COPIES 2 备了两份,DELETE BACKUP 命令默认只删其中一份,剩下那份仍标记为 AVAILABLE。必须显式加 ALL 才清干净。
-
DELETE BACKUP COMPLETED BEFORE 'SYSDATE-7';—— 每个备份集只删第一份,第二份残留 -
DELETE BACKUP COPIES 2 COMPLETED BEFORE 'SYSDATE-7';—— 语法错误,COPIES不是DELETE的合法子句 - 正确做法:
DELETE BACKUP COMPLETED BEFORE 'SYSDATE-7' DELETE INPUT;不行;得用DELETE BACKUP OF DATABASE COMPLETED BEFORE 'SYSDATE-7' DELETE ALL INPUT;或更稳妥地,先LIST BACKUP COPIES OF DATABASE;确认再逐个DELETE BACKUPPIECE
最常被忽略的一点:RMAN 不会自动感知“这两份是同一逻辑备份的副本”,它把每个 BACKUPPIECE 当作独立对象管理。所以清理策略、保留策略(RECOVERY WINDOW)都得按实际文件数算,不是按逻辑备份集数算。










