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

在这里插入图片描述
好的,我们来对 Oracle 19C 数据库中的 V$BACKUP_SET 动态性能视图进行一次全面、深入的解析。


1. 视图概述与核心作用

V$BACKUP_SET 是一个至关重要的动态性能视图,它提供了在数据库控制文件中注册的所有备份集(Backup Set) 的元数据信息。备份集是 RMAN (Recovery Manager) 创建的备份输出的主要形式,它是一个逻辑结构,包含一个或多个物理文件(称为备份片,Backup Piece)。

核心作用可以概括为:

  • 备份目录与清单:充当所有已完成备份集的主目录,DBA 可以快速查看数据库中存在哪些备份。
  • 备份属性查询:提供每个备份集的详细属性,如备份类型(全量/增量)、级别、时间、大小、设备类型等。
  • 恢复规划:在执行恢复操作前,DBA 通过此视图确定可用哪些备份集来进行恢复。
  • 备份生命周期管理:与 DELETE OBSOLETECROSSCHECK 等命令结合使用,用于验证和管理备份的保留与过期状态。
  • 审计与报告:生成备份报告,用于合规性审计或容量规划。

2. 使用场景

  1. 恢复前的情报收集
    当需要执行时间点恢复时,DBA 会查询此视图,找到在目标时间点之前创建的、包含所需数据文件或归档日志的备份集。

  2. 日常备份验证
    在备份脚本运行后,通过查询此视图确认备份作业是否成功创建了预期的备份集,并检查其状态 (STATUS) 是否为 COMPLETED 而非 EXPIRED

  3. 诊断备份问题
    如果备份失败或备份集不可用,此视图可以帮助定位问题备份集,进而使用 CROSSCHECK 命令验证备份片文件是否实际存在于磁盘或磁带库上。

  4. 存储空间管理
    通过汇总 BYTES 字段,可以计算不同时间段内备份集占用的总空间,从而进行容量趋势分析和规划。

  5. 清理过时备份
    在运行 DELETE OBSOLETE 命令后,可以查询此视图确认标记为 EXPIRED 的备份集是否已被正确清理。


3. 字段详细含义

以下是 V$BACKUP_SET 视图中关键字段的解释:

字段名数据类型含义说明
SET_STAMPNUMBER备份集唯一标识符的一部分。与 SET_COUNT 共同组成备份集的唯一ID。这是一个内部时间戳。
SET_COUNTNUMBER备份集唯一标识符的另一部分。在同一个 SET_STAMP 下,SET_COUNT 是递增的。SET_STAMPSET_COUNT 共同唯一标识一个备份集
BACKUP_TYPEVARCHAR2(1)备份类型
D : 数据文件全量备份 (Full)
I : 数据文件增量备份 (Incremental)
L : 归档日志备份 (Archivelog)
U : 控制文件备份 (Controlfile)
G : 归档日志删除记录 (不包含实际文件)
INCREMENTAL_LEVELNUMBER增量备份级别
0 : 增量级别 0 备份(基础备份)
1 : 增量级别 1 备份(差异或累积)
NULL : 非增量备份(如全备、归档日志备份)
DEVICE_TYPEVARCHAR2(17)创建备份集所使用的设备类型
DISK : 磁盘
SBT_TAPE : 磁带(或第三方介质管理库)
COMPLETION_TIMEDATE备份集完成的时间。这是最重要的时间戳之一,用于基于时间的恢复和报告。
ELAPSED_SECONDSNUMBER创建整个备份集所花费的总时间(秒)
STATUSVARCHAR2(8)备份集的状态
AVAILABLE : 备份集可用且未被删除。
EXPIRED : 备份集已被 CROSSCHECK 命令标记为过期(在介质上找不到对应的备份片文件)。
DELETED : 备份集已被 DELETE 命令显式删除。
KEEPVARCHAR2(8)是否应用了保持策略
NO : 备份集受配置的保留策略管理。
YES : 备份集已被 BACKUP ... KEEP 命令豁免于保留策略,会长期保留。
LOGS : (较少见) 仅保持归档日志。
KEEP_UNTILDATE如果 KEEP 选项为 YES,此字段指定该备份集的保持到期时间
KEEP_OPTIONSVARCHAR2(10)保持选项,如 BACKUP_LOGS 等。
CONTROLFILE_INCLUDEDVARCHAR2(3)备份集中是否包含当前控制文件的快照
YES
NO
OPTIMIZEDVARCHAR2(3)备份是否使用了优化功能(如增量备份的块更改跟踪)。
BYTESNUMBER备份集的总大小(字节)
BLOCK_SIZENUMBER备份集中块的字节大小。
TAGVARCHAR2(32)用户或 RMAN 分配给此备份集的标签(Tag)
RECIDNUMBER(已废弃) 为了向后兼容而保留,请使用 SET_STAMPSET_COUNT
STAMPNUMBER(已废弃) 为了向后兼容而保留,请使用 SET_STAMPSET_COUNT

4. 相关视图与基表

  • 相关动态性能视图

    • V$BACKUP_PIECE:显示构成备份集的物理备份片的详细信息(如文件名、路径、状态)。通过 SET_STAMPSET_COUNTV$BACKUP_SET 关联。
    • V$BACKUP_FILES:19c 引入的更强大的视图,提供了备份集和备份片的统一视图,信息更全面。
    • V$BACKUP_DATAFILE:显示备份集中包含的数据文件的详细信息。
    • V$BACKUP_REDOLOG:显示备份集中包含的归档日志的详细信息(主要用于监控进行中的备份)。
    • V$BACKUP_SPFILE:显示备份集中包含的服务器参数文件(SPFILE) 的详细信息。
    • V$BACKUP_CORRUPTION:记录在备份过程中检测到的损坏块信息。
    • V$DATABASE_BLOCK_CORRUPTION:记录在数据库中检测到的损坏块,可能与备份相关。
  • 底层基表(X表)∗∗:‘V表)**: `V表)VBACKUP_SET` 的数据来源于控制文件。其底层关联的 X$表不公开**的,Oracle 不提供官方支持或文档。这些表是控制文件内存映像的动态性能接口。
    从功能上讲,它与控制文件中的以下内部记录结构相关:

    • X$KCCBS:可能与备份集记录有关。
    • X$KCCBP:可能与备份片记录有关。
      重要警告绝对不要直接查询或修改 X$ 表。这可能导致数据库崩溃或数据损坏,且不受 Oracle 支持。所有诊断都必须通过公开的 V$ 视图进行。

