查rman实时进度必须用v$session_longops,因其可显示正在进行中的子任务完成度,而v$rman_backup_job_details仅存已结束备份;需过滤opname like 'rman%'且排除'%aggregate%',并满足totalwork!=0与sofar!=totalwork。
查 rman 实时进度必须用 v$session_longops,不是 v$rman_backup_job_details
v$rman_backup_job_details 只存已结束的备份,start_time 和 end_time 都为空时,说明它根本看不到正在跑的任务。想盯住“现在卡在哪”,得切到会话级长操作视图。
-
OPNAME LIKE 'RMAN%'是核心过滤条件,但要排除'%aggregate%',否则会混入内部聚合任务 -
TOTALWORK != 0和SOFAR != TOTALWORK必须同时成立,才能确保是“正在进行中”的子任务 - 百分比是当前子任务(比如某个数据文件或一组归档日志)的完成度,不是全库备份的全局进度——你会看到它反复从 0 跳到 100
- 如果
"%_COMPLETE"长期停在 0%,大概率是 I/O 卡住或某通道没分配成功,需结合V$SESSION查STATUS = 'ACTIVE'且EVENT是否为db file sequential read或control file sequential read
查 RMAN 历史备份完成时间优先用 V$RMAN_STATUS,但注意内存有效期
查最后一次成功全备,V$RMAN_STATUS 是最准的入口,因为它记录了每次 RMAN 操作的起止、状态和类型。但它只驻留在 SGA 内存里,默认最多保留约 37278 条,不写入控制文件。
- 必须加
OPERATION = 'BACKUP'和STATUS IN ('COMPLETED', 'COMPLETED WITH WARNINGS'),否则会把CROSSCHECK或DELETE OBSOLETE当成备份 -
OBJECT_TYPE = 'DB FULL'比INPUT_TYPE = 'DB FULL'更可靠,旧版本中后者可能为空 - 时间范围建议用
START_TIME >= TRUNC(SYSDATE) - 7,避免TO_DATE('2026-06-01', 'YYYY-MM-DD')因 NLS 设置导致隐式转换失败 - 如果查询返回空,不代表没做备份,很可能是记录已被刷出内存;这时得切到
V$RMAN_BACKUP_JOB_DETAILS查更久远但略滞后的数据
查正在运行的 RMAN 通道状态得关联 V$SESSION + V$BACKUP
V$BACKUP 是少数能在备份执行中持续更新的视图之一,按 channel 粒度提供 STATUS 和 PERCENT_DONE,但它对备份集(backupset)的支持有限。
- 先定位 RMAN 会话:
SELECT SID, SERIAL#, PROGRAM FROM V$SESSION WHERE PROGRAM LIKE '%rman%' - 再关联备份状态:
SELECT s.SID, b.TYPE, b.STATUS, b.PERCENT_DONE FROM V$SESSION s JOIN V$BACKUP b ON s.SID = b.SID -
PERCENT_DONE对镜像拷贝或部分归档日志备份有效,对 backupset 常为 0 —— 这不是 bug,是 Oracle 实现限制 - 若
STATUS = 'ACTIVE'但PERCENT_DONE不动,配合V$BACKUP_SYNC_IO查等待事件,大概率是存储层响应延迟
查归档日志备份实时进展盯紧 V$BACKUP_REDOLOG
当执行 BACKUP ARCHIVELOG ALL 或 BACKUP ARCHIVELOG SINCE 时,V$BACKUP_REDOLOG 是唯一能告诉你“当前读到第几个归档日志”的视图。
- 关键字段:
SEQUENCE#(日志序号)、THREAD#(线程号)、STATUS(ACTIVE表示正在读取,COMPLETED表示已写入备份片) - 常用诊断语句:
SELECT THREAD#, SEQUENCE#, FIRST_TIME, STATUS FROM V$BACKUP_REDOLOG ORDER BY FIRST_TIME - 如果某条
STATUS = 'ACTIVE'超过 10 分钟,且对应归档日志文件在磁盘上存在但不可读,就要检查 ASM diskgroup 状态或归档路径权限 - 该视图只包含“当前正在被 RMAN 备份”的日志,已备份完的不会停留,也不包含已被删除的归档
查 RMAN 进度不能只依赖一个视图,不同阶段要换视角:刚启动看 V$SESSION_LONGOPS,跑一半看 V$BACKUP 和 V$BACKUP_REDOLOG,结束后查 V$RMAN_STATUS 或 V$RMAN_BACKUP_JOB_DETAILS。最容易忽略的是 PERCENT_DONE 的粒度问题——它永远不是整个备份的完成率,而是当前子任务的瞬时值。











