
🗃️ Oracle 19C V$ARCHIVED_LOG 动态性能视图详解
1. 视图概述与核心作用
需要首先澄清一个重要事实:在标准的 Oracle 19C 文档和版本中,并不存在名为 V$RECOVERY_LOG 的公开动态性能视图。
经过深入核查 Oracle 19C 官方文档,您很可能是指 V$ARCHIVED_LOG 视图,这是 Oracle 数据库中用于管理和监控归档重做日志文件的关键动态性能视图。它包含了所有已知归档日志的元数据信息,是进行数据库恢复、备份和日志管理的基础。
2. 主要用途与应用场景
V$ARCHIVED_LOG 视图提供了数据库实例所知的所有归档日志文件的详细信息,主要应用于以下场景:
- 恢复操作监控:在进行数据库恢复时,确认所需的归档日志是否可用及其应用状态
- 备份验证与规划:验证归档日志是否已备份,规划备份保留策略
- 日志序列管理:跟踪日志序列的连续性,确保没有缺失的日志
- 空间管理:监控归档日志的生成速率和大小,为存储规划提供依据
- Data Guard 监控:在备库环境中监控日志传输和应用状态
3. 字段详解
以下是 V$ARCHIVED_LOG 视图的核心字段说明:
| 字段名称 | 类型 | 描述 |
|---|---|---|
| RECID | NUMBER | 归档日志记录的唯一标识符(恢复ID) |
| STAMP | NUMBER | 归档日志记录的时间戳标识符 |
| NAME | VARCHAR2(512) | 归档日志文件的完整路径和文件名 |
| DEST_ID | NUMBER | 归档目标地的ID(对应初始化参数中的编号) |
| THREAD# | NUMBER | 生成该归档日志的线程号(在RAC环境中重要) |
| SEQUENCE# | NUMBER | 日志序列号,唯一标识一个重做日志文件 |
| RESETLOGS_CHANGE# | NUMBER | 重置日志时的SCN值 |
| RESETLOGS_TIME | DATE | 重置日志的时间 |
| FIRST_CHANGE# | NUMBER | 归档日志中包含的第一个SCN(系统变更号) |
| FIRST_TIME | DATE | 第一个SCN对应的时间 |
| NEXT_CHANGE# | NUMBER | 下一个归档日志的第一个SCN |
| NEXT_TIME | DATE | 下一个SCN对应的时间 |
| BLOCKS | NUMBER | 归档日志中的块数 |
| BLOCK_SIZE | NUMBER | 块大小(字节) |
| CREATOR | VARCHAR2(7) | 创建者(ARCH - 归档进程;USER - 用户手动) |
| REGISTRAR | VARCHAR2(7) | 注册者(通常与CREATOR相同) |
| STANDBY_DEST | VARCHAR2(3) | 是否为备用目标(YES/NO) |
| ARCHIVED | VARCHAR2(3) | 是否已归档(YES/NO) |
| APPLIED | VARCHAR2(3) | 在Data Guard环境中是否已应用到备库 |
| DELETED | VARCHAR2(3) | 是否已被删除(YES/NO) |
| STATUS | VARCHAR2(1) | 状态(A - 可用;D - 已删除;U - 不可用) |
| COMPLETION_TIME | DATE | 归档完成的时间 |
4. 相关视图与基表
4.1 相关动态性能视图
| 视图名称 | 描述 |
|---|---|
V$LOG | 显示在线重做日志组的信息 |
V$LOGFILE | 显示在线重做日志文件成员的信息 |
V$LOG_HISTORY | 显示日志历史信息,比V$ARCHIVED_LOG更简洁 |
V$DATABASE | 显示数据库信息,包括当前日志序列号 |
V$RECOVERY_LOG | 注意:此视图不存在于标准Oracle中 |
V$ARCHIVE_DEST | 显示归档目标地的配置和状态 |
4.2 基表信息
V$ARCHIVED_LOG 视图基于控制文件中的内部数据结构:
- 数据来源:控制文件中的归档日志记录部分
- 底层结构:
X$表(如X$KCCAL) - 中间视图:
V_$ARCHIVED_LOG→GV_$ARCHIVED_LOG - 持久化:信息存储在控制文件中,实例重启后仍然存在
5. 底层原理与内部机制
5.1 归档日志生命周期
5.2 控制文件管理机制
Oracle使用控制文件来跟踪所有归档日志的元数据:
- 日志注册:当ARCn进程完成归档后,会在控制文件中注册新记录
- 状态更新:随着日志的生命周期,状态字段会相应更新
- 空间重用:控制文件中的归档日志记录空间会被循环使用
5.3 恢复过程中的作用
在数据库恢复期间,Oracle使用V$ARCHIVED_LOG中的信息来:
- 确定需要应用的日志序列
- 验证日志的连续性和完整性
- 定位物理日志文件的位置
6. 常用查询 SQL 示例
6.1 查看所有可用的归档日志
SELECT thread#, sequence#, name, first_time, next_time, blocks * block_size bytes
FROM v$archived_log
WHERE deleted = 'NO' AND status = 'A'
ORDER BY first_time;
6.2 检查归档日志序列的连续性
SELECT thread#, min(sequence#) min_seq, max(sequence#) max_seq,
count(*) total_logs, max(sequence#) - min(sequence#) + 1 expected,
CASE WHEN count(*) = max(sequence#) - min(sequence#) + 1
THEN 'CONTINUOUS'
ELSE 'GAPS DETECTED'
END status
FROM v$archived_log
WHERE deleted = 'NO'
GROUP BY thread#
ORDER BY thread#;
6.3 监控每日归档日志生成量
SELECT trunc(completion_time) as day,
count(*) as log_count,
round(sum(blocks * block_size) / 1024 / 1024 / 1024, 2) as total_gb,
round(avg(blocks * block_size) / 1024 / 1024, 2) as avg_mb
FROM v$archived_log
WHERE completion_time > sysdate - 30
GROUP BY trunc(completion_time)
ORDER BY day desc;
6.4 查找需要备份的归档日志
SELECT thread#, sequence#, name, completion_time, blocks * block_size bytes
FROM v$archived_log
WHERE deleted = 'NO'
AND backup_count = 0 -- 尚未备份
AND completion_time < sysdate - 1/24 -- 完成至少1小时
ORDER BY completion_time;
6.5 Data Guard 环境监控
SELECT thread#, sequence#, applied,
min(completion_time) over (partition by thread#) oldest_unapplied,
count(*) over (partition by thread#, applied) count_by_status
FROM v$archived_log
WHERE deleted = 'NO'
AND standby_dest = 'YES'
AND completion_time > sysdate - 1
ORDER BY thread#, sequence#;
7. 重要知识点与注意事项
7.1 关键概念
- 日志序列连续性:恢复操作要求连续的日志序列,任何缺口都会导致恢复失败
- SCN的重要性:FIRST_CHANGE#和NEXT_CHANGE#定义了日志中包含的SCN范围
- 多线程环境:在RAC环境中,每个线程有自己独立的日志序列
7.2 最佳实践
-
定期验证:定期检查日志连续性和可用性
-- 检查日志缺口 SELECT thread#, sequence# + 1 as gap_start, next_sequence# - 1 as gap_end FROM ( SELECT thread#, sequence#, lead(sequence#) over (partition by thread# order by sequence#) as next_sequence# FROM v$archived_log WHERE deleted = 'NO' ) WHERE next_sequence# > sequence# + 1; -
监控归档速率:设置预警机制监控异常日志生成
-- 监控最近1小时日志生成速率 SELECT thread#, count(*) logs_per_hour, round(sum(blocks * block_size) / 1024 / 1024, 2) mb_per_hour FROM v$archived_log WHERE completion_time > sysdate - 1/24 GROUP BY thread# ORDER BY thread#; -
空间管理:基于历史数据预测未来空间需求
-- 预测未来30天归档空间需求 SELECT round(avg(daily_gb) * 30, 2) as predicted_30day_gb FROM ( SELECT trunc(completion_time) as day, sum(blocks * block_size) / 1024 / 1024 / 1024 as daily_gb FROM v$archived_log WHERE completion_time > sysdate - 30 GROUP BY trunc(completion_time) );
7.3 故障排查
-
缺失日志处理:当发现日志序列不连续时
- 检查归档目标地是否可访问
- 验证ARCn进程是否正常运行
- 检查存储空间是否充足
-
性能问题:归档日志相关性能问题
- 监控日志切换频率:
SELECT count(*) FROM v$archived_log WHERE completion_time > sysdate - 1/24; - 检查归档目标地I/O性能
- 监控日志切换频率:
-
Data Guard 问题:归档日志未应用到备库
- 检查网络连通性
- 验证归档传输服务状态
- 监控归档日志gap情况
通过深入理解 V$ARCHIVED_LOG 视图,DBA 可以有效地管理数据库的恢复环境,确保归档日志的完整性和可用性,为数据库的备份和恢复提供可靠保障。
欢迎关注我的公众号《IT小Chen》
975

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



