Oracle 归档日志管理与 FRA 空间

适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai
文档版本:v1.0 / 2026-07


1. 概述

归档日志(Archive Log) 和 Flash Recovery Area(FRA) 是 Oracle 备份恢复的核心[1]:

核心概念:

  • 归档日志:Redo Log 的历史副本
  • FRA:统一管理恢复相关文件

2. 归档模式

2.1 查看归档模式

ARCHIVE LOG LIST;

-- 或
SELECT log_mode FROM v$database;
-- ARCHIVELOG / NOARCHIVELOG

2.2 启用归档模式

-- 1. 关闭数据库
SHUTDOWN IMMEDIATE;

-- 2. 启动到 mount
STARTUP MOUNT;

-- 3. 启用归档
ALTER DATABASE ARCHIVELOG;

-- 4. 打开数据库
ALTER DATABASE OPEN;

2.3 关闭归档模式

SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE NOARCHIVELOG;
ALTER DATABASE OPEN;

3. 归档配置

3.1 归档路径

-- 配置归档路径
ALTER SYSTEM SET log_archive_dest_1='location=/u01/archivelog' SCOPE=BOTH;
ALTER SYSTEM SET log_archive_dest_2='location=/u02/archivelog' SCOPE=BOTH;

-- 启用
ALTER SYSTEM SET log_archive_dest_state_1=enable SCOPE=BOTH;
ALTER SYSTEM SET log_archive_dest_state_2=enable SCOPE=BOTH;

-- 格式
ALTER SYSTEM SET log_archive_format='arch_%t_%s_%r.arc' SCOPE=SPFILE;

3.2 使用 FRA

-- 启用 FRA
ALTER SYSTEM SET db_recovery_file_dest_size=100G SCOPE=BOTH;
ALTER SYSTEM SET db_recovery_file_dest='+FRA' SCOPE=BOTH;

-- 归档到 FRA
ALTER SYSTEM SET log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST' SCOPE=BOTH;

3.3 归档进程

-- 增加归档进程
ALTER SYSTEM SET log_archive_max_processes=4 SCOPE=BOTH;

-- 默认 2 个,最大 30 个

4. 归档日志管理

4.1 查看归档日志

SELECT 
  thread#, 
  sequence#, 
  name, 
  archived, 
  status, 
  completion_time,
  bytes/1024/1024 AS size_mb
FROM v$archived_log
ORDER BY sequence# DESC;

4.2 手动归档

-- 强制归档当前 Redo Log
ALTER SYSTEM ARCHIVE LOG CURRENT;

-- 归档所有未归档
ALTER SYSTEM ARCHIVE LOG ALL;

4.3 删除归档日志

-- RMAN 删除
RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';

-- 删除未备份的
RMAN> DELETE ARCHIVELOG ALL NOT BACKED UP 1 TIMES TO DEVICE TYPE DISK;

-- 删除过期
RMAN> CROSSCHECK ARCHIVELOG ALL;
RMAN> DELETE EXPIRED ARCHIVELOG ALL;

5. Flash Recovery Area

5.1 FRA 内容

类型 说明
归档日志 Archive Logs
RMAN 备份 Backupsets, Image Copies
控制文件备份 Controlfile Auto Backup
Flashback Log Flashback Database
多路复用控制文件 Controlfile Copies
多路复用 Redo Log Online Redo Log Copies

5.2 配置 FRA

-- 配置 FRA 大小和位置
ALTER SYSTEM SET db_recovery_file_dest_size=200G SCOPE=BOTH;
ALTER SYSTEM SET db_recovery_file_dest='+FRA' SCOPE=BOTH;

-- 查看配置
SHOW PARAMETER db_recovery_file_dest;

5.3 FRA 使用情况

SELECT 
  name,
  space_limit / 1024 / 1024 / 1024 AS limit_gb,
  space_used / 1024 / 1024 / 1024 AS used_gb,
  space_reclaimable / 1024 / 1024 / 1024 AS reclaimable_gb,
  number_of_files
FROM v$recovery_file_dest;

5.4 FRA 详细使用

SELECT 
  file_type,
  percent_space_used,
  percent_space_reclaimable,
  number_of_files
FROM v$flash_recovery_area_usage
ORDER BY percent_space_used DESC;

6. FRA 空间不足处理

6.1 检查空间

-- 总体使用
SELECT 
  space_limit / 1024 / 1024 / 1024 AS limit_gb,
  space_used / 1024 / 1024 / 1024 AS used_gb,
  (space_limit - space_used) / 1024 / 1024 / 1024 AS free_gb
FROM v$recovery_file_dest;

-- 各类型使用
SELECT * FROM v$flash_recovery_area_usage;

6.2 清理空间

-- 1. 删除过期备份
RMAN> CROSSCHECK BACKUP;
RMAN> DELETE EXPIRED BACKUP;

