v$session_longops是最稳的RMAN实时进度监控方式,它基于内核级工作单元更新sofar/totalwork,不受控制文件刷新延迟影响,且需配合v$rman_status判断作业最终状态。
直接看是最稳的实时进度监控方式,它不依赖 rman catalog,也不受控制文件刷新延迟影响,只要备份还在跑,就能看到百分比和预估剩余时间。
为什么
能反映 RMAN 实时进度
Oracle 内部把 RMAN 备份拆成若干“可度量工作单元”(比如每个数据文件、每个归档日志段),每完成一个单元就更新
和
。这个机制是内核级的,不受 RMAN 状态刷盘逻辑干扰——哪怕
还卡在
或已清空,只要会话没退出,
就持续有效。
常见误判点:
查不到记录?先确认 RMAN 是否真在运行:
返回空?可能
匹配不准,用
比
更可靠
百分比卡住不动?检查
是否成立——若相等说明该子任务已完成,下一个子任务还没触发更新
查询必须加的过滤条件
裸查这个视图会返回大量无关记录(如 DBMS_STATS、SQL*Loader),必须用以下组合条件才能准确定位 RMAN 当前进度:
:覆盖
、
、
等所有操作
:排除聚合行(它没有
/
,会报除零错误)
:过滤掉初始化阶段未设工作量的伪记录
:只显示“尚未完成”的任务,避免把已结束的子任务混进来
完整示例:
稿定在线PS
PS软件网页版
下载
进度数值怎么看才不误导
的百分比是“当前子任务”的完成度,不是整个备份的全局进度。一个全库备份通常包含多个子任务(归档日志 → 数据文件1 → 数据文件2 → 控制文件),所以你会看到百分比反复从 0 跳到 100。
如果
长期停在 0%,大概率是某个通道卡住:查
对应的
,再用
看 OS 进程是否僵死
是 Oracle 基于当前速率推算的,当 I/O 出现抖动(如 NFS 临时拥塞)时,该值可能剧烈跳变,不能当作绝对依据
真正反映“整体干了多少”的是
字段(来自
),但它的更新频率远低于
,不适合秒级盯盘
和
搭配使用的实际价值
解决“现在干到哪了”,
解决“这个作业最终有没有成功”。两者必须配合,否则容易漏掉关键问题:
查到
显示 100%,但
里对应
的状态是
——说明备份集生成了,但可能跳过了离线数据文件或归档日志未删干净
查
发现某通道卡在 99%,同时
中该作业的
已变成
——说明 RMAN 主控进程已放弃,但子会话还没清理完,此时强制 kill
反而可能损坏备份片
关联字段只有
:用它把
和
连起来,才能锁定具体是哪个 RMAN 作业出了问题
最易被忽略的一点:
记录的是“会话级进度”,如果 RMAN 配了多个通道(
、
),你会看到多行结果,每行代表一个通道的独立进度——别只盯着第一行看。
v$session_longopsv$session_longopssofartotalworkv$rman_statusRUNNINGv$session_longopsSELECT sid, client_info FROM v$session WHERE client_info LIKE '%rman%';opnameLIKE 'RMAN%'= 'RMAN backup'sofar = totalworkv$session_longopsOPNAME LIKE 'RMAN%'RMAN backupRMAN restoreRMAN validateOPNAME NOT LIKE '%aggregate%'sofartotalworkTOTALWORK != 0SOFAR TOTALWORKSELECT sid, serial#, opname,
ROUND(sofar/totalwork*100, 2) "%_COMPLETE",
TRUNC(elapsed_seconds/60)||':'||MOD(elapsed_seconds,60) "ELAPSED_MIN",
TRUNC(time_remaining/60)||':'||MOD(time_remaining,60) "REMAINING_MIN"
FROM v$session_longops
WHERE opname LIKE 'RMAN%'
AND opname NOT LIKE '%aggregate%'
AND totalwork != 0
AND sofar <> totalwork;v$session_longops%_COMPLETEclient_infospidps -ef | grep spidTIME_REMAININGBYTESv$backup_sync_iov$session_longopsv$rman_statusv$session_longopsv$rman_statusv$session_longopsv$rman_statussession_stampCOMPLETED WITH WARNINGSv$session_longopsv$rman_statusstatusFAILEDsidSESSION_STAMPv$session_longops.sidv$rman_status.session_stampv$session_longopsallocate channel c1c2