
好的,我们来全面、深入地解析 Oracle 19c 数据库中的 V$BACKUP_PIECE 动态性能视图。这是 RMAN 备份恢复体系中最为关键的视图之一,因为它直接管理着备份的物理载体。
1. 视图作用
V$BACKUP_PIECE 提供 RMAN 创建的物理备份片(Backup Piece)文件的详细信息。备份片是 RMAN 备份在磁盘或磁带上最终存储的物理文件单位。
其核心作用包括:
- 物理文件跟踪: 记录每个备份片的位置(路径/句柄)、大小、状态和所属备份集。
- 生命周期管理: 跟踪备份片从创建、验证到删除或过期的整个生命周期。
- 恢复基础: 为
RESTORE和RECOVER操作提供最重要的输入——要从中提取数据的物理文件列表。 - 存储管理: 提供备份文件占用的空间信息,用于容量规划和清理操作。
💡 核心价值: 它是连接 RMAN 备份逻辑元数据(如 SCN 范围)和物理存储的桥梁。没有它,RMAN 将无法找到备份数据所在的物理文件。
2. 使用场景
- 恢复准备: 在执行恢复前,定位包含所需数据文件或归档日志的特定备份片文件。
- 备份验证: 使用
CROSSCHECK命令后,检查备份片状态是否为AVAILABLE,验证备份是否可用。 - 清理存储: 识别状态为
EXPIRED或DELETED的备份片记录,并物理删除其对应的文件以释放空间。 - 故障诊断: 当备份或恢复作业失败时,检查备份片的状态和属性以诊断问题(如磁盘空间不足、磁带库故障)。
- 审计与报告: 生成备份存储消耗报告,按设备类型、时间等维度进行统计。
3. 字段详解 (Oracle 19c)
V$BACKUP_PIECE 包含大量字段,以下是其中最关键的字段。
| 字段名 | 数据类型 | 描述 |
|---|---|---|
RECID | NUMBER | 备份片记录的唯一标识符(在控制文件内)。 |
STAMP | NUMBER | 备份片记录的时间戳标识符。与 RECID 共同唯一标识一条记录。 |
SET_STAMP | NUMBER | 关键:该备份片所属备份集的时间戳。 |
SET_COUNT | NUMBER | 关键:该备份片所属备份集的序列号。与 SET_STAMP 共同唯一标识一个备份集。 |
PIECE# | NUMBER | 备份片在备份集中的编号(通常为 1,除非备份集被分割到多个片)。 |
COPY# | NUMBER | 文件副本编号。 |
FILE# | NUMBER | (已废弃) |
HANDLE | VARCHAR2(513) | 关键:备份片的完整路径名称(对于磁盘)或磁带句柄(对于 SBT)。这是恢复时使用的物理标识。 |
DEVICE_TYPE | VARCHAR2(17) | 关键:创建该备份片的设备类型:DISK 或 SBT_TAPE。 |
MEDIA | VARCHAR2(64) | 介质名称(用于磁带)。 |
TAG | VARCHAR2(32) | 用户分配或系统自动生成的备份标签。 |
COMPLETION_TIME | DATE | 关键:备份片创建完成的时间。 |
ELAPSED_SECONDS | NUMBER | 创建该备份片所花费的时间(秒)。 |
BYTES | NUMBER | 关键:备份片的实际大小(字节)。 |
BLOCKS | NUMBER | 备份片中的块数。 |
STATUS | VARCHAR2(1) | 最关键的状态指标: • A (AVAILABLE): 备份片存在且可用于恢复。• X (EXPIRED): 备份片已被 CROSSCHECK 标记为不存在(物理文件已丢失或已被删除)。• D (DELETED): 备份片已被 RMAN 的 DELETE 命令删除。 |
DELETED | VARCHAR2(3) | 是否已被删除:YES / NO。是 STATUS 的补充。 |
FILES | NUMBER | 该备份片中包含的文件数量(例如,一个备份集包含10个数据文件,则此片中的 FILES 为10)。 |
CHECKPOINT_CHANGE# | NUMBER | 备份片中最旧的检查点 SCN。 |
KEEP | VARCHAR2(8) | 是否被长期保留策略保持:YES / NO。 |
KEEP_UNTIL | DATE | 长期保留的截止日期。 |
KEEP_OPTIONS | VARCHAR2(11) | 长期保留的选项(如 LOGS)。 |
MEDIA_POOL | NUMBER | 介质池编号(用于磁带)。 |
CON_ID | NUMBER | 容器ID(在多租户环境中使用)。 |
📌 核心字段解读:
SET_STAMP+SET_COUNT+PIECE#:唯一确定一个物理备份片。HANDLE:恢复操作中FROM BACKUPPIECE '<handle>'的来源。STATUS:这是日常管理中最关注的字段。A表示安全,X表示需要处理(要么找回文件,要么用DELETE EXPIRED清理记录)。BYTES:用于计算备份总大小和规划存储。
4. 相关视图与基表
关联视图
| 视图名称 | 描述 | 关系 |
|---|---|---|
V$BACKUP_SET | 备份集元数据(逻辑信息)。 | 通过 SET_STAMP 和 SET_COUNT 与 V$BACKUP_PIECE 关联。一个备份集(V$BACKUP_SET 中的一行)包含一个或多个备份片(V$BACKUP_PIECE 中的多行)。 |
V$BACKUP_FILES | 所有备份相关文件的统一视图。 | V$BACKUP_PIECE 中的记录是 V$BACKUP_FILES 中 FILE_TYPE='BACKUP PIECE' 的子集。V$BACKUP_FILES 更全面,但 V$BACKUP_PIECE 更专门化。 |
V$BACKUP_DATAFILE | 数据文件备份详情。 | 逻辑上,V$BACKUP_DATAFILE 中的备份记录存储在 V$BACKUP_PIECE 所指向的物理文件中。 |
V$BACKUP_REDOLOG | 归档日志备份详情。 | 同上,逻辑记录与物理文件的关系。 |
RC_BACKUP_PIECE | 恢复目录中的等效视图。 | 如果使用了恢复目录,则应查询此视图以获得更完整的历史记录。 |
底层基表
X$KRBMS或X$KRBMSP:存储备份片元数据的内部动态性能表(内存结构)。这是V$BACKUP_PIECE的主要数据来源。X$KRBMC:可能与介质管理(磁带)相关的内部表。
⚠️ 警告: 这些
X$表是Oracle内部的、未文档化的结构,严禁直接查询。
5. 底层详细原理
备份片的生命周期与管理
- 创建: RMAN 通道进程打开一个由
CONFIGURE CHANNEL ... FORMAT或ALLOCATE CHANNEL命令指定的输出文件(备份片)。数据被写入,并在完成后关闭文件。同时,该文件的元数据被写入控制文件。 - 验证:
CROSSCHECK: RMAN 物理检查HANDLE指向的文件是否存在。如果不存在,则将控制文件中的STATUS更新为'X'(EXPIRED)。此操作不会删除物理文件或控制文件记录。VALIDATE: RMAN 检查备份片的物理完整性(校验和或逻辑结构)。
- 删除:
DELETE: RMAN 物理删除HANDLE指向的文件,并将控制文件中的STATUS更新为'D'(DELETED)。DELETE EXPIRED: RMAN 只删除控制文件记录,前提是这些记录的STATUS已经是'X'。此命令不删除物理文件(因为文件早已不存在)。DELETE OBSOLETE: 根据保留策略,RMAN 会物理删除那些已过时的备份片文件,并将其记录标记为'D'。
备份片与备份集的关系
- 备份集 (Backup Set): 一个逻辑容器,包含一个或多个数据文件、归档日志的备份。它在
V$BACKUP_SET中有一条记录。 - 备份片 (Backup Piece): 备份集的物理表现形式。一个备份集默认对应一个备份片。但如果备份集非常大,可以通过
MAXPIECESIZE通道参数将其分割成多个较小的备份片文件。因此,一个备份集(SET_STAMP/SET_COUNT)可以对应V$BACKUP_PIECE中的多条记录。
6. 关键知识点介绍
1. 状态(STATUS)管理
理解这三个状态是管理备份的基础:
A- AVAILABLE: 记录和物理文件都存在。这是健康状态。X- EXPIRED: 记录存在,但物理文件不存在。这是一种不一致状态,需要DBA干预。通常是由于有人在操作系统级别手动删除了备份文件所致。解决方法是:要么把文件恢复原处,要么用DELETE EXPIRED命令来清理控制文件中的“僵尸”记录。D- DELETED: 记录和物理文件都已被 RMAN 删除。这是一种一致性状态,表示文件已被安全、正确地清理。
2. 手工删除的风险
绝对禁止在操作系统级别手动删除 RMAN 备份片文件。这会导致控制文件记录(STATUS='A')与物理现实(文件不存在)不一致,产生 EXPIRED 状态。这会使得:
CROSSCHECK命令失败。- 恢复时可能因找不到文件而失败。
- 使用
BACKUP RECOVERY AREA命令时可能会出错。
正确的做法是始终使用 RMAN 的 DELETE 命令来删除备份。
3. 多租户环境 (CDB)
在 CDB 中,V$BACKUP_PIECE 显示整个 CDB(所有容器)的备份片信息。可以使用 CON_ID 字段来过滤特定容器的备份,但通常备份是在 CDB 级别进行的,所以此字段的使用场景较少。
7. 常用查询 SQL
① 查看所有备份片的基本信息(最常用)
SELECT set_stamp, set_count, piece#, handle, device_type,
TO_CHAR(completion_time, 'YYYY-MM-DD HH24:MI:SS') AS completion_time,
ROUND(bytes/1024/1024, 2) AS size_mb,
status, deleted
FROM v$backup_piece
ORDER BY completion_time DESC;
② 检查所有状态为 EXPIRED 的备份片(需要立即处理)
SELECT handle, device_type, completion_time, bytes
FROM v$backup_piece
WHERE status = 'X' -- EXPIRED
ORDER BY completion_time DESC;
③ 按设备类型和状态统计备份存储空间
SELECT device_type,
status,
COUNT(*) AS piece_count,
ROUND(SUM(bytes)/1024/1024/1024, 2) AS total_size_gb
FROM v$backup_piece
GROUP BY device_type, status
ORDER BY device_type, status;
④ 查找包含特定数据文件的最新备份片
SELECT bp.handle, bp.completion_time, bd.file#
FROM v$backup_piece bp
JOIN v$backup_datafile bd ON (bp.set_stamp = bd.set_stamp AND bp.set_count = bd.set_count)
WHERE bd.file# = 5 -- 替换为目标文件号
AND bp.status = 'A'
ORDER BY bp.completion_time DESC;
⑤ 验证备份集是否完整(所有片都可用)
SELECT set_stamp, set_count,
COUNT(*) AS total_pieces,
SUM(CASE WHEN status = 'A' THEN 1 ELSE 0 END) AS available_pieces,
CASE WHEN COUNT(*) = SUM(CASE WHEN status = 'A' THEN 1 ELSE 0 END)
THEN 'COMPLETE' ELSE 'INCOMPLETE' END AS status
FROM v$backup_piece
GROUP BY set_stamp, set_count
HAVING COUNT(*) > 0
ORDER BY set_stamp, set_count;
⑥ 列出所有长期保留的备份片
SELECT handle, keep, keep_until, keep_options
FROM v$backup_piece
WHERE keep = 'YES'
ORDER BY keep_until;
总结
- 核心优势:
V$BACKUP_PIECE是 RMAN 物理备份文件管理的核心。它提供了备份片生命周期管理的所有必要信息,是确保备份可恢复性的关键视图。 - 最佳实践:
- 定期查询并关注
STATUS不为'A'的记录,及时处理EXPIRED状态。 - 始终使用 RMAN 命令(
DELETE,CROSSCHECK)来管理备份文件,杜绝手动删除。 - 在执行重要恢复之前,使用此视图确认所需备份片的存在性和位置(
HANDLE)。
- 定期查询并关注
- 关键注意:
- 视图信息存储在控制文件中,受
CONTROL_FILE_RECORD_KEEP_TIME参数限制。对于长期的备份历史审计,必须使用恢复目录。 HANDLE是操作系统级别的路径,确保 Oracle 软件用户(通常是oracle)对该路径有读/写/执行权限。
- 视图信息存储在控制文件中,受
欢迎关注我的公众号《IT小Chen》
321

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



