V$RMAN_STATUS仅内存驻留、延迟写入,查不到刚完成的备份记录;需用时间范围过滤、SYSDBA权限,并通过SESSION_STAMP关联V$RMAN_OUTPUT和V$RMAN_BACKUP_JOB_DETAILS综合判断真实状态。
直接查 v$rman_status 能看到“是否在跑”,但看不到“跑得多快”“卡在哪”“有没有静默失败”——真要监控运行状态,得组合查、带条件筛、按 session_stamp 关联。
为什么刚执行完 BACKUP DATABASE 却查不到记录?
V$RMAN_STATUS 中的 RUNNING 状态数据只驻留在内存里,作业结束后才刷入控制文件;部分 Oracle 12.1 之前版本存在延迟写入或未刷新问题。你执行完立刻查,可能仍显示 STATUS = 'RUNNING',也可能一条都查不到。
实操建议:
- 别依赖固定时间点,用
START_TIME >= SYSDATE - 1/24(过去一小时)过滤更可靠 - 确认连接权限:必须以
SYSDBA或拥有SELECT_CATALOG_ROLE的用户登录,否则视图返回空 - 如果查不到,先
SELECT * FROM V$RMAN_STATUS WHERE STATUS = 'RUNNING'看当前活跃会话,再用其SESSION_STAMP去关联其他视图
V$RMAN_BACKUP_JOB_DETAILS 不是实时视图
这个视图只存已完成作业的统计字段(如 INPUT_BYTES、ELAPSED_SECONDS、COMPRESSION_RATIO),对正在运行的备份完全不可见。它不能告诉你“现在进度条到哪了”,只能回答“上一次花了多久、压缩了多少”。
常见误判点:
-
COMPRESSION_RATIO IS NULL≠ 压缩失败,只是没启用压缩 -
INPUT_BYTES包含跳过的空块,不代表真实磁盘 I/O 量;要看磁盘压力得查V$BACKUP_SYNC_IO或V$BACKUP_ASYNC_IO -
STATUS = 'COMPLETED'只表示 RMAN 流程走完,不等于备份集可恢复——必须配合RESTORE VALIDATE或LIST BACKUP验证
警告和错误藏在 V$RMAN_OUTPUT 里
90% 的“备份成功但实际不可用”问题,根源是一行被忽略的 warning,比如 archivelog not deleted as it is still needed 或 skipping datafile because it is offline。这个视图只存内存、最多保留 37278 条、实例重启就清空。
必须的操作链路:
- 先从
V$RMAN_STATUS拿到异常作业的SESSION_STAMP - 再用该值查
V$RMAN_OUTPUT:SELECT OUTPUT FROM V$RMAN_OUTPUT WHERE SESSION_STAMP = - 注意:不要只扫
STATUS = 'COMPLETED WITH WARNINGS',有些 warning 会落在'COMPLETED'记录之后的 output 行里
真正难的不是查哪个视图,而是把 SESSION_RECID 和 SESSION_STAMP 当作唯一关联键,在三个视图间穿起来——漏掉任一环节,监控就断成碎片。











