rman全库恢复归档空间需按三步精确计算:先定位上一次全备完成时间,再计算至目标恢复点的小时数,最后结合redo大小与归档频率(如15分钟/次)得出总量,例如14.5小时×4gb/小时≈58gb,建议预留65–70gb以覆盖block cleanout等临时中间状态;v$session_longops中'media recovery'仅反映日志应用阶段进度,无法预测总耗时,因其在等待归档或重建控制文件时完全不更新,且time_remaining常为0或负数,应改用v$recovery_progress和v$archived_log验证真实进度;真实介质恢复速率须通过recover database test(测cpu+解析)与recover database noredo+alter database recover managed standby database(测i/o全流程)对比获得;ora-19809错误因db_recovery_file_dest_size硬上限限制,运行中调整无效,必须shutdown abort后重启,或提前将db_recovery_file_dest指向大容量本地盘。

备份空间能预估,恢复时间不能靠 V$SESSION_LONGOPS 猜——它只在日志应用阶段更新,卡在“等归档”或“重建控制文件”时压根不显示。
怎么算 RMAN 全库恢复需要多少归档空间?
归档空间不是数据文件大小的简单叠加,而是从上一次全备到目标恢复时间点之间所有归档日志的总和。关键三步:
- 用
list backup of archivelog all summary;找出上一次全备完成时间(比如 2026-07-26 18:30) - 确认恢复目标时间(比如 2026-07-27 09:00),计算间隔小时数(14.5 小时)
- 查单个
redo日志大小:select bytes/1024/1024/1024 from v$log;;再查归档频率:archive log list或看v$archived_log的first_time间隔,常见是 15 分钟一归档 → 每小时 4 个归档
举例:若每个 redo 是 1GB,每小时切 4 次,则每小时归档约 4GB;14.5 小时 ≈ 58GB。实际建议预留 65–70GB,因为恢复过程还会在 DB_RECOVERY_FILE_DEST 里生成 block cleanout、undo 回滚等临时中间状态,可能额外占用 2–3 倍空间。
为什么 V$SESSION_LONGOPS 的 media recovery 不可靠?
这个视图只在 Oracle 正在解析并应用归档日志时才刷新,其他阶段完全沉默:
- 恢复刚启动、还在读取备份集或重建控制文件时,
OPNAME LIKE '%media%'查不到任何记录 - 卡在 “waiting for archived log” 状态时,
TIME_REMAINING字段常为 0 或负数,毫无参考价值 - 它每 5 秒刷新一次,小于 10 秒的操作根本不会出现
真正要盯的是 V$RECOVERY_PROGRESS 的 ITEM = 'Applied log' 行,配合 V$ARCHIVED_LOG 查 APPLIED = 'YES' 的数量变化,才能看出真实进度。
怎么测出真实的介质恢复速率?
绕过备份还原环节,直击日志应用瓶颈:
- 先跑
recover database test;:跳过写盘,只做内存重做和日志解析,耗时反映 CPU + 解析开销 - 再跑
recover database noredo;+ALTER DATABASE RECOVER MANAGED STANDBY DATABASE;:模拟带 I/O 的完整应用流程 - 对比两次耗时:差值大 → 磁盘吞吐或归档 IO 是瓶颈;差值小 → CPU 或事务粒度(如海量小事务)拖慢
注意:test 模式不校验块一致性,也不写数据文件,但它会完整读取所有归档日志并执行重做逻辑——这才是测速的关键。
恢复中途报 ORA-19809 怎么办?
db_recovery_file_dest_size 是硬上限,但 SPACE_USED 不含恢复中动态分配的临时区,所以恢复时很容易爆掉:
-
ALTER SYSTEM SET db_recovery_file_dest_size=xxG SCOPE=BOTH;在运行中执行无效,必须shutdown abort后重启才生效 - 更稳妥的做法是恢复前就改路径:
ALTER SYSTEM SET db_recovery_file_dest='/bigdisk/fast_recovery_area' SCOPE=SPFILE;,指向一个空间充裕的本地盘,避免共享存储争抢
恢复空间估算容易漏掉临时中间态,而恢复时间误判往往源于把 V$SESSION_LONGOPS 当全程计时器——这两点最常被忽略,也最容易导致计划外中断。











