1、什么是归档日志(Archive Log)
在理解归档日志备份之前,必须先明确归档日志的本质:
Oracle 数据库运行时,所有数据修改操作(INSERT/UPDATE/DELETE/DDL 等)都会先写入在线重做日志(Online Redo Log)。在线重做日志是循环使用的,当一组日志文件写满后,系统会自动切换到下一组。
如果数据库开启了归档模式(ARCHIVELOG MODE),Oracle 会在日志切换时,将写满的在线重做日志完整复制到指定的磁盘位置,这个复制生成的文件就是归档日志。
核心本质:归档日志是数据库所有更改操作的 "完整流水账",记录了自数据库创建以来的每一次数据修改。
2、什么是归档日志备份
归档日志备份是指将生成的归档日志文件从数据库服务器的本地归档目录,备份到独立的备份存储设备(如 ASM 磁盘组、NFS 共享、磁带库等)的过程。
2.1、为什么必须备份归档日志
这是所有 DBA 必须牢记的铁律:
- 没有归档日志,就无法实现时间点恢复:只能恢复到最近一次全量 / 增量备份的时刻,备份之后的所有数据都会丢失
- 归档日志是增量恢复的桥梁:全量备份 + 增量备份 + 归档日志,可以恢复到任意时间点
- 归档日志容易丢失:本地归档目录空间有限,通常会定期清理,如果不备份,清理后就无法恢复
- 满足合规要求:等保 2.0、PCI-DSS 等标准都要求保留至少 30 天的归档日志
2.2、归档日志备份的核心作用
- 实现时间点恢复(PITR):这是归档日志最核心的作用
- 支持增量恢复:将增量备份之间的数据变化串联起来
- 支持 Data Guard 同步:Data Guard 备库通过应用主库的归档日志实现数据同步
- 支持逻辑备份恢复:LogMiner 等工具需要使用归档日志进行数据挖掘和恢复
- 支持数据库克隆:可以使用备份 + 归档日志快速克隆出一个相同的数据库
3、归档日志备份方式
归档日志备份是 RMAN 备份体系中不可或缺的核心组成部分,RMAN 是 Oracle 官方推荐的唯一归档日志备份工具。
生产环境铁律:绝对不要使用手动方式备份归档日志,必须使用 RMAN。
| 对比维度 | RMAN 备份归档日志 | 手动备份归档日志(cp 命令) |
|---|---|---|
| 完整性检查 | 自动检查归档日志是否完整、是否有损坏 | 不检查,可能备份损坏的归档日志 |
| 自动删除 | 可以配置只有备份成功后才自动删除 | 需要手动编写脚本删除,容易误删 |
| 恢复集成 | 恢复时 RMAN 自动找到并应用 | 恢复时需要手动指定归档日志位置 |
| 压缩支持 | 支持压缩备份,减少存储空间占用 | 不支持,需要额外压缩工具 |
| 加密支持 | 支持透明加密,保护敏感数据 | 不支持,需要额外加密工具 |
| 集中管理 | 可以通过恢复目录集中管理 | 只能逐个服务器管理 |
| 错误处理 | 备份失败会自动记录并告警 | 需要手动检查脚本执行结果 |
4、RMAN 归档日志备份常用命令
4.1、基本备份命令
sql
-- 备份所有未备份的归档日志
BACKUP ARCHIVELOG ALL;
-- 备份指定时间范围内的归档日志
BACKUP ARCHIVELOG FROM TIME "TO_DATE('2026-05-01','YYYY-MM-DD')"
UNTIL TIME "TO_DATE('2026-05-02','YYYY-MM-DD')";
-- 备份未备份过的归档日志
BACKUP ARCHIVELOG ALL NOT BACKED UP 1 TIMES;
-- 备份指定SCN范围内的归档日志
BACKUP ARCHIVELOG FROM SCN 123456 UNTIL SCN 789012;
-- 备份归档日志并删除输入文件(最常用)
BACKUP ARCHIVELOG ALL DELETE ALL INPUT;
-- 备份数据库时自动备份归档日志
BACKUP DATABASE PLUS ARCHIVELOG DELETE ALL INPUT;
4.2、关键配置参数
sql
-- 配置归档日志删除策略:备份1次后才能删除
CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 1 TIMES TO DEVICE TYPE DISK;
-- 配置Data Guard环境下的归档日志删除策略:应用到所有备库且备份1次后才能删除
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY BACKED UP 1 TIMES TO DEVICE TYPE DISK;
-- 配置归档日志备份的并行度
CONFIGURE DEVICE TYPE DISK PARALLELISM 2 BACKUP TYPE TO COMPRESSED BACKUPSET;
4.3、归档日志管理命令
sql
-- 查看所有归档日志
LIST ARCHIVELOG ALL;
-- 查看过期的归档日志
REPORT OBSOLETE ARCHIVELOG;
-- 删除指定天数前的归档日志
DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
-- 删除所有已备份的归档日志
DELETE ARCHIVELOG ALL BACKED UP 1 TIMES TO DEVICE TYPE DISK;
-- 验证归档日志备份的完整性
VALIDATE ARCHIVELOG ALL;
-- 使用 RMAN 保留策略自动管理
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
DELETE OBSOLETE;
实例:归档日志未及时备份导致 RPO 缺口
**S --- Situation(场景):**某制造企业数据库每天凌晨 2 点备份归档日志。下午 3 点磁盘故障,丢失了当天 2:00-15:00 之间的所有归档日志,RPO 缺口达 13 小时。
**T --- Task(任务):**将 RPO 缺口控制在 1 小时以内,防止归档日志丢失。
A --- Action(行动):
1、配置归档日志每小时自动备份:
BACKUP ARCHIVELOG ALL NOT BACKED UP 1 TIMES DELETE INPUT;
2、启用归档日志远程传输(Data Guard 或 rsync 到灾备服务器);
3、配置 FRA 空间告警(80% 预警);
4、建立归档日志生成量监控基线。
**R --- Result(结果):**RPO 从 13 小时降至 1 小时以内。后续通过远程实时传输,进一步将 RPO 降至接近零(仅受网络延迟影响)。