
好的,我们来全面、深入地解析 Oracle 19C 数据库中的 V$RMAN_BACKUP_JOB_DETAILS 动态性能视图。这个视图是 RMAN (Recovery Manager) 备份与恢复管理的核心监控工具,提供了已完成备份作业的宏观历史和性能数据。
📖 概述与作用
V$RMAN_BACKUP_JOB_DETAILS 视图提供了关于所有已完成(无论成功或失败)的 RMAN 备份作业的高级摘要信息。每个 RMAN BACKUP、COPY 或 RECOVER 命令都会被视为一个作业,并在该视图中生成一条记录。
- 核心目的:提供备份作业的历史记录和性能分析。它帮助 DBA 快速回答以下问题:
- 过去一段时间内运行了哪些备份作业?
- 它们是否成功?
- 它们耗时多久?
- 处理了多少数据?备份压缩率如何?
- 平均备份吞吐量是多少?
- 哪个作业失败了?为什么?(通过与
V$RMAN_OUTPUT关联)
🎯 使用场景
- 备份作业监控与审计:生成每日/每周备份报告,验证备份策略是否按计划成功执行,满足合规性要求。
- 性能分析与容量规划:通过分析作业持续时间、输入/输出字节数、吞吐量等指标,识别备份性能瓶颈(是网络慢、磁盘IO慢还是磁带库慢?),并为未来的容量规划提供数据支持。
- 故障诊断:快速定位失败的备份作业,并获取其作业标识符(
SESSION_RECID,SESSION_STAMP),以便进一步查询V$RMAN_OUTPUT查看详细的错误日志。 - 资源消耗评估:评估备份操作对系统 I/O 和网络资源的影响。
- 优化验证:在调整 RMAN 参数(如
FILESPERSET,MAXOPENFILES)、启用压缩或使用加密后,通过对比此视图中的数据来验证优化效果。
📊 字段含义详解
V$RMAN_BACKUP_JOB_DETAILS 视图的字段涵盖了备份作业的元数据、状态、时间、数据量和性能指标。下表提供了每个字段的详细解释。
| 字段名 | 数据类型 | 含义与说明 |
|---|---|---|
| SESSION_RECID | NUMBER | 与会话相关的序列号 (RECID)。与 SESSION_STAMP 结合使用,构成该备份作业的唯一标识符。此标识符可用于与其他 RMAN 视图(如 V$RMAN_OUTPUT)进行关联查询。 |
| SESSION_STAMP | NUMBER | 与会话相关的时间戳 (STAMP)。与 SESSION_RECID 结合,唯一标识一个备份作业。 |
| COMMAND_ID | VARCHAR2(512) | 用户为 RMAN 作业指定的标识符。通过在 RMAN 中运行 RUN { SET COMMAND ID TO 'my_backup'; ... } 来设置。如果未设置,则为 NULL。用于在脚本中自定义作业标识。 |
| START_TIME | DATE | 备份作业开始执行的时间。 |
| END_TIME | DATE | 备份作业结束执行的时间。 |
| TIME_TAKEN_DISPLAY | VARCHAR2(4000) | 作业总耗时的可读格式显示(例如:00:15:30 表示 15 分钟 30 秒)。 |
| INPUT_TYPE | VARCHAR2(20) | 备份输入的数据库文件类型。常见值: • DB FULL:完全数据库备份• DATAFILE FULL:数据文件完全备份• ARCHIVELOG:归档日志备份• SPFILE:服务器参数文件备份• CONTROLFILE:控制文件备份• BACKUPSET:备份集备份 |
| STATUS | VARCHAR2(16) | 备份作业的最终状态。 • COMPLETED:作业成功完成。• FAILED:作业执行失败。• COMPLETED WITH WARNINGS:作业已完成,但发生了非致命错误(如某些文件跳过)。• RUNNING:作业正在运行(但此视图通常只存储已完成作业,运行中的作业应查 V$RMAN_BACKUP_JOB 或 V$SESSION_LONGOPS)。 |
| INPUT_BYTES | NUMBER | 备份作业读取的总字节数。即从数据库文件、归档日志等源读取的原始数据量。这是计算压缩率的关键。 |
| OUTPUT_BYTES | NUMBER | 备份作业写入的总字节数。即最终生成的备份片(backup pieces)或镜像副本(image copies)的大小。 |
| INPUT_BYTES_PER_SEC | NUMBER | 平均每秒读取的字节数。反映了源存储的读取性能。 |
| OUTPUT_BYTES_PER_SEC | NUMBER | 平均每秒写入的字节数。反映了目标存储(磁盘、磁带)的写入性能。 |
| OPTIMIZED | VARCHAR2(3) | 指示备份是否使用了优化功能(如 BACKUP OPTIMIZATION)。• YES:备份因优化而跳过了某些文件(因为它们未被更改)。• NO:未使用优化。 |
| OUTPUT_DEVICE_TYPE | VARCHAR2(17) | 输出设备(备份目的地)的类型。 • DISK:备份到磁盘。• SBT_TAPE:备份到磁带(需要通过介质管理库 MML)。 |
| AUTOBACKUP_COUNT | NUMBER | 作业期间生成的控制文件和SPFILE的自动备份数量。 |
| CON_ID | NUMBER | 容器ID。在多租户环境(CDB)中,标识该行数据所属的容器。 • 0:表示数据属于整个 CDB。• 1:表示数据属于根容器(CDB$ROOT)。• n (n>1):表示数据属于特定可插拔数据库(PDB)的 ID。对于 RMAN 作业,如果是在 CDB 级别执行,CON_ID 通常为 0 或 1。 |
🔗 相关视图与基表
-
核心相关视图:
V$RMAN_OUTPUT:这是最重要的关联视图。它包含了 RMAN 作业执行过程中产生的详细消息和错误日志。通过SESSION_RECID和SESSION_STAMP与V$RMAN_BACKUP_JOB_DETAILS关联,可以查看作业的详细输出。V$RMAN_BACKUP_SUBJOB_DETAILS:如果备份作业并行执行,此视图提供子作业的详细信息。V$BACKUP_SET/V$BACKUP_PIECE:提供已创建备份集和备份片的详细信息。V$SESSION_LONGOPS:用于监控正在运行的长时间操作(包括 RMAN 备份)的进度。RC_RMAN_BACKUP_JOB_DETAILS:如果使用了恢复目录(Recovery Catalog),此视图提供类似信息,但可能包含更久的历史记录(因为控制文件中的记录可能被覆盖)。
-
关于基表:
V$RMAN_BACKUP_JOB_DETAILS是一个 **动态性能视图(V视图)∗∗。其底层数据来源于数据库的∗∗控制文件(ControlFile)∗∗。RMAN在执行作业时,会将关键的元数据和统计信息实时写入控制文件。这些信息包括作业的起止时间、状态、处理的数据量等。其底层基表是像∗∗‘X视图)**。其底层数据来源于数据库的**控制文件(Control File)**。 RMAN 在执行作业时,会将关键的元数据和统计信息实时写入控制文件。这些信息包括作业的起止时间、状态、处理的数据量等。其底层基表是像 **`X视图)∗∗。其底层数据来源于数据库的∗∗控制文件(ControlFile)∗∗。RMAN在执行作业时,会将关键的元数据和统计信息实时写入控制文件。这些信息包括作业的起止时间、状态、处理的数据量等。其底层基表是像∗∗‘XKRCJBSE** 这样的内部X$` 表,这些表是控制文件中 RMAN 元数据在内存中的映射。当控制文件中的记录被循环覆盖后,相应的记录也会从该视图中消失。
⚙️ 底层原理与知识点
1. RMAN 架构与控制文件的作用:
RMAN 是 Oracle 的官方备份工具。它不与服务器进程直接交互,而是作为一个客户端,指示数据库服务器进程来执行备份和恢复操作。所有备份操作的元数据(做了什么、何时做的、备份了哪些文件等)都会记录在控制文件中。V$RMAN_BACKUP_JOB_DETAILS 就是这些元数据的摘要视图。
2. 备份作业的生命周期:
- 启动:RMAN 客户端发出
BACKUP命令。 - 记录:RMAN 在控制文件中为此次作业创建一个记录,分配
SESSION_RECID和SESSION_STAMP。 - 执行:数据库通道进程(
ora_smon_*,ora_q000_*等)读取数据文件,并将其发送给MML(对于磁带)或直接由RMAN进程写入磁盘(对于磁盘备份)。 - 统计:在整个过程中,RMAN 会持续更新控制文件中的统计信息(如已读取/写入的字节数)。
- 完成:作业结束后,最终状态(
STATUS)被写入控制文件。 - 查询:DBA 通过
V$RMAN_BACKUP_JOB_DETAILS视图查询这些记录。
3. 压缩率计算:
这是一个非常重要的指标,反映了备份效率。
压缩率 = (1 - (OUTPUT_BYTES / INPUT_BYTES)) * 100%
例如,INPUT_BYTES 为 100GB,OUTPUT_BYTES 为 25GB,则压缩率为 75%。这有助于评估是否值得启用 RMAN 压缩功能(AS COMPRESSED BACKUPSET)。
4. 性能指标:
OUTPUT_BYTES_PER_SEC:这是衡量备份性能的关键指标。如果备份到磁盘,此值反映了磁盘阵列的写入速度。如果备份到磁带,则反映了磁带驱动器的吞吐能力。- 通过比较
INPUT_BYTES_PER_SEC和OUTPUT_BYTES_PER_SEC,可以判断瓶颈是在读取端还是写入端。
🛠️ 常用查询 SQL
- 最近完成的备份作业摘要(最常用查询)
SELECT SESSION_RECID,
SESSION_STAMP,
START_TIME,
END_TIME,
TIME_TAKEN_DISPLAY,
INPUT_TYPE,
STATUS,
ROUND(INPUT_BYTES/1024/1024/1024, 2) AS INPUT_GB,
ROUND(OUTPUT_BYTES/1024/1024/1024, 2) AS OUTPUT_GB,
ROUND((1 - (OUTPUT_BYTES / INPUT_BYTES)) * 100, 2) AS COMPRESSION_RATIO,
ROUND(OUTPUT_BYTES_PER_SEC/1024/1024, 2) AS OUTPUT_MB_PER_SEC,
OUTPUT_DEVICE_TYPE
FROM V$RMAN_BACKUP_JOB_DETAILS
ORDER BY START_TIME DESC;
- 查找失败的备份作业
SELECT SESSION_RECID, SESSION_STAMP, START_TIME, INPUT_TYPE, STATUS
FROM V$RMAN_BACKUP_JOB_DETAILS
WHERE STATUS != 'COMPLETED'
ORDER BY START_TIME DESC;
- 查看失败作业的详细错误信息
SELECT d.SESSION_RECID, d.SESSION_STAMP, d.STATUS, o.OUTPUT
FROM V$RMAN_BACKUP_JOB_DETAILS d
JOIN V$RMAN_OUTPUT o ON (d.SESSION_RECID = o.SESSION_RECID AND d.SESSION_STAMP = o.SESSION_STAMP)
WHERE d.STATUS = 'FAILED'
AND o.OUTPUT LIKE '%RMAN-%' -- 过滤出错误消息
ORDER BY o.RECORD_ID;
- 按备份类型分析平均性能和大小
SELECT INPUT_TYPE,
COUNT(*) AS JOB_COUNT,
ROUND(AVG(INPUT_BYTES/1024/1024/1024), 2) AS AVG_INPUT_GB,
ROUND(AVG(OUTPUT_BYTES/1024/1024/1024), 2) AS AVG_OUTPUT_GB,
ROUND(AVG(OUTPUT_BYTES_PER_SEC/1024/1024), 2) AS AVG_THROUGHPUT_MBPS
FROM V$RMAN_BACKUP_JOB_DETAILS
WHERE STATUS = 'COMPLETED'
GROUP BY INPUT_TYPE
ORDER BY AVG_INPUT_GB DESC;
- 生成简单的备份报告
SELECT TO_CHAR(START_TIME, 'YYYY-MM-DD') AS BACKUP_DATE,
INPUT_TYPE,
COUNT(*) AS NUMBER_OF_JOBS,
SUM(ROUND(INPUT_BYTES/1024/1024/1024, 2)) AS TOTAL_INPUT_GB
FROM V$RMAN_BACKUP_JOB_DETAILS
WHERE START_TIME > SYSDATE - 30 -- 过去30天
GROUP BY TO_CHAR(START_TIME, 'YYYY-MM-DD'), INPUT_TYPE
ORDER BY BACKUP_DATE DESC, TOTAL_INPUT_GB DESC;
💎 总结
V$RMAN_BACKUP_JOB_DETAILS 是 Oracle DBA 进行备份管理的“仪表盘”视图。它的核心价值在于:
- 集中化监控:提供了一个统一的视图来审查所有已完成备份作业的结果、性能和效率。
- 数据驱动决策:通过量化的数据(吞吐量、压缩率、耗时)来指导备份策略的优化和硬件资源的规划。
- 快速故障定位:与
V$RMAN_OUTPUT视图配合,可以快速从宏观摘要下钻到具体的错误细节,极大地缩短了故障诊断时间。 - 合规与审计:提供了生成备份合规性报告所需的核心数据,证明备份作业已按计划成功执行。
定期查询和分析此视图是保障数据库备份健康状态的最佳实践,是每个 Oracle DBA 必须掌握的核心技能。
欢迎关注我的公众号《IT小Chen》
1583

被折叠的 条评论
为什么被折叠?



