backup as copy 是 Oracle 11g 镜像复制核心命令,必须在 MOUNT 或 OPEN(归档模式)下执行;配合 SWITCH 更新控制文件路径、RECOVER COPY 合成增量,可实现秒级恢复。
backup as copy 是 Oracle 11g 中实现镜像复制备份的核心命令,它直接生成与原数据文件结构一致的副本,跳过传统 restore 阶段,显著缩短恢复时间。但实际效果取决于是否配合增量合成与正确切换策略。
镜像复制必须在 MOUNT 或 OPEN 状态下执行
数据库处于 open 状态时,必须启用归档模式(archivelog),否则 rman 拒绝执行 backup as copy;若处于 mount 状态,则无需归档也可运行,但无法备份在线重做日志或当前归档日志。
常见错误是误在 noarchivelog 模式下尝试 backup as copy archivelog all,会报错 ora-19602(不允许在非归档模式下备份归档日志)。
- 确认归档状态:
archive log list或查v$database.log_mode - 检查数据库状态:
select status, database_role from v$database; -
MOUNT下可安全执行:backup as copy current controlfile和backup as copy datafile 1
用 switch 命令快速切换到镜像副本
恢复时真正提速的关键不是“有副本”,而是能否绕过 restore 步骤直接让控制文件指向新位置。这依赖 switch —— 它不移动文件,只更新控制文件中数据文件路径记录。
- 先确保镜像副本已存在(如
/backup/users01.dbf) - 启动到
MOUNT状态后执行:switch datafile 4 to copy;(自动匹配最新可用副本) - 或显式指定:
switch datafile 4 to '/backup/users01.dbf'; - 执行
recover database;即可直接应用归档日志,跳过从备份集解压/还原的过程
注意:switch 不校验文件内容,仅修改控制文件元数据。若副本损坏,后续 recover 会失败并报 ORA-01110 或块校验错误。
增量合成(recover copy)让镜像副本持续向前滚动
单纯做一次 backup as copy 只是静态快照;要让它长期保持“准实时”状态,必须定期用 recover copy 合成增量备份。这是镜像复制区别于普通冷备的核心价值。
- 首次全量镜像:
backup as copy database; - 每日做 level 1 差异增量:
backup incremental level 1 database; - 合成到镜像:
recover copy of database with tag 'LATEST'; - 合成后,镜像副本已包含截至增量备份时间点的所有变更,
switch+recover即可完成秒级恢复
容易忽略的点:recover copy 要求镜像副本和增量备份都在同一 RMAN 资料库可见范围内(即未被 delete obsolete 清理),且增量备份必须基于该镜像副本生成(tag 一致或使用 for recover of copy 显式关联)。
镜像副本存放位置影响恢复可靠性
镜像副本不是“多一份就更安全”,而是必须与源数据物理隔离。如果放在同一磁盘阵列甚至同一 LUN 上,硬件故障会导致源文件和副本同时不可用。
- 推荐路径:独立挂载的 NAS/SAN 卷,或至少跨不同 RAID 组的本地目录
- 避免写入快速恢复区(
db_recovery_file_dest):FRA 默认策略会自动清理datafile类型的镜像副本(V$FLASH_RECOVERY_AREA_USAGE中类型为DATAFILECOPY) - 查看副本位置:
list copy of database;或查视图v$datafile_copy - 删除过期副本:
delete copy of database completed before 'sysdate-7';(需配合保留策略)
最常被低估的是权限与 SELinux —— Linux 下若目标目录 chown oracle:oinstall 不彻底,或 SELinux 处于 enforcing 模式,RMAN 分配通道时会静默失败,日志里只显示 channel c1: starting datafile copy 后无后续,实际文件未生成。