5. 相关底层原理

  1. 控制文件作为 RMAN 仓库
    默认情况下,RMAN 的元数据(备份集、备份片、文件记录等)主要存储在目标数据库的控制文件中。每个备份操作的成功完成都会在控制文件中创建一条新记录。

  2. 记录创建过程

    • 当 RMAN 开始执行 BACKUP 命令时,它会先在控制文件中分配一个备份集记录槽位。
    • 随着备份的进行,详细信息(如包含的文件、大小、完成时间)被填充到这条记录中。
    • 备份成功完成后,记录被标记为 COMPLETED(在 V$BACKUP_SET 中体现为 STATUS='AVAILABLE')。
    • 如果 RMAN 进程异常终止,控制文件中可能会留下不完整的记录,这些记录可能会被后续的 RMAN 会话清理。
  3. 状态管理

    • CROSSCHECK 命令:该命令会检查控制文件中的记录(V$BACKUP_SET)是否在磁盘或磁带上存在对应的物理文件。如果找不到,就将 STATUS 更新为 EXPIRED
    • DELETE EXPIRED 命令:该命令会从控制文件中删除所有 STATUS='EXPIRED' 的记录。
    • DELETE BACKUP 命令:该命令会先删除物理文件,然后将控制文件中的记录标记为 DELETED

6. 相关知识点介绍

  • 备份集 vs. 镜像拷贝:RMAN 可以创建备份集(多个文件打包到一个或多个备份片中,支持压缩和增量)或镜像拷贝(文件的逐位副本)。V$BACKUP_SET 只管理备份集。镜像拷贝由 V$DATAFILE_COPYV$ARCHIVED_LOG_COPY 管理。
  • 增量备份策略:理解 INCREMENTAL_LEVEL 字段依赖于对增量备份(Level 0 和 Level 1)以及差异(DIFFERENTIAL)和累积(CUMULATIVE)策略的理解。
  • 保留策略(Retention Policy)KEEP 字段直接与配置的保留策略(REDUNDANCY 或 RECOVERY WINDOW)以及 KEEP FOREVER/KEEP UNTIL 命令相关。
  • 块更改跟踪(Block Change Tracking)OPTIMIZED 字段为 YES 通常意味着使用了块更改跟踪功能,从而极大地加快了增量备份的速度。

7. 常用查询 SQL

1. 列出所有可用的备份集(基本信息):

SELECT set_stamp, set_count, backup_type, incremental_level,
       device_type, TO_CHAR(completion_time, 'YYYY-MM-DD HH24:MI:SS') AS completion_time,
       ROUND(bytes/1024/1024/1024, 2) AS size_gb, status, tag
FROM v$backup_set
WHERE status = 'AVAILABLE'
ORDER BY completion_time DESC;

2. 查找最近的数据库全量备份:

SELECT set_stamp, set_count, device_type,
       TO_CHAR(completion_time, 'YYYY-MM-DD HH24:MI:SS') AS completion_time,
       ROUND(bytes/1024/1024/1024, 2) AS size_gb, tag
FROM v$backup_set
WHERE backup_type = 'D' -- Datafile full backup
AND incremental_level IS NULL -- Not incremental
AND status = 'AVAILABLE'
ORDER BY completion_time DESC;

3. 查看备份集的详细信息及其对应的备份片:

SELECT bs.set_stamp, bs.set_count, bp.piece#,
       bp.handle, bp.bytes AS piece_bytes,
       bs.bytes AS set_bytes, bs.tag
FROM v$backup_set bs
JOIN v$backup_piece bp ON (bs.set_stamp = bp.set_stamp AND bs.set_count = bp.set_count)
WHERE bs.status = 'AVAILABLE'
AND bp.status = 'AVAILABLE'
ORDER BY bs.completion_time DESC, bp.piece#;

4. 检查过期的备份集(需要执行 CROSSCHECK):

SELECT set_stamp, set_count, backup_type, device_type, completion_time
FROM v$backup_set
WHERE status = 'EXPIRED';

5. 按周统计备份数据量(用于容量报告):

SELECT 
    TRUNC(completion_time, 'IW') AS week_start, --按周分组
    backup_type,
    device_type,
    COUNT(*) AS number_of_sets,
    ROUND(SUM(bytes)/1024/1024/1024, 2) AS total_gb
FROM v$backup_set
WHERE status = 'AVAILABLE'
GROUP BY TRUNC(completion_time, 'IW'), backup_type, device_type
ORDER BY week_start DESC;

6. 查找包含特定数据文件(file_id=5)的备份集:

SELECT DISTINCT bs.set_stamp, bs.set_count, bs.backup_type, bs.completion_time, bs.tag
FROM v$backup_set bs
JOIN v$backup_datafile bd ON (bs.set_stamp = bd.set_stamp AND bs.set_count = bd.set_count)
WHERE bd.file# = 5
AND bs.status = 'AVAILABLE'
ORDER BY bs.completion_time DESC;

欢迎关注我的公众号《IT小Chen

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值