
好的,我们来全面而深入地探讨 Oracle 19C 数据库中一个至关重要的空间管理视图:V$RECOVERY_AREA_USAGE。
🗃️ Oracle 19C V$RECOVERY_AREA_USAGE 动态性能视图详解
1. 视图概述与核心作用
V$RECOVERY_AREA_USAGE 视图提供的是关于 快速恢复区(Fast Recovery Area, FRA) 空间使用情况的百分比概览。它的核心作用是以一种直观、标准化的方式(百分比)监控 FRA 的空间利用率,帮助 DBA 快速判断空间压力来源于哪种类型的文件(如归档日志、闪回日志、RMAN 备份等),从而进行有效的空间管理和故障预防。
请注意:此视图显示的是百分比,而非具体的字节数。要获取精确的空间占用大小,需要查询 V$FLASH_RECOVERY_AREA_DETAILS 或 V$RECOVERY_FILE_DEST。
2. 主要用途与应用场景
- 日常空间监控:DBA 可以定期查看此视图,快速了解 FRA 的整体健康状况,以及各类文件对空间消耗的贡献度。
- 空间压力诊断:当收到 “ORA-19809: limit exceeded for recovery files” 或 “ORA-19804: cannot reclaim … bytes disk space” 等告警时,立即查询此视图,可以迅速定位是哪种文件占用了过多空间,导致空间无法被自动回收。
- 容量规划:通过长期观察各类文件的空间使用趋势,可以为调整
DB_RECOVERY_FILE_DEST_SIZE参数或优化备份/归档策略提供数据依据。 - 优化备份与归档策略:如果发现
BACKUP PIECE或ARCHIVED LOG的占用比例异常高,可能意味着需要调整 RMAN 备份的保留策略(RETENTION POLICY)或增加归档日志的删除频率。
3. 字段详解
V$RECOVERY_AREA_USAGE 视图的字段结构清晰,每一行代表一种存储在 FRA 中的文件类型。
| 字段名称 | 类型 | 描述 |
|---|---|---|
| FILE_TYPE | VARCHAR2(20) | 文件类型。标识占用 FRA 空间的文件种类。这是分析和诊断的关键。 |
| PERCENT_SPACE_USED | NUMBER | 该类文件已使用的空间占 FRA 总大小的百分比。计算方式:(该类文件已用空间 / DB_RECOVERY_FILE_DEST_SIZE) * 100。 |
| PERCENT_SPACE_RECLAIMABLE | NUMBER | 该类文件中可被回收的空间占总大小的百分比。"可回收"意味着这些文件不再被数据库需要(如:已被备份到磁带、超过了备份保留策略期限、或已过闪回窗口要求的保留期),可以由 Oracle 自动删除以释放空间。 |
| NUMBER_OF_FILES | NUMBER | 该类文件当前的数量。 |
FILE_TYPE 常见值及其含义:
| FILE_TYPE 值 | 描述 |
|---|---|
| CONTROL FILE | 当前控制文件的副本。 |
| REDO LOG | 当前联机重做日志文件的副本。 |
| ARCHIVED LOG | 归档重做日志文件。这是最常占用大量空间的文件类型。 |
| BACKUP PIECE | RMAN 备份片。包含数据文件、控制文件、归档日志等的备份。 |
| IMAGE COPY | RMAN 镜像副本(COPY 命令创建)。 |
| FLASHBACK LOG | 闪回数据库日志。如果启用了闪回数据库功能,才会生成此类文件。 |
| FOREIGN ARCHIVED LOG | 来自其他数据库(如 Data Guard 备库)的归档日志。 |
4. 相关视图与基表
V$RECOVERY_AREA_USAGE 是一个动态性能视图,其数据来源于内存中的内部数据结构,主要用于实时监控。
4.1 相关动态性能视图
| 视图名称 | 描述 |
|---|---|
V$FLASH_RECOVERY_AREA_DETAILS | V$RECOVERY_AREA_USAGE 的底层数据来源。它提供了每种文件类型占用空间的精确字节数(SPACE_USED, SPACE_RECLAIMABLE),而不仅仅是百分比。是进行深入空间分析的首选视图。 |
V$RECOVERY_FILE_DEST | 提供快速恢复区的汇总信息,包括位置(NAME)、总大小(SPACE_LIMIT)、已用空间(SPACE_USED)、可回收空间(SPACE_RECLAIMABLE)和文件数量(NUMBER_OF_FILES)。这是一个整体视图。 |
V$ARCHIVED_LOG | 显示归档日志的信息,包括名称、大小、完成时间等,可用于交叉验证和详细查询。 |
V$RMAN_BACKUP_JOB_DETAILS | 显示 RMAN 备份作业的详细信息,可用于关联分析备份文件的空间占用。 |
V$FLASHBACK_DATABASE_LOG | 显示闪回数据库日志的相关信息,包括估算的闪回日志生成率等。 |
4.2 基表信息
与大多数 V$ 视图一样,V$RECOVERY_AREA_USAGE 是基于更底层的 X$ 表构建的。这些 X$ 表是 Oracle 内核内部数据结构的接口,直接映射了 SGA 中管理的内存信息。
V$RECOVERY_AREA_USAGE->V_$RECOVERY_AREA_USAGE->GV_$RECOVERY_AREA_USAGE->X$KCRFUSG(可能的底层表,Oracle 未公开文档化)V$FLASH_RECOVERY_AREA_DETAILS可能基于类似的底层结构,如X$KCRFUSG_DETAIL。- 权限注意:直接查询
X$表需要SYSDBA权限,且其结构是未公开的,因此强烈建议只查询V$视图。
5. 底层原理与内部机制
要理解 V$RECOVERY_AREA_USAGE 中的数据,必须了解快速恢复区(FRA)的管理机制。
-
FRA 是什么:FRA 是一个统一的存储位置,用于集中管理所有与恢复相关的文件。它由两个参数定义:
DB_RECOVERY_FILE_DEST:指定 FRA 的磁盘目录位置。DB_RECOVERY_FILE_DEST_SIZE:指定 FRA 的最大可用空间。
-
空间管理:Oracle 数据库自动管理 FRA 中的空间。当有新的文件需要被创建到 FRA(如归档日志切换、RMAN 备份到磁盘)时,数据库会检查是否有足够空间。
-
空间回收机制(核心):这是
PERCENT_SPACE_RECLAIMABLE字段的来源。- 当 FRA 空间不足时,Oracle 会自动删除那些“已过时”(Obsolete)或“可回收”(Reclaimable)的文件,以腾出空间给新文件。
- 一个文件是否“可回收”取决于保留策略(Retention Policy):
- 对于 RMAN 备份:由
CONFIGURE RETENTION POLICY决定。超过保留策略期限的备份被视为“过时”,即可回收。 - 对于归档日志:如果归档日志已经被备份到磁带(如果使用了
BACKUP ARCHIVELOG ... DELETE INPUT),或者它包含的重做记录已经超出了配置的闪回窗口(Flashback Window),那么它就可能被标记为可回收。 - 对于闪回日志:闪回日志仅在需要保证闪回窗口(
DB_FLASHBACK_RETENTION_TARGET)的完整性时才是必需的。早于这个窗口的闪回日志可以被回收。
- 对于 RMAN 备份:由
-
视图数据生成原理:Oracle 后台进程(如
RVWR- 闪回日志写入器、ARCn- 归档进程、RMAN)在创建、删除文件时,会更新内部的控制结构和元数据。V$RECOVERY_AREA_USAGE和V$FLASH_RECOVERY_AREA_DETAILS视图通过查询这些内存中的元数据,实时计算出每种文件类型的空间占用和可回收状态,并将其转换为百分比或字节数呈现给用户。
6. 常用查询 SQL 示例
6.1 查看 FRA 空间使用概况(百分比)
这是最常用的查询,直接对应 V$RECOVERY_AREA_USAGE 视图。
SELECT file_type,
percent_space_used AS "% Used",
percent_space_reclaimable AS "% Reclaimable",
number_of_files AS "Num Files"
FROM v$recovery_area_usage
ORDER BY percent_space_used DESC;
6.2 查看 FRA 空间使用详情(字节数)
当需要知道精确的占用大小时,使用此查询,它基于 V$FLASH_RECOVERY_AREA_DETAILS。
SELECT file_type,
round(space_used / 1024 / 1024 / 1024, 2) AS space_used_gb,
round(space_reclaimable / 1024 / 1024 / 1024, 2) AS space_reclaimable_gb,
number_of_files AS "Num Files"
FROM v$flash_recovery_area_details
ORDER BY space_used DESC;
6.3 关联查询:结合整体和明细信息
此查询提供了更全面的视角,将整体限制与详细使用情况结合起来。
SELECT
d.file_type,
round(d.space_used / 1024 / 1024 / 1024, 2) AS used_gb,
round(d.space_reclaimable / 1024 / 1024 / 1024, 2) AS reclaimable_gb,
u.percent_space_used AS "% Used",
u.percent_space_reclaimable AS "% Reclaimable"
FROM v$flash_recovery_area_details d
JOIN v$recovery_area_usage u ON d.file_type = u.file_type
ORDER BY d.space_used DESC;
6.4 检查导致空间压力的具体文件(归档日志示例)
如果发现 ARCHIVED LOG 占用过高,可以进一步查询具体的归档日志文件。
SELECT name,
round(blocks * block_size / 1024 / 1024, 2) AS size_mb,
completion_time,
deleted
FROM v$archived_log
WHERE deleted = 'NO'
AND name LIKE '%DB_RECOVERY_FILE_DEST%' -- 确保文件在FRA中
ORDER BY completion_time DESC;
7. 重要知识点与注意事项
- 空间不足的影响:如果 FRA 空间耗尽,且没有可回收的文件,数据库操作将会挂起。例如,如果归档进程无法在 FRA 中创建新的归档日志文件,那么任何需要重做日志切换的操作(包括 DML 事务)都将被阻塞,直到空间被释放。
- 可回收 ≠ 已回收:
PERCENT_SPACE_RECLAIMABLE只表示有潜力被自动回收的空间,但这些空间并未立即释放。只有当 Oracle 需要空间创建新文件时,才会触发自动回收过程。你也可以手动使用RMAN DELETE OBSOLETE命令来立即回收这些空间。 - 监控与告警:务必为 FRA 空间使用设置监控和告警。一个常见的经验法则是当
PERCENT_SPACE_USED超过 80% 时就需要密切关注,超过 90% 则必须立即处理。 - 解决方案:
- 增加 FRA 大小:
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE = ... G; - 手动释放空间:使用 RMAN 命令
DELETE OBSOLETE;或DELETE ARCHIVELOG UNTIL TIME 'SYSDATE-7';(谨慎操作!)。 - 调整保留策略:
RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;(将恢复窗口从14天改为7天,会使更多备份过时)。 - 将备份转移到磁带:使用
BACKUP ... DELETE INPUT命令将磁盘备份归档日志后并删除原文件。
- 增加 FRA 大小:
- FRA 与 OMFTM:如果使用了 Oracle 管理文件(OMF),FRA 是存放 OMF 格式的与控制文件、重做日志相关的副本的默认位置。
通过深入理解 V$RECOVERY_AREA_USAGE 视图,DBA 可以有效地掌控数据库的恢复环境,确保其健康运行,并在出现空间危机时能够快速响应和解决。
欢迎关注我的公众号《IT小Chen》
2251

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