-- 2. 删除过期归档
RMAN> CROSSCHECK ARCHIVELOG ALL;
RMAN> DELETE EXPIRED ARCHIVELOG ALL;

-- 3. 删除旧归档
RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';

-- 4. 删除废弃备份
RMAN> DELETE OBSOLETE;

6.3 增加 FRA 空间

-- 增大 FRA
ALTER SYSTEM SET db_recovery_file_dest_size=500G SCOPE=BOTH;

6.4 ORA-19809: FRA 超限

-- 1. 紧急清理
RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-3';

-- 2. 增大 FRA
ALTER SYSTEM SET db_recovery_file_dest_size=500G SCOPE=BOTH;

-- 3. 检查
SELECT * FROM v$recovery_file_dest;

6.5 ORA-00257: 归档错误

-- 1. 检查归档空间
SELECT * FROM v$recovery_file_dest;

-- 2. 清理归档
RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-1';

-- 3. 增加空间
ALTER SYSTEM SET db_recovery_file_dest_size=300G SCOPE=BOTH;

7. 归档日志保留策略

7.1 RMAN 保留策略

-- 恢复窗口
RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;

-- 冗余
RMAN> CONFIGURE RETENTION POLICY TO REDUNDANCY 2;

7.2 归档日志保留

-- 删除策略
RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 2 TIMES TO DEVICE TYPE DISK;

-- 应用于备库
RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;

8. 监控归档

8.1 归档频率

SELECT 
  TO_CHAR(completion_time, 'YYYY-MM-DD HH24') AS hour,
  COUNT(*) AS log_count,
  SUM(bytes) / 1024 / 1024 AS size_mb
FROM v$archived_log
WHERE completion_time > SYSDATE-7
GROUP BY TO_CHAR(completion_time, 'YYYY-MM-DD HH24')
ORDER BY hour DESC;

8.2 归档延迟

-- 检查未归档
SELECT thread#, sequence#, archived, status 
FROM v$log 
WHERE archived='NO';

8.3 历史统计

SELECT 
  TRUNC(completion_time) AS day,
  COUNT(*) AS log_count,
  SUM(bytes) / 1024 / 1024 / 1024 AS size_gb
FROM v$archived_log
WHERE completion_time > SYSDATE-30
GROUP BY TRUNC(completion_time)
ORDER BY day DESC;

9. 常见坑与排错

9.1 ORA-00257: 归档空间满

修复:

-- 1. 检查 FRA
SELECT * FROM v$recovery_file_dest;

-- 2. 清理归档
RMAN> CROSSCHECK ARCHIVELOG ALL;
RMAN> DELETE EXPIRED ARCHIVELOG ALL;
RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-3';

-- 3. 增大 FRA
ALTER SYSTEM SET db_recovery_file_dest_size=500G SCOPE=BOTH;

9.2 ORA-19815: FRA 超限

修复:

-- 1. 检查
SELECT * FROM v$flash_recovery_area_usage;

-- 2. 清理
RMAN> DELETE OBSOLETE;
RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-3';

-- 3. 增大空间
ALTER SYSTEM SET db_recovery_file_dest_size=500G SCOPE=BOTH;

9.3 归档进程慢

修复:

-- 1. 增加归档进程
ALTER SYSTEM SET log_archive_max_processes=8 SCOPE=BOTH;

-- 2. 检查 I/O
-- 3. 检查归档路径

9.4 ORA-16014: 归档失败

修复:

-- 1. 检查归档路径
SHOW PARAMETER log_archive_dest;

-- 2. 检查空间
df -h /u01/archivelog

-- 3. 启用备用路径
ALTER SYSTEM SET log_archive_dest_state_1=enable SCOPE=BOTH;

9.5 备库归档不同步

修复:

-- 1. 检查 Gap
SELECT * FROM v$archive_gap;

-- 2. 手动注册归档
ALTER DATABASE REGISTER LOGFILE '/u01/arch/1_100.arc';

-- 3. 检查网络

10. 最佳实践

  1. 生产启用归档:必备
  2. 使用 FRA:统一管理
  3. 多路归档:至少 2 个位置
  4. 定期清理:避免空间不足
  5. 监控 FRA:v$recovery_file_dest
  6. 合理 FRA 大小:至少 2 倍日归档量
  7. RMAN 删除策略:自动化
  8. 归档进程充足:避免延迟
  9. 备库归档策略:APPLIED ON STANDBY
  10. 监控告警:提前预警

11. 参考资料

[1] Oracle Database Administrator’s Guide 19c, “Managing Archived Redo Logs”
https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/

[2] Oracle Database Backup and Recovery User’s Guide 19c, “Flash Recovery Area”
https://docs.oracle.com/en/database/oracle/oracle-database/19/bradv/