V$RMAN_BACKUP_JOB_DETAILS仅记录已结束作业,无法查实时进度;需结合V$SESSION、V$BACKUP、V$BACKUP_REDOLOG和V$RMAN_OUTPUT等视图定位运行中备份状态、完成百分比、归档日志处理进展及命令行输出。
直接看 v$rman_backup_job_details 只能查已完成作业,真正在跑的备份进度得靠组合查询——核心是 v$session + v$process + v$backup 或 v$rman_output。
为什么 V$RMAN_BACKUP_JOB_DETAILS 查不到“正在运行”的进度
这个视图只记录 已结束 的 RMAN 作业(STATUS 是 COMPLETED、FAILED 等),哪怕备份刚启动一秒钟,它也不会出现。想看到“当前卡在哪”,必须转向实时会话级视图。
-
V$RMAN_BACKUP_JOB_DETAILS的START_TIME和END_TIME都为空时,说明该作业还没结束,此视图不适用 - 它的
INPUT_BYTES和OUTPUT_BYTES字段在作业运行中不会刷新,不是实时指标 - 真正反映“正在读哪个归档日志”或“当前备份到第几个数据文件”的信息,藏在
V$BACKUP_REDOLOG或V$BACKUP_DATAFILE里
查实时备份进度:用 V$BACKUP + V$SESSION 关联定位通道
V$BACKUP 是少数几个能在备份执行中持续更新的视图之一,它按通道(channel)粒度显示每个子任务的状态和完成百分比。
- 先查出正在运行的 RMAN 会话:
SELECT SID, SERIAL#, PROGRAM FROM V$SESSION WHERE PROGRAM LIKE '%rman%' - 再关联进程和备份状态:
SELECT s.SID, s.PROGRAM, b.STATUS, b.PERCENT_DONE, b.TYPE FROM V$SESSION s JOIN V$PROCESS p ON s.PADDR = p.ADDR JOIN V$BACKUP b ON s.SID = b.SID -
PERCENT_DONE字段只对部分备份类型(如镜像拷贝、某些归档日志备份)有效;对备份集(backupset)可能长期为 0 —— 这不是 bug,是 Oracle 实现限制 - 如果
STATUS是ACTIVE但PERCENT_DONE不动,大概率是 I/O 卡在存储层,需配合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 分钟,且SEQUENCE#对应的日志文件在磁盘上存在但不可读,就要检查权限或 ASM diskgroup 状态 - 注意:该视图只包含“当前正在被 RMAN 备份”的日志,已备份完的不会停留,也不包含已被删除的归档日志
想看到 RMAN 命令行里滚动的那串输出?查 V$RMAN_OUTPUT
这是最接近“黑屏输出”的视图,每条记录对应 RMAN 输出的一行文本,带时间戳和会话标识。
- 实时跟踪语句:
SELECT OUTPUT FROM V$RMAN_OUTPUT WHERE SESSION_RECID = (SELECT MAX(SESSION_RECID) FROM V$RMAN_OUTPUT) ORDER BY RECORD_ID - 它会包含类似
channel ORA_DISK_1: starting piece 1 at ...、piece handle=... tag=...这类信息,对确认是否真在写文件很有用 - 但要注意:
V$RMAN_OUTPUT缓存有限,默认只保留最近约 500 行;长时间作业可能被覆盖,不能依赖它查历史 - 如果查询返回空,先确认 RMAN 是否真的以 TARGET 连接方式运行(非 NOCATALOG 模式下该视图可能不可见)
真正难的是判断“卡住”还是“慢”。PERCENT_DONE 不动时,别急着 kill,先看 V$BACKUP_REDOLOG 最新 ACTIVE 条目的 FIRST_TIME 是否还在推进,再结合 V$SESSION_EVENT 查 direct path read 或 backup sync io 的等待时间——很多所谓“卡死”,其实是归档日志跨 ASM diskgroup 导致单点 I/O 饱和。



















