Oracle 归档日志管理与 FRA 空间

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 LogFlashback Database
多路复用控制文件Controlfile Copies
多路复用 Redo LogOnline 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/