
以下是针对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_TIME | DATE | 最早备份的归档日志的生成时间 |
NEXT_TIME | DATE | 最后备份的归档日志的生成时间 |
COUNT | NUMBER | 已备份的归档日志文件总数 |
BYTES | NUMBER | 已备份的归档日志总大小(字节) |
📌 注:
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. 底层原理
- 数据来源:
- RMAN备份归档日志时,在控制文件中记录元数据(SCN范围、时间戳、大小等)。
V$BACKUP_ARCHIVELOG_SUMMARY聚合这些元数据,按线程(THREAD#)分组统计。
- 更新机制:
- 备份成功后实时更新控制文件。
- 控制文件循环复用区存储,历史记录可能被覆盖(受
CONTROL_FILE_RECORD_KEEP_TIME参数控制)。
- 内存结构:
- 数据从SGA中的动态性能结构(如
X$KRCALG)动态加载,无磁盘I/O开销。
- 数据从SGA中的动态性能结构(如
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_LOG和V$BACKUP_SET进行深度分析。
通过合理利用此视图,可显著提升备份可靠性和恢复效率。
欢迎关注我的公众号《IT小Chen》
Oracle 19c V$BACKUP_ARCHIVELOG_SUMMARY视图解析
593

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



