oracle 归档日志与RECOVERY_FILE_DEST 视图

发布于:2025-06-08 ⋅ 阅读:(16) ⋅ 点赞:(0)

 1. RECOVERY_FILE_DEST 视图的作用

RECOVERY_FILE_DEST 是 Oracle 数据库用于 管理快速恢复区(Fast Recovery Area, FRA) 的一个视图。FRA 是 Oracle 提供的一种集中存储恢复相关文件(如归档日志、备份文件、闪回日志等)的区域。

RECOVERY_FILE_DEST 视图的主要作用
  • 显示快速恢复区的路径和状态
    • 快速恢复区的配置路径。
    • 快速恢复区的总大小和当前使用情况。
  • 监控 FRA 的使用情况
    • Oracle 会自动计算 FRA 的空间使用情况,帮助管理员判断是否需要清理空间或扩展 FRA。
  • 归档日志的存储管理
    • 如果配置了 FRA,归档日志默认会存储在 FRA 中。
相关视图示例

可以通过以下查询查看 FRA 的配置和使用情况:

sql

SELECT SPACE_LIMIT, SPACE_USED, SPACE_RECLAIMABLE, NUMBER_OF_FILES 
FROM V$RECOVERY_FILE_DEST;
  • SPACE_LIMIT:快速恢复区的总大小(以字节为单位)。
  • SPACE_USED:当前已使用的空间大小。
  • SPACE_RECLAIMABLE:可以被回收的空间大小(如被标记为过期的备份或归档日志)。
  • NUMBER_OF_FILES:FRA 中的文件总数。

2. RECOVERY_FILE_DEST 与归档日志的关系

2.1 FRA 与归档日志
  • 如果启用了快速恢复区(FRA),归档日志会默认存储在 FRA 中。

    • FRA 的路径由参数 DB_RECOVERY_FILE_DEST 指定。
    • FRA 的大小由参数 DB_RECOVERY_FILE_DEST_SIZE 限制。
  • Oracle 会自动管理 FRA 中的归档日志:

    • 当 FRA 的空间使用接近 DB_RECOVERY_FILE_DEST_SIZE 时,Oracle 会尝试删除不再需要的文件(如过期的备份)以释放空间。
    • 如果无法释放足够的空间,可能会导致归档进程(ARCH)挂起。
2.2 不使用 FRA 存储归档日志
  • 如果没有配置 FRA,归档日志会存储在由参数 LOG_ARCHIVE_DEST_n 指定的路径中(n 是 1 到 31 的整数)。
    • 在这种情况下,FRA (RECOVERY_FILE_DEST) 不会影响归档日志的位置,V$RECOVERY_FILE_DEST 的相关值会显示为 0。

3. 配置和查询归档日志相关参数

除了 RECOVERY_FILE_DEST,还有其他方式可以配置和查询归档日志的存储位置、大小和使用情况。

3.1 配置归档日志存储位置
3.1.1 使用 LOG_ARCHIVE_DEST_n
  • 不启用 FRA 时,归档日志位置由 LOG_ARCHIVE_DEST_n 参数决定。

  • 可以通过以下命令查看当前归档日志的存储位置:

    sql

  • SHOW PARAMETER LOG_ARCHIVE_DEST;
    
  • 如果需要修改归档日志的存储位置,可以通过以下命令配置:

    sql

ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/path/to/archive_logs';

说明

  • LOG_ARCHIVE_DEST_n 支持多种格式,如 LOCATION(本地路径)或 SERVICE(远程路径)。
  • 例如:

    sql

    • ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='SERVICE=standby_db';
      
3.1.2 启用快速恢复区
  • 如果启用了 FRA(通过配置 DB_RECOVERY_FILE_DEST),归档日志默认会存储在 FRA 中。

  • 配置 FRA 的命令:

    sql

  • ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='/path/to/recovery_area';
    ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=20G;
    
  • 如果同时配置了 FRA 和 LOG_ARCHIVE_DEST_n,优先级如下:

    • 如果 LOG_ARCHIVE_DEST_n 存在,则归档日志存储在指定路径。
    • 如果未配置 LOG_ARCHIVE_DEST_n,则归档日志存储在 FRA。

3.2 查询归档模式和相关参数
  1. 检查数据库是否启用了归档模式

    • 使用以下命令查看数据库是否处于归档模式:

      sql

ARCHIVE LOG LIST;

