面试宝典:介绍下Oracle数据库动态性能视图 V$BACKUP_SET_SUMMARY

在这里插入图片描述
好的,我们来对 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. 使用场景

  1. 每日备份健康检查
    DBA 在早晨可以快速查询此视图,查看前一天晚上的备份作业是否成功生成预期数量和大小的备份集,对备份活动有一个快速的“健康脉搏”检查。

  2. 容量趋势报告
    通过按周或月进行分组查询,可以生成简单的图表,显示备份数据量的变化趋势,从而向管理层提供存储扩容需求的依据。

  3. 备份策略有效性评估
    比较不同备份类型(全量 vs. 增量)产生的数据量,评估当前增量备份策略的有效性(例如,Level 1 增量备份的大小是否远小于 Level 0)。

  4. 设备性能对比
    如果使用了多种设备(如本地磁盘和网络附加存储),可以比较它们对应的备份集的平均大小和吞吐率,评估其性能差异。


3. 字段详细含义 (基于常见实现推测)

以下字段是基于该视图常见用途的推测,并非来自官方文档

字段名 (可能)数据类型含义说明 (推断和常见用途)
BACKUP_TYPEVARCHAR2(1)备份类型摘要
D : 数据文件备份
L : 归档日志备份
I : 增量备份 (可能更细分为 Level)
• 也可能是 ALL 表示所有类型的汇总。
DEVICE_TYPEVARCHAR2(17)设备类型的摘要DISK, SBT_TAPE)。可能有一行表示所有设备的汇总。
TIME_WINDOWVARCHAR2(64)时间窗口。这是关键字段,指示该摘要行所代表的时间范围。例如:
LAST_24_HOURS
LAST_7_DAYS
CURRENT_MONTH
PREVIOUS_MONTH
START_TIMEDATE该摘要时间窗口的开始时间。
END_TIMEDATE该摘要时间窗口的结束时间。
BACKUP_COUNTNUMBER在该时间窗口和设备类型下,备份集的总数量
TOTAL_BYTESNUMBER在该时间窗口和设备类型下,所有备份集的总大小(字节)
AVG_BYTESNUMBER在该时间窗口和设备类型下,每个备份集的平均大小(字节)
MAX_BYTESNUMBER在该时间窗口和设备类型下,最大的单个备份集的大小(字节)
MIN_BYTESNUMBER在该时间窗口和设备类型下,最小的单个备份集的大小(字节)
AVG_ELAPSED_SECONDSNUMBER在该时间窗口和设备类型下,创建备份集的平均耗时(秒)
STATUSVARCHAR2(8)状态的摘要(可能只显示 AVAILABLE 的,或者包含分组统计)。
TAG_PATTERNVARCHAR2(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_DETAILSDBA_HIST_BACKUP_JOB_DETAILS 等视图提供了历史持久化的备份信息,非常适合做长期趋势分析,远比一个内存中的非标准视图可靠。
  • **底层基表(X表)∗∗:作为一个聚合视图,它很可能基于‘V表)**: 作为一个聚合视图,它很可能基于 `V表):作为一个聚合视图,它很可能基于VBACKUP_SET所依赖的相同底层 X$ 内存结构(如X$KCCBS`),只是查询时动态地进行了分组和聚合计算。没有独立的基表。


5. 相关底层原理

  1. 物化视图 vs. 动态聚合
    V$BACKUP_SET_SUMMARY 很可能不是一个物化视图。它不是在后台定期刷新存储的聚合数据。相反,它极有可能是一个动态视图,这意味着每次查询它时,它都会实时地对底层 V$BACKUP_SET 等视图执行一个聚合查询。

  2. 查询重写
    这个视图的存在本质上是 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)
    )
    

    这种重写对用户是透明的。

  3. 性能与局限性

    • 优点:简化了用户查询,提供了开箱即用的摘要。
    • 缺点:由于是动态聚合,如果底层 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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值