RMAN全库备份默认不包含闪回日志,因其仅为FLASHBACK DATABASE服务的临时缓存文件,非持久化恢复对象;它受FRA空间与DB_FLASHBACK_RETENTION_TARGET动态管理,不纳入BACKUP DATABASE默认范围。
rman 全库备份默认不包含闪回日志。这是由设计决定的——闪回日志(flashback logs)仅用于 flashback database 操作,不属于数据库物理结构的一部分,rman 不将其纳入 backup database 或 backup full 的默认对象列表。
为什么 RMAN 不自动备份闪回日志
闪回日志是 Oracle 在快速恢复区(FRA)中动态生成、按需覆盖的临时恢复辅助文件,生命周期受 DB_FLASHBACK_RETENTION_TARGET 和 FRA 空间压力双重控制。RMAN 的备份策略面向“可持久恢复”的数据:数据文件、归档日志、控制文件、SPFILE —— 而 flashback logs 本质是中间态缓存,不是归档重做日志那样的确定性恢复依据。
常见错误现象包括:
- 执行
RESTORE DATABASE+RECOVER DATABASE后尝试FLASHBACK DATABASE TO SCN xxx失败,报错ORA-38729: Not enough flashback database log data to do FLASHBACK - 误以为开启了 FRA 就等于“所有恢复相关文件都被备份了”,结果发现磁带或异地存储中缺失闪回能力
哪些 RMAN 命令能显式备份闪回日志
没有直接命令如 BACKUP FLASHBACKLOG。但可通过以下方式间接捕获其内容:
-
BACKUP RECOVERY AREA是最接近的选项,但它只备份 FRA 中“当前未被清理”的归档日志、控制文件副本和闪回日志 —— 注意:它不备份整个 FRA 目录树,也不保证包含所有历史闪回日志 - 更可靠的做法是组合备份:
BACKUP ARCHIVELOG ALL+BACKUP CURRENT CONTROLFILE+BACKUP DATABASE PLUS ARCHIVELOG,再配合定期COPY FLASHBACK LOG(需先用V$FLASHBACK_DATABASE_LOG查出有效日志路径) - 若使用 SBT(如磁带),必须提前配置
CONFIGURE CHANNEL DEVICE TYPE 'SBT' PARMS ...,否则BACKUP RECOVERY AREA会报错RMAN-06172: no default device available
FRA 空间不足时闪回日志的实际行为
闪回日志不是“备份失败就丢”,而是被主动清理以腾出空间。关键点:
-
_flashback_max_log_size(默认约 50MB)限制单个日志大小,但真正触发删除的是 FRA 使用率超过 85%(隐式阈值) -
DB_FLASHBACK_RETENTION_TARGET是软目标,不是 SLA:如果 FRA 紧张,Oracle 可能只保留最近 2 小时日志,哪怕你设了 1440 分钟 -
V$FLASHBACK_DATABASE_LOG显示的是“当前仍存在的”日志范围;V$FLASHBACK_DATABASE_STAT则反映写入/清理速率,可用于监控是否持续丢失窗口
真正容易被忽略的是:即使你每天跑 BACKUP DATABASE PLUS ARCHIVELOG,只要没单独处理 FRA 中的 flashback logs,一旦发生介质故障且需要跨天闪回,大概率发现日志已不可用 —— 它们不在 RMAN 备份集里,也不在归档目录中,只活在 FRA 的 FLASHBACK/ 子目录下,且无自动复制机制。


















