v$session_longops 的 media recovery 进度不能预估总恢复时间,因其仅在 redo apply 阶段更新,卡在等待归档、还原文件等阶段时不刷新;真正耗时环节包括 restore(存储吞吐与通道数)、recover(cpu/io/日志复杂度)及隐式校验等。
v$session_longops 的 media recovery 进度不能用来预估总恢复时间
它只在 Oracle 实际应用归档日志(即 redo apply 阶段)时才更新,一旦卡在“等待下一个归档”“重建控制文件”或“还原数据文件”阶段,V$SESSION_LONGOPS 就不刷新,甚至查不到记录。你看到的 30% 进度,可能只是日志应用部分,而前面的备份集解压、块校验、文件还原还没开始算。
真正耗时的环节往往不是“备份有多大”,而是:
-
restore database阶段:从备份集读取、解压缩、写入数据文件 —— 受限于存储吞吐与 RMAN 分配通道数 -
recover database阶段:解析归档日志 + 构建内存重做状态(如 block cleanout、undo 回滚) —— 受限于 CPU、DB_RECOVERY_FILE_DEST空间 IO、日志结构复杂度(比如每秒上万小事务) - 隐式开销:RMAN 自动校验块一致性、重建临时段、清理 stale undo segment 等操作不显式报进度,但占时可观
用 recover database test 测真实日志应用速率
这个命令跳过物理写盘,只做日志解析和内存重做,耗时≈纯 CPU + 日志格式解析开销。它是测“redo apply 瓶颈”的最轻量方式。
执行前确保:
- 数据库已 mount,且归档日志路径可访问(
V$ARCHIVED_LOG中DELETED = 'NO') -
DB_RECOVERY_FILE_DEST有足够空间(建议 ≥ 归档日志总大小 × 3,因中间状态膨胀) - 关闭自动备份控制文件(
CONFIGURE CONTROLFILE AUTOBACKUP OFF),避免干扰
示例:
run {
set until sequence 123456 archivelog current;
recover database test;
}
若该命令跑完耗时 8 分钟,说明纯日志处理能力没问题;再对比真实 recover database 耗时 —— 若后者要 45 分钟,差值 37 分钟大概率是磁盘 IO 或数据文件写入瓶颈。
绕过 RMAN 还原阶段,单独压测归档日志应用性能
如果你已知还原完成、只关心恢复阶段耗时(例如备库同步慢),可用以下组合逼近真实负载:
-
recover database noredo:跳过归档日志读取,仅做控制文件/数据文件头校验,用于 baseline 对比 -
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE:在备库上手动触发 MRP 进程,观察V$RECOVERY_PROGRESS的ITEM = 'Active Apply Rate'字段,单位 MB/s 更贴近生产 IO 压力 - 注意:MRP 模式下,
V$ARCHIVE_DEST_STATUS的STATUS必须为VALID,否则日志根本拉不过来
恢复前必须检查的三个空间点
90% 的“恢复中途失败”其实卡在空间不足,且错误提示模糊(比如 ORA-00600 [kcratr_nab_less_than_odr] 或静默挂起):
-
DB_RECOVERY_FILE_DEST:不是只放归档的地方,重做中间状态、temp undo、block cleanout buffer 全挤在这里 —— 至少预留归档总量的 3–5 倍 - 数据文件所在磁盘剩余空间:RMAN restore 会先扩展文件头,再逐块填充,
df -h看到 20% 剩余可能已不够 - 闪回区(如果开启):
DB_FLASHBACK_RETENTION_TARGET会影响V$FLASHBACK_DATABASE_LOG占用,恢复期间建议临时禁用(ALTER DATABASE FLASHBACK OFF)
最稳妥的做法是恢复前切走 fast recovery area:
ALTER SYSTEM SET db_recovery_file_dest='/large_local_disk/fr_area' SCOPE=SPFILE;
重启实例后执行,避免共享存储争抢 IO,也绕过 NFS/CIFS 类文件系统对大块写入的性能惩罚。
恢复时间的最大变量从来不是备份集大小,而是你有没有提前验证过日志应用速率、有没有给中间状态留够空间、以及是否把“等待归档”误判成“正在恢复”。这些点不摸清,看再多 V$SESSION_LONGOPS 也没用。











