
好的,我们来对 Oracle 19C 数据库中的 V$BACKUP_SET_SUMMARY 动态性能视图进行一次全面、深入的解析。
与之前分析的 V$BACKUP_SET_DETAILS 类似,V$BACKUP_SET_SUMMARY 也不是一个官方标准化的视图。在 Oracle 官方文档中通常找不到它的定义。它是一个非公开的、内部使用的视图,其存在和结构是 Oracle 实现的一部分,可能会在不同版本或补丁集中发生变化。
然而,在实践中,这个视图通常存在,并且如其名称所示,它提供了一个比 V$BACKUP_SET 更聚合和摘要化的视角,旨在让 DBA 快速获取备份活动的概要信息,而无需进行复杂的 GROUP BY 操作。
1. 视图概述与核心作用
V$BACKUP_SET_SUMMARY 视图的主要作用是提供备份集的高层级摘要信息。它将 V$BACKUP_SET 和可能的其他视图中的记录,按照某些关键维度(如时间、类型、设备)进行分组聚合,展示统计信息如总数量、总大小、最大/最小大小等。
核心作用可以概括为:
- 快速概览:无需编写复杂查询,快速了解指定时间段内的备份活动概况,例如“昨天一共产生了多少GB的备份?”。
- 趋势分析:通过按时间维度(如天、周)分组,轻松识别备份数据量的增长趋势。
- 资源规划:基于历史摘要数据,预测未来的备份存储需求(磁盘或磁带容量规划)。
- 合规性快照:快速生成摘要报告,用于验证备份策略是否被严格执行(例如,每天是否都成功生成了备份)。
重要警告:再次强调,这是一个非官方、未文档化的视图。其结构、字段甚至存在性都不能得到保证。它非常适合交互式、手动的即席查询(ad-hoc query),但绝不能用于构建关键的、自动化的监控或告警脚本,因为这些脚本可能在未来的 Oracle 版本中突然失效。
2. 使用场景
-
每日备份健康检查:
DBA 在早晨可以快速查询此视图,查看前一天晚上的备份作业是否成功生成预期数量和大小的备份集,对备份活动有一个快速的“健康脉搏”检查。 -
容量趋势报告:
通过按周或月进行分组查询,可以生成简单的图表,显示备份数据量的变化趋势,从而向管理层提供存储扩容需求的依据。 -
备份策略有效性评估:
比较不同备份类型(全量 vs. 增量)产生的数据量,评估当前增量备份策略的有效性(例如,Level 1 增量备份的大小是否远小于 Level 0)。 -
设备性能对比:
如果使用了多种设备(如本地磁盘和网络附加存储),可以比较它们对应的备份集的平均大小和吞吐率,评估其性能差异。
3. 字段详细含义 (基于常见实现推测)
以下字段是基于该视图常见用途的推测,并非来自官方文档:
| 字段名 (可能) | 数据类型 | 含义说明 (推断和常见用途) |
|---|---|---|
| BACKUP_TYPE | VARCHAR2(1) | 备份类型摘要: • D : 数据文件备份• L : 归档日志备份• I : 增量备份 (可能更细分为 Level) • 也可能是 ALL 表示所有类型的汇总。 |
| DEVICE_TYPE | VARCHAR2(17) | 设备类型的摘要(DISK, SBT_TAPE)。可能有一行表示所有设备的汇总。 |
| TIME_WINDOW | VARCHAR2(64) | 时间窗口。这是关键字段,指示该摘要行所代表的时间范围。例如: • LAST_24_HOURS• LAST_7_DAYS• CURRENT_MONTH• PREVIOUS_MONTH |
| START_TIME | DATE | 该摘要时间窗口的开始时间。 |
| END_TIME | DATE | 该摘要时间窗口的结束时间。 |
| BACKUP_COUNT | NUMBER | 在该时间窗口和设备类型下,备份集的总数量。 |
| TOTAL_BYTES | NUMBER | 在该时间窗口和设备类型下,所有备份集的总大小(字节)。 |
| AVG_BYTES | NUMBER | 在该时间窗口和设备类型下,每个备份集的平均大小(字节)。 |
| MAX_BYTES | NUMBER | 在该时间窗口和设备类型下,最大的单个备份集的大小(字节)。 |
| MIN_BYTES | NUMBER | 在该时间窗口和设备类型下,最小的单个备份集的大小(字节)。 |
| AVG_ELAPSED_SECONDS | NUMBER | 在该时间窗口和设备类型下,创建备份集的平均耗时(秒)。 |
| STATUS | VARCHAR2(8) | 状态的摘要(可能只显示 AVAILABLE 的,或者包含分组统计)。 |
| TAG_PATTERN | VARCHAR2(32) | 可能用于按标签模式分组的摘要(不太常见)。 |
4. 相关视图与基表
-
数据来源视图:
V$BACKUP_SET_SUMMARY的数据完全来源于其他标准视图的实时聚合。它不直接拥有自己的基表。它的主要数据源是:V$BACKUP_SET:这是最核心的数据源,提供了备份集的基本记录。V$BACKUP_PIECE:可能用于聚合更准确的大小信息(虽然V$BACKUP_SET.BYTES通常就足够了)。
-
功能相关的官方视图:
V$RMAN_BACKUP_JOB_DETAILS:这是一个官方的、文档化的作业级别摘要视图。它提供了每个 RMAN 作业的输入/输出字节、状态、开始/结束时间。它的粒度是“作业”,而V$BACKUP_SET_SUMMARY的粒度是“时间窗口”和“类型”。V$BACKUP_FILES(19c+):一个全面的视图,可以用于通过 SQL 查询生成自定义的摘要报告,功能更强大且稳定。DBA_HIST_*视图:如果启用了 AWR,DBA_HIST_BACKUP_SET_DETAILS和DBA_HIST_BACKUP_JOB_DETAILS等视图提供了历史持久化的备份信息,非常适合做长期趋势分析,远比一个内存中的非标准视图可靠。
-
**底层基表(X表)∗∗:作为一个聚合视图,它很可能基于‘V表)**: 作为一个聚合视图,它很可能基于 `V表)∗∗:作为一个聚合视图,它很可能基于‘VBACKUP_SET
所依赖的相同底层 X$ 内存结构(如X$KCCBS`),只是查询时动态地进行了分组和聚合计算。没有独立的基表。
5. 相关底层原理
-
物化视图 vs. 动态聚合:
V$BACKUP_SET_SUMMARY很可能不是一个物化视图。它不是在后台定期刷新存储的聚合数据。相反,它极有可能是一个动态视图,这意味着每次查询它时,它都会实时地对底层V$BACKUP_SET等视图执行一个聚合查询。 -
查询重写:
这个视图的存在本质上是 Oracle 提供的一种“便利功能”或“语法糖”。当你查询V$BACKUP_SET_SUMMARY时,Oracle 可能会在内部将其重写为一个类似于下面的查询:SELECT ... FROM ( SELECT backup_type, device_type, TRUNC(completion_time) time_window, -- 或其他分组逻辑 COUNT(*) backup_count, SUM(bytes) total_bytes, ... FROM v$backup_set WHERE status = 'AVAILABLE' GROUP BY backup_type, device_type, TRUNC(completion_time) )这种重写对用户是透明的。
-
性能与局限性:
- 优点:简化了用户查询,提供了开箱即用的摘要。
- 缺点:由于是动态聚合,如果底层
V$BACKUP_SET记录非常多,查询此视图可能会有可察觉的性能开销。它的聚合维度是固定的,不如自己编写GROUP BY查询灵活。
6. 相关知识点介绍
- 聚合查询(GROUP BY):理解这个视图的核心是理解 SQL 的
GROUP BY子句以及聚合函数(COUNT,SUM,AVG,MAX,MIN)。 - RMAN 报告命令:Oracle 提供了更强大的官方工具来生成摘要报告:
REPORT NEED BACKUP:报告需要备份的文件。REPORT OBSOLETE:报告过时的备份。LIST BACKUP SUMMARY:这是一个 RMAN 命令,提供了非常类似于V$BACKUP_SET_SUMMARY的终端输出,是获取备份摘要的官方推荐方法。
- 时间序列分析:使用摘要视图进行趋势分析是时间序列分析的一种简单形式。
7. 常用查询 SQL (结构可能变化,务必先DESCRIBE)
1. 快速查看不同时间窗口的备份摘要:
SELECT time_window, device_type, backup_type,
backup_count,
ROUND(total_bytes / 1024 / 1024 / 1024, 2) AS total_gb,
ROUND(avg_bytes / 1024 / 1024 / 1024, 2) AS avg_gb
FROM v$backup_set_summary
ORDER BY time_window, device_type;
2. 比较磁盘和磁带备份的体量:
SELECT device_type,
SUM(backup_count) AS total_sets,
ROUND(SUM(total_bytes) / 1024 / 1024 / 1024, 2) AS total_gb
FROM v$backup_set_summary
GROUP BY device_type;
3. 查看最新时间窗口(如最近24小时)的备份详情:
SELECT *
FROM v$backup_set_summary
WHERE time_window = 'LAST_24_HOURS'; -- 根据实际字段值修改
最重要的一步:
在运行任何查询之前,必须在你的环境中检查该视图的实际结构:
DESC V$BACKUP_SET_SUMMARY
根据 DESCRIBE 命令输出的实际列名,修改上述示例查询。如果该视图不存在,请不要惊讶,这完全符合其非标准的特性。在这种情况下,应使用官方的 V$RMAN_BACKUP_JOB_DETAILS 或自行编写基于 V$BACKUP_SET 的 GROUP BY 查询来达到相同目的。
欢迎关注我的公众号《IT小Chen》
1354

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



