
好的,我们来对 Oracle 19C 数据库中的 V$BACKUP_REDOLOG 动态性能视图进行一次全面、深入的解析。
1. 视图概述与核心作用
V$BACKUP_REDOLOG 是一个动态性能视图,它专门为 RMAN (Recovery Manager) 服务。它的主要作用是显示和控制那些正在被 RMAN 备份的归档重做日志(Archived Redo Logs)的信息。
当 RMAN 启动一个备份作业(尤其是使用 BACKUP ARCHIVELOG ... 命令或备份中包含归档日志时),RMAN 需要知道哪些日志文件已经被选为备份目标、它们的备份状态如何(例如,正在备份、已完成备份、备份失败),以及它们属于哪个备份集。
核心作用可以概括为:
- 监控进度:实时查看哪些归档日志正在被 RMAN 进程读取和备份。
- 故障诊断:如果归档日志备份失败,可以通过此视图查看相关日志文件的信息,辅助排查问题(如文件丢失、损坏、I/O 错误等)。
- 内部管理:RMAN 内部使用此视图来管理和协调多个通道(Channel)对归档日志的并发备份操作。
2. 使用场景
-
长时间运行的备份作业监控:
当一个非常大的归档日志备份任务运行时,DBA 可以查询此视图来确认 RMAN 当前正在读取哪个具体的归档日志文件(SEQUENCE#),从而了解备份进度。 -
备份挂起或性能问题诊断:
如果发现BACKUP ARCHIVELOG命令似乎卡住了,查询此视图可以验证 RMAN 是否正在处理某个特定的日志文件。如果某个文件的STATUS长时间是ACTIVE,可能意味着该文件所在的存储存在性能瓶颈或损坏。 -
备份失败后的调查:
如果备份作业失败,错误信息可能只提示“无法备份某个归档日志”。查询V$BACKUP_REDOLOG(结合V$BACKUP_ASYNC_IO或V$BACKUP_SYNC_IO)可以获取更详细的文件标识(THREAD#,SEQUENCE#,RECID),从而精准定位到出问题的文件,进而检查其是否存在、权限是否正确或是否已损坏。
3. 字段详细含义
以下是 V$BACKUP_REDOLOG 视图中关键字段的解释:
| 字段名 | 数据类型 | 含义说明 |
|---|---|---|
| SID | NUMBER | 正在进行备份操作的 服务器进程的标识符 (Server ID)。这与 V$PROCESS.ADDR 关联,可用于关联到具体的会话。 |
| RECID | NUMBER | 归档重做日志的内部记录标识符。这是控制文件中日志记录的唯一ID。 |
| STAMP | NUMBER | 归档重做日志的时间戳标识符。与 RECID 共同唯一标识一个日志文件。 |
| THREAD# | NUMBER | 重做线程编号。在单实例环境中通常为 1,在 RAC 环境中对应生成该日志的实例线程号。 |
| SEQUENCE# | NUMBER | 归档重做日志在它所属线程内的序列号。这是定位日志最常用的标识之一。 |
| LEVEL | NUMBER | 备份级别。对于归档日志,此值始终为 0。此字段用于数据文件备份(0=全量,1=增量)。 |
| STATUS | VARCHAR2(16) | 备份的当前状态。主要值有: • NOT STARTED:已列入备份集但尚未被服务器进程处理。• ACTIVE:服务器进程正在读取该归档日志文件。• COMPLETED:该归档日志已成功备份。• FAILED:备份该归档日志时发生错误。 |
| BACKUP_SET | NUMBER | 此归档日志所属的备份集(Backup Set)的编号。可以与 V$BACKUP_SET 视图关联。 |
| PIECE# | NUMBER | 此归档日志所在的备份片(Backup Piece)在备份集中的编号。 |
| BYTES | NUMBER | 该归档日志文件的大小(以字节为单位)。 |
| USED | VARCHAR2(3) | 指示该备份是否在活动的数据库恢复操作中被使用。 |
| HANDLE | VARCHAR2(513) | 备份片(Backup Piece)的文件名。 |
| TAG | VARCHAR2(32) | 用户或 RMAN 分配给此备份的标签(Tag)。 |
| COMPLETION_TIME | DATE | 备份完成的时间。对于状态为 ACTIVE 或 NOT STARTED 的记录,此值为空。 |
| ELAPSED_SECONDS | NUMBER | 备份此归档日志所花费的总时间(秒)。 |
| DEVICE_TYPE | VARCHAR2(17) | 用于备份的设备类型(例如:'DISK', 'SBT_TAPE')。 |
| BUFFERS | NUMBER | (内部使用)用于备份该文件的缓冲区数量。 |
| BUFFER_SIZE | NUMBER | (内部使用)每个备份缓冲区的大小(字节)。 |
| OPEN_TIME | DATE | 服务器进程开始读取该归档日志文件的时间。 |
| CLOSE_TIME | DATE | 服务器进程结束读取该归档日志文件的时间。 |
4. 相关视图与基表
-
相关动态性能视图:
V$ARCHIVED_LOG:显示控制文件中所有已知的归档重做日志记录,无论它们是否被备份过。V$BACKUP_SET:显示已完成的备份集的详细信息。V$BACKUP_PIECE:显示备份片的详细信息。V$BACKUP_ASYNC_IO/V$BACKUP_SYNC_IO:提供更底层的 I/O 性能统计信息,可用于诊断备份速度慢的问题。这些视图可以通过SID等字段与V$BACKUP_REDOLOG关联。V$SESSION/V$PROCESS:可以通过SID关联,查看执行备份操作的服务器进程对应的会话信息。
-
**底层基表(X表)∗∗:‘V表)**: `V表)∗∗:‘VBACKUP_REDOLOG` 的数据主要来源于内存中的动态数据结构,但其元数据和控制信息最终源于控制文件。其底层关联的 **X表∗∗通常是∗∗不公开∗∗的,Oracle也不建议用户直接查询。这些X表** 通常是**不公开**的,Oracle 也不建议用户直接查询。这些 X表∗∗通常是∗∗不公开∗∗的,Oracle也不建议用户直接查询。这些X 表的结构和名称可能随版本变化。
从功能上讲,它与控制文件中的以下内部记录结构相关:X$KCCAL:可能与归档日志记录有关。X$KCCBF:可能与备份文件记录有关。
重要提示:直接查询 X$ 表是危险且不受支持的,仅供 Oracle 内部开发使用。所有诊断信息都应通过公开的 V$ 视图获取。
5. 相关底层原理
-
控制文件的作用:
RMAN 的元数据(包括备份记录)主要存储在数据库的控制文件中。当 RMAN 执行备份时,它会首先在控制文件中创建一条记录,表示一个备份集或备份片将要被创建。 -
服务器进程(Server Process):
当 RMAN 分配通道(Channel)后,会启动一个服务器进程来执行实际的 I/O 操作。这个进程负责读取数据文件或归档日志文件。 -
V$BACKUP_REDOLOG的填充:
当一个服务器进程开始处理一个归档日志文件时,它会在一个共享内存区域(SGA 的一部分)中更新其状态。V$BACKUP_REDOLOG视图就是这个内存结构的对外体现。这就是为什么它能提供实时的备份状态。- 进程开始读文件:将状态置为
ACTIVE,记录OPEN_TIME。 - 进程读完文件:将状态置为
COMPLETED,记录CLOSE_TIME和COMPLETION_TIME。 - 进程遇到错误:将状态置为
FAILED。
- 进程开始读文件:将状态置为
-
持久化:
备份成功完成后,这些临时的工作信息会从内存中清除,而最终的、成功的备份元数据(如哪些日志包含在哪个备份集中)则会持久化地写入控制文件(或恢复目录),并可通过V$BACKUP_SET、V$BACKUP_PIECE和V$ARCHIVED_LOG(BACKUP_COUNT字段会增加)等视图查询。
6. 相关知识点介绍
- RMAN 架构:理解通道进程、服务器进程与控制文件/RMAN 仓库的交互。
- 归档日志管理:数据库必须处于
ARCHIVELOG模式,且归档日志是恢复的关键组成部分。 - 备份集 vs. 镜像拷贝:
V$BACKUP_REDOLOG只与备份集方式的备份相关,因为镜像拷贝(COPY命令)不创建备份集结构。 - 控制文件自动备份:虽然不直接相关,但控制文件自动备份确保了包括备份记录在内的元数据本身也被安全地备份了。
7. 常用查询 SQL
1. 查看当前正在进行的归档日志备份:
SELECT sid, sequence#, thread#, status, device_type,
open_time, elapsed_seconds, bytes/1024/1024 AS size_mb
FROM v$backup_redolog
WHERE status = 'ACTIVE';
2. 查看本次 RMAN 会话中所有要备份的归档日志的状态:
SELECT sid, sequence#, thread#, status, device_type,
TO_CHAR(open_time, 'HH24:MI:SS') AS start_time,
elapsed_seconds,
bytes/1024/1024 AS size_mb,
backup_set,
tag
FROM v$backup_redolog
ORDER BY status, thread#, sequence#;
3. 结合 V$SESSION 查看是哪个客户端会话在发起备份:
SELECT br.sid, s.serial#, s.client_info, s.program,
br.sequence#, br.status, br.bytes/1024/1024 AS size_mb
FROM v$backup_redolog br
JOIN v$session s ON (br.sid = s.sid);
4. 查找备份失败的归档日志(用于故障排除):
SELECT recid, stamp, thread#, sequence#, status
FROM v$backup_redolog
WHERE status = 'FAILED';
查询到失败的 SEQUENCE# 后,可以去归档目标路径下检查文件 arch_<SEQUENCE#>.arc(名称模式可能不同)是否存在、是否可读。
5. 监控备份进度(估算剩余时间):
这个比较复杂,需要结合历史速度估算。但查看当前正在备份的文件和已耗时可以提供一些 insight:
SELECT sid, sequence#,
elapsed_seconds,
bytes/1024/1024 AS total_mb,
-- 一个非常粗略的估算:假设读取速度是线性的
(bytes / elapsed_seconds) / 1024 / 1024 AS current_mb_per_sec
FROM v$backup_redolog
WHERE status = 'ACTIVE';
希望这份详细的解释能帮助您彻底理解 V$BACKUP_REDOLOG 视图。
欢迎关注我的公众号《IT小Chen》
1363

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



