Oracle RMAN Image Copy 本地恢复

一、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;

五、注意事项

  1. 建议开启归档模式
    非归档模式下在线备份和恢复能力会受限制。
  2. 备份目录不要和原数据文件放在同一块风险磁盘上
    即使是本机恢复,也应尽量放到独立磁盘或独立挂载点。
  3. tag 要保持一致
    Level 0、Level 1、recover copy 需要围绕同一个 tag 管理,否则容易找不到对应 copy。
  4. Image Copy 不是备份集的完全替代品
    Image Copy 适合快速恢复,传统 RMAN 备份集适合压缩、归档、长期保留。生产环境可以组合使用。
  5. 控制文件也要保护
    switch database to copy依赖控制文件记录。如果控制文件丢失,需要有控制文件自动备份或恢复目录。
  6. 切换后数据文件路径会变化
    switch database to copy后,数据库会使用 Image Copy 路径下的数据文件。如果后续要迁回原路径,需要再规划数据文件迁移。

总结

RMAN Image Copy 的核心价值是:

提前准备一份可被 Oracle 识别的数据文件副本,并通过增量合成持续更新它,从而在故障时减少 restore 时间。

相关推荐
zuYM4g7Dp2 小时前
NoSql数据库设计心得
数据库·nosql
睡不醒男孩0308234 小时前
第七篇:揭秘 PostgreSQL 数据库内核级管控:CLup 深度架构设计与高可用底座技术白皮书
数据库·postgresql·clup
cmes_love4 小时前
Level 2逐笔成交历史数据下载方法笔记
数据库·笔记·oracle
swordbob5 小时前
MySQL字符集陷阱:从Oracle迁移踩坑到utf8mb4强制规范
数据库·sql
牛油果子哥q5 小时前
【C++ STL string 】C++ STL string 终极精讲:底层原理、内存机制、全套API、深浅拷贝、易错坑点与工程实战规范
数据库·c++
十五年专注C++开发5 小时前
MySql中各种功能用sql语句实现总结
数据库·sql·mysql
数据库小学妹5 小时前
AI时代数据库怎么选?多模融合、数据统一存储与选型实战指南
数据库·人工智能·经验分享·ai
Albert Edison5 小时前
【Redis】Centos7.9 安装 Redis 5 教程
数据库·redis·缓存
云计算磊哥@6 小时前
运维开发宝典026-MySQL02数据库表操作
运维·数据库·运维开发