
以下是针对 Oracle 19c 中 V$BACKUP_DATAFILE 动态性能视图的全面解析,涵盖作用、使用场景、字段含义、关联视图、底层原理及常用 SQL。
1. 视图作用
V$BACKUP_DATAFILE 提供 RMAN 备份的数据文件的详细信息,主要功能包括:
- 📝 记录每个数据文件备份的元数据(SCN、时间、大小等)
- 🔍 区分全量备份和增量备份
- 📌 跟踪备份类型(压缩/加密)和级别
- 📊 统计备份效率和存储消耗
- ⚠️ 验证备份完整性(损坏块信息)
💡 核心价值:监控数据文件备份状态,确保恢复可行性。
2. 使用场景
- 恢复规划:确定恢复所需的数据文件备份
- 备份审计:验证备份策略执行情况
- 性能优化:分析备份速率和压缩效率
- 容量管理:评估备份存储需求
- 故障诊断:识别备份失败或损坏问题
- 增量备份管理:维护增量备份链完整性
3. 字段详解(Oracle 19c)
| 字段名 | 数据类型 | 描述 |
|---|---|---|
SET_STAMP | NUMBER | 备份集时间戳(与 SET_COUNT 唯一标识备份集) |
SET_COUNT | NUMBER | 备份集序列号 |
FILE# | NUMBER | 关键:数据文件编号 |
CREATION_CHANGE# | NUMBER | 数据文件创建时的 SCN |
CHECKPOINT_CHANGE# | NUMBER | 关键:备份开始时数据文件的检查点 SCN |
ABSOLUTE_FUZZY_CHANGE# | NUMBER | 模糊备份的绝对 SCN(用于恢复) |
INCREMENTAL_LEVEL | NUMBER | 关键:增量备份级别(0=全备,1=1级增量,…) |
INCREMENTAL_CHANGE# | NUMBER | 增量备份的起始 SCN(仅对增量备份有效) |
BYTES | NUMBER | 备份的数据文件大小(字节) |
BLOCKS | NUMBER | 备份的数据文件块数 |
COMPLETION_TIME | DATE | 关键:备份完成时间 |
ELAPSED_SECONDS | NUMBER | 备份耗时(秒) |
TAG | VARCHAR2(32) | 备份标签(用户指定或自动生成) |
COMPRESSED | VARCHAR2(3) | 是否压缩:YES/NO |
ENCRYPTED | VARCHAR2(3) | 是否加密:YES/NO |
BACKUP_TYPE | VARCHAR2(13) | 备份类型:FULL/INCREMENTAL |
DATAFILE_TS_NAME | VARCHAR2(30) | 表空间名称 |
DATAFILE_NAME | VARCHAR2(513) | 数据文件路径 |
CON_ID | NUMBER | 容器 ID(CDB 环境中有效) |
📌 核心字段:
CHECKPOINT_CHANGE#:恢复起点 SCNINCREMENTAL_LEVEL:区分备份级别COMPLETION_TIME:确定最新备份
4. 相关视图与基表
关联视图
| 视图名称 | 描述 |
|---|---|
V$BACKUP_SET | 备份集元数据(类型、设备等) |
V$BACKUP_PIECE | 备份片物理文件信息 |
V$BACKUP_CORRUPTION | 备份中的损坏块信息 |
V$DATAFILE | 当前数据文件信息 |
RC_BACKUP_DATAFILE | 恢复目录中的等效视图 |
底层基表
X$KRBDF:数据文件备份元数据表(内存结构)X$KCVFH:文件头信息表X$KCCFN:文件名称表
⚠️ 基表为 Oracle 内部结构,禁止直接查询。
5. 底层原理
备份流程
graph TD
A[RMAN 分配通道] --> B[读取数据文件头]
B --> C[确定检查点SCN]
C --> D{增量备份?}
D -->|YES| E[读取块变化位图]
D -->|NO| F[读取所有使用块]
E --> G[仅备份修改块]
F --> G
G --> H[应用压缩/加密]
H --> I[写入备份片]
I --> J[更新控制文件]
关键机制
- SCN 记录:
- 备份开始时捕获
CHECKPOINT_CHANGE# - 作为恢复起点
- 备份开始时捕获
- 增量备份:
- 依赖块变化跟踪文件(
V$BLOCK_CHANGE_TRACKING) INCREMENTAL_LEVEL决定备份范围
- 依赖块变化跟踪文件(
- 空间优化:
- 跳过未使用块(即使在全备中)
- 压缩减少 30-70% 空间占用
- 元数据存储:
- 控制文件记录备份关系:
文件 -> 备份集 -> 备份片
- 控制文件记录备份关系:
6. 关键知识点
增量备份策略
| 级别 | 描述 | 恢复依赖 |
|---|---|---|
| 0 | 基准全备 | 无 |
| 1 | 0级后的变化块 | 0级备份 |
| 累积 | 所有0级后的变化块 | 0级备份 |
-- 创建增量备份
RMAN> BACKUP INCREMENTAL LEVEL 0 DATABASE; -- 基准备份
RMAN> BACKUP INCREMENTAL LEVEL 1 DATABASE; -- 增量备份
压缩算法对比
| 算法 | 压缩率 | CPU 开销 | 适用场景 |
|---|---|---|---|
BASIC | 低 | 低 | 快速备份 |
LOW | 中 | 中 | 平衡场景 |
MEDIUM | 高 | 高 | 网络带宽受限 |
HIGH | 最高 | 最高 | 存储空间严重不足 |
备份保留策略
-- 配置保留策略
RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
RMAN> CONFIGURE RETENTION POLICY TO REDUNDANCY 3;
7. 常用查询 SQL
① 列出所有数据文件备份
SELECT file#, datafile_name,
TO_CHAR(completion_time, 'YYYY-MM-DD HH24:MI:SS') AS backup_time,
incremental_level AS incr_lvl,
ROUND(bytes/1024/1024, 2) AS size_mb,
backup_type, compressed, encrypted
FROM v$backup_datafile
ORDER BY completion_time DESC;
② 查找文件的最新备份
SELECT * FROM (
SELECT file#, datafile_name, completion_time,
checkpoint_change#,
ROW_NUMBER() OVER (PARTITION BY file# ORDER BY completion_time DESC) AS rnk
FROM v$backup_datafile
WHERE incremental_level = 0 -- 只查全备
) WHERE rnk = 1;
③ 分析备份效率(MB/s)
SELECT file#,
ROUND(bytes/1024/1024) AS size_mb,
elapsed_seconds,
ROUND(bytes/1024/1024 / GREATEST(elapsed_seconds, 1)) AS mb_per_sec,
device_type
FROM v$backup_datafile
WHERE completion_time > SYSDATE - 7;
④ 检测增量备份链断裂
WITH incr AS (
SELECT file#, incremental_level, completion_time,
LAG(completion_time) OVER (PARTITION BY file# ORDER BY completion_time) AS prev_time
FROM v$backup_datafile
WHERE incremental_level > 0
)
SELECT file#,
MIN(completion_time) AS first_missing,
MAX(prev_time) AS last_valid
FROM incr
WHERE prev_time IS NULL
OR completion_time - prev_time > 1 -- 超过1天间隔
GROUP BY file#;
⑤ 按表空间统计备份大小
SELECT datafile_ts_name AS tablespace,
COUNT(*) AS backups,
ROUND(SUM(bytes)/1024/1024) AS total_mb,
ROUND(AVG(bytes)/1024/1024) AS avg_mb
FROM v$backup_datafile
GROUP BY datafile_ts_name
ORDER BY total_mb DESC;
⑥ 验证备份完整性(无损坏块)
SELECT bd.file#, bd.datafile_name,
NVL(bc.corrupt_blocks, 0) AS corrupt_blocks
FROM v$backup_datafile bd
LEFT JOIN (
SELECT file#, COUNT(*) AS corrupt_blocks
FROM v$backup_corruption
GROUP BY file#
) bc ON bd.file# = bc.file#
WHERE bd.completion_time > SYSDATE - 30;
⑦ 计算备份压缩率
SELECT
d.file#, d.bytes AS current_size,
b.bytes AS backup_size,
ROUND((d.bytes - b.bytes) * 100 / d.bytes, 2) AS compression_pct
FROM v$datafile d
JOIN (
SELECT file#, MAX(bytes) KEEP (DENSE_RANK LAST ORDER BY completion_time) AS bytes
FROM v$backup_datafile
GROUP BY file#
) b ON d.file# = b.file#
WHERE d.con_id = 0; -- CDB 中只查 root
总结
- 核心价值:提供数据文件备份的黄金记录,确保恢复可行性
- 最佳实践:
- 定期验证
CHECKPOINT_CHANGE#的连续性 - 监控增量备份链完整性
- 分析压缩率优化存储成本
- 定期验证
- 关键注意:
- 控制文件记录受
CONTROL_FILE_RECORD_KEEP_TIME限制 - CDB 环境中使用
CON_ID区分容器 INCREMENTAL_CHANGE#仅对增量备份有效
- 控制文件记录受
🔧 恢复示例:
-- 使用特定备份恢复 RMAN> RUN { SET UNTIL SCN <CHECKPOINT_CHANGE# + 1>; RESTORE DATAFILE 5 FROM BACKUPSET <SET_STAMP>, <SET_COUNT>; RECOVER DATAFILE 5; }
通过此视图,DBA 可全面掌控数据文件备份状态,确保数据库可恢复性。
欢迎关注我的公众号《IT小Chen》
1719

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



