查最近一次成功全备耗时应优先用v$rman_status视图,通过end_time-start_time计算分钟数,过滤operation='backup'、object_type='db full'、status为'completed'或'completed with warnings',并限定start_time>=trunc(sysdate)-7。
直接查 v$rman_status 或 v$rman_backup_job_details,但必须过滤掉非备份操作、非完成状态和过期记录,否则返回的“耗时”毫无意义。
查最近一次成功全备耗时:用 V$RMAN_STATUS + 显式时间差计算
这是最轻量、响应最快的方式,适合日常巡检脚本。关键不是靠视图自带字段,而是用 END_TIME - START_TIME 算出秒数再转成可读格式。
-
STATUS必须是'COMPLETED'或'COMPLETED WITH WARNINGS','RUNNING'和'FAILED'的记录不能参与计算 -
OPERATION = 'BACKUP'是硬性条件,否则会混入CROSSCHECK、DELETE OBSOLETE等伪“备份”记录 -
OBJECT_TYPE = 'DB FULL'比INPUT_TYPE = 'DB FULL'更稳定,旧版本中后者可能为空 - 避免用
TO_DATE('2026-06-01', 'YYYY-MM-DD')这类字面量——NLS 设置一变就报错;改用TRUNC(SYSDATE) - 7 - 耗时字段推荐写成:
ROUND((END_TIME - START_TIME) * 24 * 60, 1) AS "DURATION_MIN",单位分钟,保留一位小数
示例语句:
SELECT
START_TIME,
END_TIME,
ROUND((END_TIME - START_TIME) * 24 * 60, 1) AS "DURATION_MIN",
STATUS,
OBJECT_TYPE
FROM V$RMAN_STATUS
WHERE OPERATION = 'BACKUP'
AND OBJECT_TYPE = 'DB FULL'
AND STATUS IN ('COMPLETED', 'COMPLETED WITH WARNINGS')
AND START_TIME >= TRUNC(SYSDATE) - 7
ORDER BY START_TIME DESC
FETCH FIRST 1 ROW ONLY;
查带压缩比和速率的耗时:用 V$RMAN_BACKUP_JOB_DETAILS
这个视图自带 ELAPSED_SECONDS 字段,数值更准(它从 RMAN 实际启动计时,不含连接开销),还附带 COMPRESSION_RATIO 和 OUTPUT_BYTES_PER_SEC_DISPLAY,适合做性能复盘。
- 该视图数据来自控制文件,比
V$RMAN_STATUS持久,但刷新有几秒延迟;Oracle 10.2 及更早版本不支持 -
STATUS值只有已完成状态(如'COMPLETED'),不用额外排除'RUNNING' -
INPUT_TYPE = 'DB FULL'在此处可用,但注意:某些增量 0 备份也会标为DB FULL,需结合INCREMENTAL_LEVEL判断(V$RMAN_BACKUP_JOB_DETAILS不直接暴露该字段,得连查V$BACKUP_SET) -
ELAPSED_SECONDS是整数秒,若要转成 “X分Y秒”,可用:FLOOR(ELAPSED_SECONDS/60) || 'm ' || MOD(ELAPSED_SECONDS,60) || 's'
示例语句:
SELECT START_TIME, END_TIME, ELAPSED_SECONDS, FLOOR(ELAPSED_SECONDS/60) || 'm ' || MOD(ELAPSED_SECONDS,60) || 's' AS "DURATION_FMT", COMPRESSION_RATIO, OUTPUT_BYTES_PER_SEC_DISPLAY AS "RATE" FROM V$RMAN_BACKUP_JOB_DETAILS WHERE INPUT_TYPE = 'DB FULL' AND STATUS = 'COMPLETED' ORDER BY START_TIME DESC FETCH FIRST 1 ROW ONLY;
为什么 V$SESSION_LONGOPS 不适合查“已结束”的耗时
这个视图只反映正在运行的长操作进度,V$RMAN_BACKUP_JOB_DETAILS 和 V$RMAN_STATUS 才是查“已完成”作业的唯一可靠来源。
-
V$SESSION_LONGOPS中的OPNAME LIKE 'RMAN%'记录在备份结束后立刻消失,查不到历史 - 它的
ELAPSED_SECONDS是当前已运行秒数,不是最终耗时;TIME_REMAINING经常不准,尤其在 I/O 波动大时 - 如果备份中途被
KILL或崩溃,该视图不会留下任何痕迹,而V$RMAN_STATUS至少会记一条STATUS = 'FAILED'
真正容易被忽略的是:两个视图都可能返回空结果——不是没备份,而是记录被刷出了内存(V$RMAN_STATUS 默认上限约 37278 条)或还没写入控制文件(V$RMAN_BACKUP_JOB_DETAILS 刷新延迟)。这时候得去翻 RMAN 日志,或者确认备份是否真的执行了,而不是依赖视图“一定有”。











