
好的,我们来对 Oracle 19c 数据库中的 V$BACKUP_PIECE_DETAILS 动态性能视图进行深入、准确的解析。这个视图是 V$BACKUP_PIECE 的增强版,提供了更为详尽的元数据。
1. 视图作用
V$BACKUP_PIECE_DETAILS 提供 RMAN 备份片的详细、扩展的元数据信息。它继承了 V$BACKUP_PIECE 的所有字段,并增加了许多用于深度诊断和分析的关键字段。
其核心作用是:
- 深度诊断: 提供比
V$BACKUP_PIECE更丰富的细节,用于高级故障排除和性能分析。 - 精确恢复规划: 提供精确的 SCN 和时间范围,使 DBA 能够精确定位用于恢复的特定备份片。
- 备份内容分析: 揭示备份片内部包含的内容和其创建过程的详细信息。
- 性能审计: 通过额外的计时和大小字段,对备份操作的效率进行更细致的分析。
💡 核心价值: 它是
V$BACKUP_PIECE的“专家模式”,当标准视图提供的信息不足以解决问题时,V$BACKUP_PIECE_DETAILS提供了更深层次的洞察力。
2. 使用场景
- 高级恢复场景: 当需要将数据库恢复到一个非常精确的 SCN 或时间点时,使用该视图找到包含该时间点的确切备份片。
- 性能瓶颈分析: 分析备份操作的各个阶段(读取、压缩、写入)所花费的时间,定位瓶颈。
- 备份验证失败排查: 当
VALIDATE或RESTORE VALIDATE命令失败时,使用此视图的详细信息进行根因分析。 - 存储效率报告: 生成更详细的报告,显示压缩率、备份速度以及未压缩数据量。
- 审计与合规: 满足严格的合规性要求,需要记录备份操作的每个细节。
3. 字段详解 (Oracle 19c)
V$BACKUP_PIECE_DETAILS 包含了 V$BACKUP_PIECE 的所有字段,并增加了以下关键字段:
| 字段名 | 数据类型 | 描述 |
|---|---|---|
SESSION_RECID | NUMBER | 创建该备份片的 RMAN 会话的记录 ID。 |
SESSION_STAMP | NUMBER | 创建该备份片的 RMAN 会话的时间戳。与 SESSION_RECID 共同唯一标识一个会话。 |
START_TIME | DATE | 备份片创建开始的时间。 |
END_TIME | DATE | 备份片创建结束的时间。与 START_TIME 结合可以计算总耗时。 |
ELAPSED_SECONDS | NUMBER | 创建备份片所花费的总时间(秒)。 |
START_CHANGE# | NUMBER | 备份片中包含的最旧数据块的 SCN。 |
END_CHANGE# | NUMBER | 备份片中包含的最新数据块的 SCN。对于数据文件备份,这通常是 ABSOLUTE_FUZZY_CHANGE#。 |
DURATION | VARCHAR2(20) | 备份操作的持续时间(以人类可读的格式显示,如 +00 01:15:30)。 |
COMPRESSION_RATIO | NUMBER | 备份压缩率。计算方式为 未压缩大小 / 压缩后大小。值越高,压缩效果越好。 |
OPTIMIZED | VARCHAR2(3) | 指示备份是否经过优化(例如,跳过未使用的块或使用增量备份):YES / NO。 |
OUTPUT_BYTES | NUMBER | 输出到备份片的字节数(即备份片的最终大小)。应与 BYTES 字段相同。 |
OUTPUT_BYTES_PER_SEC | NUMBER | 备份片的写入速率(字节/秒)。 |
INPUT_BYTES | NUMBER | 从源文件读取的总字节数(压缩和优化前)。 |
INPUT_BYTES_PER_SEC | NUMBER | 从源文件读取数据的速率(字节/秒)。 |
INPUT_TYPE | VARCHAR2(30) | 输入数据的类型(例如,DATAFILE FULL,ARCHIVELOG)。 |
DELETED_INPUT_BYTES | NUMBER | (适用于归档日志备份)备份后删除的输入文件的总大小。 |
DELETED_INPUT_FILE_COUNT | NUMBER | (适用于归档日志备份)备份后删除的输入文件的数量。 |
📌 新增核心字段解读:
START_CHANGE#和END_CHANGE#:定义了备份片所包含数据的 SCN 范围。这是执行精确时间点恢复 (PITR) 的关键依据。INPUT_BYTES和OUTPUT_BYTES:用于计算压缩率 (INPUT_BYTES / OUTPUT_BYTES) 和节省的空间 (INPUT_BYTES - OUTPUT_BYTES)。INPUT_BYTES_PER_SEC和OUTPUT_BYTES_PER_SEC:用于区分读取瓶颈和写入瓶颈。如果输入速率很低,可能是源存储慢;如果输出速率很低,可能是目标存储慢或压缩消耗了大量CPU。SESSION_RECID和SESSION_STAMP:用于与V$RMAN_OUTPUT等视图关联,获取该备份操作生成的详细日志消息。
4. 相关视图与基表
关联视图
| 视图名称 | 描述 | 关系 |
|---|---|---|
V$BACKUP_PIECE | 备份片的基本信息。 | V$BACKUP_PIECE_DETAILS 是其超集,提供更多细节字段。两者通过 RECID 和 STAMP 关联。 |
V$BACKUP_SET | 备份集元数据。 | 通过 SET_STAMP 和 SET_COUNT 关联,获取备份集的逻辑信息。 |
V$RMAN_OUTPUT | 显示 RMAN 作业的详细消息日志。 | 通过 SESSION_RECID 和 SESSION_STAMP 与 V$BACKUP_PIECE_DETAILS 关联,可以查看创建该备份片时产生的所有输出消息,用于深度调试。 |
V$BACKUP_ASYNC_IO | 监控异步 I/O 操作。 | 可以提供备份过程中更详细的 I/O 性能指标,与 V$BACKUP_PIECE_DETAILS 的性能字段互补。 |
RC_BACKUP_PIECE_DETAILS | 恢复目录中的等效视图。 |
底层基表
X$KRBMSPD或X$KRBMSD:存储备份片详细元数据的内部动态性能表(内存结构)。这是V$BACKUP_PIECE_DETAILS的主要数据来源,它本身可能也链接到X$KRBMS(V$BACKUP_PIECE的基表)。X$KRBS:可能与 RMAN 会话相关的内部表。
⚠️ 警告: 这些
X$表是Oracle内部的、未文档化的结构,严禁直接查询。
5. 底层详细原理
数据收集流程
- 备份初始化: RMAN 分配通道并开始创建备份片。
- 元数据捕获: 在整个备份过程中,RMAN 会收集大量细节信息:
- SCN 范围: 通过读取文件头和数据块,持续跟踪遇到的最小和最大 SCN。
- 性能计数器: 统计从源文件读取的字节数 (
INPUT_BYTES) 和写入备份片的字节数 (OUTPUT_BYTES)。 - 计时信息: 记录操作的开始和结束时间。
- 最终计算: 备份片关闭后,RMAN 计算最终指标,如
COMPRESSION_RATIO,INPUT_BYTES_PER_SEC。 - 控制文件更新: 所有这些详细的元数据与基本元数据一起被写入控制文件的循环重用区中的专门结构(
X$KRBMSPD)。 - 视图呈现:
V$BACKUP_PIECE_DETAILS视图从这个详细的结构中读取数据。
与 V$BACKUP_PIECE 的关系
可以将其理解为一种“继承”关系。Oracle 内部可能通过类似以下的逻辑来填充视图:
-- 概念性描述,非真实代码
CREATE VIEW V$BACKUP_PIECE_DETAILS AS
SELECT bp.*, -- 所有V$BACKUP_PIECE的字段
bpd.* -- 所有扩展的详细字段
FROM V$BACKUP_PIECE bp
INNER JOIN X$KRBMSPD bpd ON (bp.recid = bpd.recid AND bp.stamp = bpd.stamp);
这意味着每个在 V$BACKUP_PIECE_DETAILS 中的记录,在 V$BACKUP_PIECE 中都有一条对应的记录,但反之则不一定成立(尽管在实践中通常是一一对应的)。
6. 关键知识点介绍
1. 压缩率计算
COMPRESSION_RATIO 是衡量备份效率的重要指标。
- 公式:
COMPRESSION_RATIO = INPUT_BYTES / OUTPUT_BYTES - 示例: 如果
INPUT_BYTES=100G,OUTPUT_BYTES=25G,则COMPRESSION_RATIO=4。这意味着压缩使得备份大小变为原来的 1/4。 - 注意: 高的压缩率通常伴随着更高的 CPU 使用率。需要在存储节省和 CPU 开销之间找到平衡。
2. SCN 范围的重要性
START_CHANGE# 和 END_CHANGE# 对于恢复至关重要。
- 要恢复到一个目标 SCN,必须找到一个满足
START_CHANGE# <= TARGET_SCN <= END_CHANGE#条件的备份片。 - 对于数据文件备份,
END_CHANGE#通常等同于该数据文件备份记录在V$BACKUP_DATAFILE中的ABSOLUTE_FUZZY_CHANGE#。
3. 性能诊断
新增的字段使得性能分析更加精细:
- 低
INPUT_BYTES_PER_SEC: 表明从源数据文件读取数据慢。可能原因是源存储性能瓶颈、系统 I/O 繁忙或数据库文件分散。 - 低
OUTPUT_BYTES_PER_SEC: 表明写入备份目标慢。可能原因是目标存储性能瓶颈、网络延迟(对于 NFS/ASM)或压缩算法消耗了过多 CPU。 - 高
ELAPSED_SECONDS但正常的*_BYTES_PER_SEC: 可能表明 RMAN 在等待资源(如通道),而不是 I/O 本身慢。
7. 常用查询 SQL
① 获取备份片的详细性能报告
SELECT handle,
device_type,
TO_CHAR(start_time, 'YYYY-MM-DD HH24:MI:SS') AS start_time,
TO_CHAR(end_time, 'YYYY-MM-DD HH24:MI:SS') AS end_time,
elapsed_seconds,
ROUND(input_bytes/1024/1024/1024, 2) AS input_gb,
ROUND(output_bytes/1024/1024/1024, 2) AS output_gb,
ROUND(compression_ratio, 2) AS comp_ratio,
ROUND(input_bytes_per_second/1024/1024, 2) AS input_mb_sec,
ROUND(output_bytes_per_second/1024/1024, 2) AS output_mb_sec
FROM v$backup_piece_details
WHERE status = 'A'
ORDER BY start_time DESC;
② 查找可用于恢复到特定 SCN 的备份片
SELECT handle, device_type, start_change#, end_change#,
TO_CHAR(completion_time, 'YYYY-MM-DD HH24:MI:SS') AS backup_time
FROM v$backup_piece_details
WHERE start_change# <= 12345678 -- 替换为目标SCN
AND end_change# >= 12345678
AND status = 'A'
ORDER BY completion_time DESC;
③ 按备份类型分析压缩效率
SELECT input_type,
ROUND(AVG(compression_ratio), 2) AS avg_comp_ratio,
COUNT(*) AS count
FROM v$backup_piece_details
WHERE compression_ratio IS NOT NULL
GROUP BY input_type
ORDER BY avg_comp_ratio DESC;
④ 关联 RMAN 输出日志以诊断失败的备份
SELECT bp.handle, bp.status, bp.start_time,
rm.output
FROM v$backup_piece_details bp
JOIN v$rman_output rm ON (bp.session_recid = rm.session_recid AND bp.session_stamp = rm.session_stamp)
WHERE bp.status = 'X' -- 查找失败的备份片
AND rm.output LIKE '%ORA-%' -- 查找错误消息
ORDER BY bp.start_time, rm.recid;
⑤ 识别备份性能瓶颈
SELECT handle,
ROUND(input_bytes_per_second/1024/1024, 2) AS read_mb_s,
ROUND(output_bytes_per_second/1024/1024, 2) AS write_mb_s,
CASE
WHEN input_bytes_per_second < 50 * 1024 * 1024 THEN 'Slow Read'
WHEN output_bytes_per_second < 50 * 1024 * 1024 THEN 'Slow Write'
ELSE 'OK'
END AS bottleneck
FROM v$backup_piece_details
WHERE device_type = 'DISK'
AND end_time > SYSDATE - 7
ORDER BY bottleneck, read_mb_s;
总结
- 核心优势:
V$BACKUP_PIECE_DETAILS提供了对 RMAN 备份片前所未有的可见性。它将备份从一个黑盒操作转变为可测量、可分析的过程。 - 最佳实践:
- 在处理复杂的恢复场景时,优先使用此视图来精确定位备份片。
- 定期分析性能字段 (
*_BYTES_PER_SEC) 以识别和排除备份基础架构中的瓶颈。 - 使用
COMPRESSION_RATIO来验证所选的压缩算法是否达到预期效果。
- 关键注意:
- 与所有
V$BACKUP_*视图一样,其信息存储在控制文件中,受CONTROL_FILE_RECORD_KEEP_TIME参数限制。 - 查询此视图可能会比查询
V$BACKUP_PIECE消耗稍多的资源,因为它需要访问更复杂的数据结构。 - 对于绝大多数日常检查,
V$BACKUP_PIECE可能就足够了。V$BACKUP_PIECE_DETAILS是你在需要深度信息时才动用的“重型武器”。
- 与所有
欢迎关注我的公众号《IT小Chen》
1604

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