输出示例:

text

    • Database log mode              Archive Mode
      Automatic archival             Enabled
      Archive destination            /path/to/archive_logs
      
  • 查询归档日志的存储参数

    • 查询所有归档相关参数:

      sql

SHOW PARAMETER ARCHIVE;

输出示例:

text

    • NAME                                 TYPE        VALUE
      ------------------------------------ ----------- ------------------------------
      log_archive_dest                    string      
      log_archive_dest_1                  string      LOCATION=/path/to/archive_logs
      log_archive_dest_state_1            string      enable
      log_archive_format                  string      %t_%s_%r.dbf
      log_archive_max_processes           integer     4
      
  • 查询归档日志的使用情况

    • 查看归档日志的实际存储位置和大小:

      sql

    • SELECT * FROM V$ARCHIVED_LOG;
      
      重要字段说明:
      • NAME:归档日志的存储路径。
      • BLOCKS:归档日志的大小。
      • COMPLETION_TIME:归档日志的生成时间。

3.3 配置归档日志的大小限制
  1. 调整快速恢复区大小

    • 如果 FRA 用于存储归档日志,可以通过以下命令调整 FRA 的大小:

      sql

    • ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=50G;
      
  • 限制单个归档日志文件的大小

    • Oracle 支持通过 LOG_ARCHIVE_MAXSIZE 限制单个归档日志文件的大小:

      sql

    • ALTER SYSTEM SET LOG_ARCHIVE_MAXSIZE='1G';
      
  • 调整归档进程并发数

    • 通过 LOG_ARCHIVE_MAX_PROCESSES 参数调整归档进程的数量:

      sql

    • ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=4;
      

4. 当前情况的分析

问题描述:在 Oracle RAC 数据库中,V$RECOVERY_FILE_DEST 查询出来的归档日志总大小和使用大小为 0

这种情况的可能原因如下:

  1. 未启用 FRA

    • 如果未配置 DB_RECOVERY_FILE_DEST,则快速恢复区未启用,V$RECOVERY_FILE_DEST 的值会显示为 0
    • 归档日志可能通过 LOG_ARCHIVE_DEST_n 存储在其他路径。
  2. 归档日志存储在非 FRA 的路径

    • 通过 LOG_ARCHIVE_DEST_n 配置的路径存储了归档日志,而不是 FRA。
  3. 归档模式未启用

    • 如果数据库未处于归档模式,则不会生成归档日志,V$RECOVERY_FILE_DEST 中的值为 0

5. 排查和解决步骤

  1. 检查 FRA 是否启用

    sql

SHOW PARAMETER DB_RECOVERY_FILE_DEST;
SHOW PARAMETER DB_RECOVERY_FILE_DEST_SIZE;

如果未启用 FRA,可以通过以下命令启用:

sql

  • ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='/path/to/fra';
    ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=50G;
    
  • 检查归档日志的存储路径

    sql

SHOW PARAMETER LOG_ARCHIVE_DEST;

如果未配置 LOG_ARCHIVE_DEST_n,可以通过以下命令设置:

sql

  • ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/path/to/archive_logs';
    
  • 检查归档模式

    • 确认数据库是否处于归档模式:

      sql

  • ARCHIVE LOG LIST;
    
  • 如果未启用归档模式,可以使用以下命令启用:

    sql

    • SHUTDOWN IMMEDIATE;
      STARTUP MOUNT;
      ALTER DATABASE ARCHIVELOG;
      ALTER DATABASE OPEN;
      
  • 查询归档日志的存储和大小

    • 查询归档日志的实际路径和大小:

      sql

    • SELECT NAME, BLOCKS, COMPLETION_TIME FROM V$ARCHIVED_LOG;
      

总结

  • V$RECOVERY_FILE_DEST 是用于监控快速恢复区(FRA)的视图,只有启用了 FRA 且归档日志存储在 FRA 中,该视图才会显示非零值。
  • 如果未启用 FRA,可以通过 LOG_ARCHIVE_DEST_n 配置归档日志的存储路径。
  • 归档日志的大小和存储路径可以通过 LOG_ARCHIVE_MAXSIZELOG_ARCHIVE_DEST_n 参数进行调整和监控。
  • 当前问题可能是 FRA 未启用或归档日志存储在非 FRA 的路径中,可根据排查步骤逐一确认并解决。

网站公告

今日签到

点亮在社区的每一天
去签到