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

Oracle 19c V$BACKUP_ARCHIVELOG_SUMMARY视图解析

在这里插入图片描述
以下是针对Oracle 19c中 V$BACKUP_ARCHIVELOG_SUMMARY 动态性能视图的全面解析,涵盖作用、使用场景、字段含义、关联视图、底层原理及常用查询SQL。


1. 视图作用

V$BACKUP_ARCHIVELOG_SUMMARY 汇总了RMAN备份的归档日志信息,提供以下核心功能:

  • 📊 统计已备份的归档日志文件数量、大小及时间范围
  • ⏱️ 快速定位最后一次归档日志备份的时间点
  • 🔍 评估备份完整性(如是否存在未被备份的归档日志)
  • 💾 估算备份存储需求(基于历史备份量)

关键特性:数据源自控制文件,实时更新,无需访问恢复目录(若使用)。


2. 使用场景

  • 备份监控:检查归档日志备份是否按策略执行(如每日备份)。
  • 空间规划:分析归档日志备份增长趋势,调整存储分配。
  • 故障恢复:验证恢复所需归档日志是否全部备份。
  • 备份验证:结合 V$ARCHIVED_LOG 确认未被备份的日志。

3. 字段详解(Oracle 19c)

字段名数据类型描述
THREAD#NUMBER归档日志所属的线程号(RAC环境标识实例)
SEQUENCE#NUMBER已备份的归档日志的最高序列号(按线程分组)
FIRST_CHANGE#NUMBER当前线程中最早备份的归档日志的起始SCN
NEXT_CHANGE#NUMBER当前线程中最后备份的归档日志的结束SCN
FIRST_TIMEDATE最早备份的归档日志的生成时间
NEXT_TIMEDATE最后备份的归档日志的生成时间
COUNTNUMBER已备份的归档日志文件总数
BYTESNUMBER已备份的归档日志总大小(字节)

📌

  • SEQUENCE#已备份的最高序列号,可能存在未被备份的低序列号日志(需对比 V$ARCHIVED_LOG)。
  • FIRST_TIME/NEXT_TIME 是日志生成时间,非备份时间。

4. 相关视图与基表

关联视图
视图名称描述
V$BACKUP_SET备份集详细信息(包括备份类型、完成时间)
V$BACKUP_PIECE备份片物理文件信息
V$ARCHIVED_LOG所有归档日志信息(含是否已备份 BACKUP_COUNT 列)
RC_BACKUP_ARCHIVELOG_SUMMARY恢复目录中的等效视图(若使用恢复目录)
底层基表
  • X$KRCALG:动态性能表,存储归档日志备份摘要信息(内存结构,控制文件映射)。
  • X$KCCAL:归档日志链信息(关联控制文件)。

🔧 基表为Oracle内部结构,禁止直接查询,需通过 V$ 视图访问。


5. 底层原理

  1. 数据来源
    • RMAN备份归档日志时,在控制文件中记录元数据(SCN范围、时间戳、大小等)。
    • V$BACKUP_ARCHIVELOG_SUMMARY 聚合这些元数据,按线程(THREAD#)分组统计。
  2. 更新机制
    • 备份成功后实时更新控制文件。
    • 控制文件循环复用区存储,历史记录可能被覆盖(受 CONTROL_FILE_RECORD_KEEP_TIME 参数控制)。
  3. 内存结构
    • 数据从SGA中的动态性能结构(如 X$KRCALG)动态加载,无磁盘I/O开销。

6. 关键知识点

V$ARCHIVED_LOG 的关系
-- 检查未被备份的归档日志
SELECT thread#, sequence#, first_time, next_time 
FROM v$archived_log 
WHERE backup_count = 0  -- 未被备份
  AND archived = 'YES'  -- 已归档
  AND deleted = 'NO';   -- 未删除
备份保留策略影响
  • CONFIGURE RETENTION POLICY 决定归档日志备份的保留周期。
  • 过期的备份会从视图中移除(通过 DELETE OBSOLETE)。
归档日志删除策略
  • BACKUP ARCHIVELOG ALL DELETE INPUT 会在备份后删除源归档日志。
  • 视图仅统计备份元数据,不反映源文件是否存在。

7. 常用查询SQL

① 检查各实例归档日志备份情况(RAC环境)
SELECT thread#, 
       MIN(first_time) AS first_log_time,
       MAX(next_time) AS last_log_time,
       SUM(count) AS total_logs_backed_up,
       ROUND(SUM(bytes)/1024/1024) AS total_mb
FROM v$backup_archivelog_summary
GROUP BY thread#;
② 确认最后一次归档备份时间
SELECT MAX(next_time) AS last_backup_time 
FROM v$backup_archivelog_summary;
③ 按天统计归档日志备份量
SELECT TRUNC(next_time) AS backup_day,
       SUM(count) AS logs_per_day,
       ROUND(SUM(bytes)/1024/1024) AS mb_per_day
FROM v$backup_archivelog_summary
GROUP BY TRUNC(next_time)
ORDER BY backup_day DESC;
④ 识别备份缺口(需结合 V$ARCHIVED_LOG
-- 查找存在未备份日志的线程
SELECT al.thread#, 
       MIN(al.sequence#) AS min_unbacked_seq,
       MAX(al.sequence#) AS max_unbacked_seq
FROM v$archived_log al
LEFT JOIN v$backup_archivelog_summary bas 
  ON al.thread# = bas.thread#
WHERE al.backup_count = 0
  AND al.archived = 'YES'
  AND al.deleted = 'NO'
  AND (bas.sequence# IS NULL OR al.sequence# > bas.sequence#)
GROUP BY al.thread#;

总结

  • 核心价值:快速评估归档日志备份完整性,避免恢复时缺失日志。
  • 注意事项
    • 数据来自控制文件,定期备份控制文件至关重要。
    • SEQUENCE# 仅反映已备份的最高序列号,需主动监控备份连续性。
    • 结合 V$ARCHIVED_LOGV$BACKUP_SET 进行深度分析。

通过合理利用此视图,可显著提升备份可靠性和恢复效率。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值