一、Image copy是什么 ?
Oracle RMAN 常见备份方式有两类:
- Backup Set:传统 RMAN 备份集,生成的是备份片,恢复时需要先restore,再recover。
- Image Copy:数据文件镜像副本,生成的是接近原始数据文件形态的副本,RMAN 可以直接识别。
简单理解:
Backup Set 更像"打包后的备份文件";Image Copy 更像"提前准备好的一份数据文件副本"。
Image Copy 最大的特点是可以配合增量备份做增量合成。也就是先做一次 Level 0 全量镜像副本,后续定期做 Level 1 增量,再把增量合并到这份镜像副本中,使镜像副本不断向前滚动。
这样在恢复时,可以直接切换到已经合成好的 Image Copy,减少传统恢复里大量还原数据文件的时间。
二、和传统 RMAN 备份有什么区别?
|---------|------------------------|-----------------------------|
| 对比项 | 传统 RMAN Backup Set | RMAN Image Copy |
| 备份结果 | 备份片 | 数据文件镜像副本 |
| 恢复方式 | 先 restore,再 recover | 可直接 switch 到 copy,再 recover |
| 空间占用 | 通常更省空间 | 更接近原数据文件大小 |
| 恢复速度 | 大库 restore 时间可能较长 | 已有数据文件副本,恢复更快 |
| 典型用途 | 常规备份、归档保留 | 快速恢复、低 RTO 场景 |
三 、简化测试环境 演示
本文演示单机 Oracle 11.2.0.4.0环境下的本机恢复场景。
备份目录:/backup/imagecopy 数据库模式:ARCHIVELOG
(oracle数据库开启归档:
https://help.aliyun.com/zh/cloud-backup/user-guide/enable-archive-mode-for-an-oracle-database)
创建备份目录
mkdir -p /backup/imagecopy
chown -R oracle:oinstall /backup/imagecopy

确认数据库处于归档模式
archive log list;

如果不是归档模式,需要先开启归档。生产环境开启归档前要评估业务窗口,这里不展开。
可选:开启块变化跟踪
块变化跟踪可以提升 RMAN 增量备份效率。
查看当前状态
select status, filename from v$block_change_tracking;

开启块变化跟踪:
alter database enable block change tracking
using file '/backup/imagecopy/block_change_tracking.f';
再次确认:
select status, filenamefrom v$block_change_tracking;

创建测试数据
创建表空间
表空间名字为:tbs_test
数据文件位置:/u01/app/oracle/oradata/orcl/tbs_test01.dbf
CREATE TABLESPACE tbs_test
DATAFILE '/u01/app/oracle/oradata/orcl/tbs_test01.dbf' SIZE 50M
AUTOEXTEND ON NEXT 10M MAXSIZE 100M;
创建表
CREATE TABLE test (
id NUMBER,
name VARCHAR2(20)
) TABLESPACE tbs_test;
插入数据并提交
INSERT INTO test VALUES (1, 'Before Backup');
COMMIT;
验证数据

执行备份
第一次:创建 Level 0 全量 Image Copy
登录 RMAN: rman target /
执行 Level 0 全量镜像备份:
run { allocate channel ch1 device type disk format '/backup/imagecopy/%U'; backup as copy incremental level 0 tag 'IMG_COPY_ORCL' database; release channel ch1;}

查看生成的 Image Copy:
list copy of database tag 'IMG_COPY_ORCL';

这一步完成后,/backup/imagecopy目录下已经有一份 Level 0 的数据文件镜像副本。

第二次:执行 Level 1 增量备份
创建增量数据:
INSERT INTO test VALUES (3, 'Incremental Data A');
INSERT INTO test VALUES (2, 'Incremental Data B');
COMMIT;

数据库运行一段时间后,数据文件会发生变化。此时执行 Level 1 增量备份:
run { allocate channel ch1 device type disk format '/backup/imagecopy/%U'; backup incremental level 1 for recover of copy with tag 'IMG_COPY_ORCL' database; release channel ch1;}

这里的重点是:for recover of copy with tag 'IMG_COPY_ORCL'
它表示这次增量备份是为了后续更新这份 Image Copy。
第三次 把增量合成到 Image Copy
执行增量合成:
run { allocate channel ch1 device type disk; recover copy of database with tag 'IMG_COPY_ORCL'; release channel ch1;}

合成完成后,原来的 Level 0 Image Copy 会被增量更新,变成一个更接近当前时间点的数据文件副本
模拟数据文件损坏本机恢复场景
模拟tbs_test数据文件损坏
查询数据文件路径sql语句:
SET LINESIZE 200;
SET PAGESIZE 100;
COL FILE_NAME FORMAT A60;
COL TABLESPACE_NAME FORMAT A20;
SELECT file_id, tablespace_name, file_name, status
FROM dba_data_files
ORDER BY file_id;
删除测试数据文件:rm -rf /u01/app/oracle/oradata/orcl/tbs_test01.dbf
登录数据库执行清除缓存:ALTER SYSTEM FLUSH BUFFER_CACHE;
查询表数据:select * from test; 提示报错信息无法打开文件

注意:以下操作会让数据库切换到 Image Copy 对应的数据文件路径。测试前请确认备份目录可靠,生产操作前必须做好变更评估。
数据文件恢复
进入rman: rman target /
隔离损坏的存储结构(表空间脱机):SQL "ALTER TABLESPACE tbs_test OFFLINE IMMEDIATE";

重定向数据文件指针(秒级切换备份):SWITCH TABLESPACE tbs_test TO COPY;

应用前滚恢复(媒体恢复):RECOVER TABLESPACE tbs_test;
重新交付业务(表空间联机):SQL "ALTER TABLESPACE tbs_test ONLINE";

登录数据库验证数据:

结论:数据恢复完成!!
四、常用检查命令
查看 Image Copy:
list copy of database;
查看某个 tag 的 Image Copy:
list copy of database tag 'IMG_COPY_ORCL';
查看备份:
list backup summary;
校验备份可用性:
crosscheck copy;crosscheck backup;
删除无效记录:
delete expired copy;delete expired backup;
五、注意事项
- 建议开启归档模式
非归档模式下在线备份和恢复能力会受限制。 - 备份目录不要和原数据文件放在同一块风险磁盘上
即使是本机恢复,也应尽量放到独立磁盘或独立挂载点。 - tag 要保持一致
Level 0、Level 1、recover copy 需要围绕同一个 tag 管理,否则容易找不到对应 copy。 - Image Copy 不是备份集的完全替代品
Image Copy 适合快速恢复,传统 RMAN 备份集适合压缩、归档、长期保留。生产环境可以组合使用。 - 控制文件也要保护
switch database to copy依赖控制文件记录。如果控制文件丢失,需要有控制文件自动备份或恢复目录。 - 切换后数据文件路径会变化
switch database to copy后,数据库会使用 Image Copy 路径下的数据文件。如果后续要迁回原路径,需要再规划数据文件迁移。
总结
RMAN Image Copy 的核心价值是:
提前准备一份可被 Oracle 识别的数据文件副本,并通过增量合成持续更新它,从而在故障时减少 restore 时间。