最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Oracle数据库如何查看RMAN备份历史
时间:2026-08-18 20:22:50 编辑:袖梨 来源:一聚教程网
V$RMAN_STATUS是查RMAN备份历史的首选视图,但仅内存驻留、默认最多保留约37278条记录,超限即被刷出;查最近一次成功全备需严格过滤OPERATION='BACKUP'、OBJECT_TYPE='DB FULL'、STATUS IN ('COMPLETED','COMPLETED WITH WARNINGS')及START_TIME>=TRUNC(SYSDATE)-7。
V$RMAN_STATUS 是查 RMAN 备份历史的首选视图,但它只存内存、默认最多保留约 37278 条记录,超过就刷掉——所以“查不到”不等于“没备份”,很可能是记录已过期。
查最近一次成功全备(V$RMAN_STATUS)
这个查询聚焦日常巡检,条件必须收严,否则容易混入干扰项:
-
OPERATION = 'BACKUP'是硬过滤,否则会拉出CROSSCHECK、DELETE OBSOLETE等无关操作 -
OBJECT_TYPE = 'DB FULL'比INPUT_TYPE = 'DB FULL'更可靠,旧版本中后者可能为空 -
STATUS IN ('COMPLETED', 'COMPLETED WITH WARNINGS')才算真正完成;'FAILED'或'RUNNING'都不能算 - 时间范围用
START_TIME >= TRUNC(SYSDATE) - 7,避免TO_DATE字面量因 NLS 设置失效
示例语句:
SELECT START_TIME, END_TIME, STATUS, OBJECT_TYPEFROM V$RMAN_STATUSWHERE OPERATION = 'BACKUP'AND OBJECT_TYPE = 'DB FULL'AND STATUS IN ('COMPLETED', 'COMPLETED WITH WARNINGS')AND START_TIME >= TRUNC(SYSDATE) - 7ORDER BY START_TIME DESCFETCH FIRST 1 ROW ONLY;
查更久远或带容量的备份(V$RMAN_BACKUP_JOB_DETAILS)
当 V$RMAN_STATUS 返回空时,这是第二选择。它数据来自控制文件,持久性强,但 Oracle 10.2 及更早版本不支持:
- 没有
'RUNNING'状态,所有记录都是已完成的,不用额外排除 -
INPUT_BYTES和OUTPUT_BYTES是原始字节数,可用于计算压缩比 -
INPUT_BYTES_DISPLAY和OUTPUT_BYTES_DISPLAY是带单位的格式化字符串,适合人眼阅读 - 刷新有轻微延迟(通常几秒),不适合监控实时进度
示例语句(查最近 30 天全备):
SELECT START_TIME, END_TIME, STATUS, INPUT_BYTES_DISPLAY, OUTPUT_BYTES_DISPLAY, COMPRESSION_RATIOFROM V$RMAN_BACKUP_JOB_DETAILSWHERE OPERATION = 'BACKUP'AND INPUT_TYPE = 'DB FULL'AND START_TIME >= TRUNC(SYSDATE) - 30ORDER BY START_TIME DESC;
查备份集物理信息(GV$BACKUP_PIECE + GV$BACKUP_SET)
要确认备份是否真的写到磁盘、路径在哪、大小多少、是否可用,得查这两个视图:
-
STATUS = 'A'表示AVAILABLE,'X'是EXPIRED(RMAN 认为不存在),'D'是DELETED(已被清理) -
DELETED = 'NO'必须显式过滤,否则会拉出已删但未清理元数据的残影 - RAC 环境要用
GV$视图,单实例用V$即可 -
BYTES字段单位是字节,除以1024*1024*1024得 GB,注意别漏括号
示例语句(查近 7 天所有可用备份集):
SELECT A.RECID "BACKUP SET", A.SET_STAMP, DECODE(B.INCREMENTAL_LEVEL, '', DECODE(BACKUP_TYPE,'L','Archivelog','Full'), 1,'Incr-1级', 0,'Incr-0级'), DECODE(A.STATUS, 'A','AVAILABLE', 'D','DELETED', 'X','EXPIRED') "STATUS", A.DEVICE_TYPE, A.START_TIME, A.COMPLETION_TIME, ROUND(A.BYTES/1024/1024/1024, 2) "Size(GB)"FROM GV$BACKUP_PIECE A, GV$BACKUP_SET BWHERE A.SET_STAMP = B.SET_STAMPAND A.DELETED = 'NO'AND A.START_TIME >= TRUNC(SYSDATE) - 7ORDER BY A.COMPLETION_TIME DESC;
常见误判和排查顺序
查不到备份,先别急着报故障——按以下顺序排查:
- 先跑
SELECT COUNT(*) FROM V$RMAN_STATUS WHERE OPERATION = 'BACKUP',看总数是否接近 37278;接近就说明老记录被刷掉了 - 查
V$RMAN_BACKUP_JOB_DETAILS,如果它也空,再检查 RMAN 配置:SELECT * FROM V$RMAN_CONFIGURATION,确认RETENTION POLICY是否太激进 - 如果两个视图都无记录,但 RMAN 日志显示成功,立刻查
LIST BACKUPSET命令输出——它走的是控制文件,和 SQL 视图来源不同 -
V$RMAN_OUTPUT能看到 RMAN 执行时的逐行输出,但也是内存视图,同样受 37278 条限制,且不包含错误堆栈
最易被忽略的一点:V$RMAN_STATUS 中的 COMMAND_ID 是时间戳字符串(如 '2026-07-27T09:15:22'),不是数字,用它做范围比较时别用 BETWEEN,应转为 TO_TIMESTAMP 或直接用 START_TIME 字段。
相关文章
- 小米路由器网络不稳定的原因有哪些(如何解决小米路由器网络不稳定的问题) 08-18
- 吉利汽车2026上半年“量价利齐升”:营收破1700亿 海外销量激增158% 08-18
- 两个结构化数据自检工具的分工:语法校验与效果预览 08-18
- 元旦放假通知模板:清晰简洁的放假安排与温馨祝福 08-18
- 和平精英海岛 2.0 更新奖励是什么 08-18
- excel表格如何利用VBA代码插入交叉矩形图 08-18