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 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. 最佳实践
- 生产启用归档:必备
- 使用 FRA:统一管理
- 多路归档:至少 2 个位置
- 定期清理:避免空间不足
- 监控 FRA:v$recovery_file_dest
- 合理 FRA 大小:至少 2 倍日归档量
- RMAN 删除策略:自动化
- 归档进程充足:避免延迟
- 备库归档策略:APPLIED ON STANDBY
- 监控告警:提前预警
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/