Oracle 数据库归档模式详解

Oracle 数据库归档模式详解

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


1. 概述

归档模式(ARCHIVELOG)保证数据可恢复[1]:

详细见:Oracle 数据库归档模式配置Oracle 归档日志管理详解


2. 归档模式

2.1 ARCHIVELOG

- Redo 日志归档
- 支持热备份
- 支持时间点恢复
- 生产推荐

2.2 NOARCHIVELOG

- 不归档
- 仅支持冷备份
- 无法时间点恢复
- 测试环境

3. 查看

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

ARCHIVE LOG LIST;

4. 启用

4.1 关闭

SHUTDOWN IMMEDIATE;

4.2 启动 MOUNT

STARTUP MOUNT;

4.3 切换

ALTER DATABASE ARCHIVELOG;
-- 或 NOARCHIVELOG

4.4 打开

ALTER DATABASE OPEN;

5. 归档配置

5.1 LOG_ARCHIVE_DEST_n

ALTER SYSTEM SET LOG_ARCHIVE_DEST_1 = 'LOCATION=/u01/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=prod';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2 = 'SERVICE=stby1 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=stby1';

5.2 FRA

ALTER SYSTEM SET db_recovery_file_dest = '/u01/fra';
ALTER SYSTEM SET db_recovery_file_dest_size = 50G;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1 = 'LOCATION=USE_DB_RECOVERY_FILE_DEST';

5.3 LOG_ARCHIVE_FORMAT

ALTER SYSTEM SET LOG_ARCHIVE_FORMAT = '%t_%s_%r.arc' SCOPE=SPFILE;

6. 归档进程

6.1 ARCn

- 归档进程
- 默认 4 个
- LOG_ARCHIVE_MAX_PROCESSES

6.2 LGWR

- 10g+ LGWR 直接归档
- 性能

6.3 调整

ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES = 4;

7. 强制归档

7.1 切换日志

ALTER SYSTEM SWITCH LOGFILE;

7.2 归档当前

ALTER SYSTEM ARCHIVE LOG CURRENT;

7.3 全部

ALTER SYSTEM ARCHIVE LOG ALL;

8. 查看

8.1 归档日志

SELECT name, sequence#, first_time, next_time, status
FROM v$archived_log
ORDER BY sequence# DESC;

SELECT dest_id, status, error 
FROM v$archive_dest_status;

8.2 进程

SELECT process, status, sequence#, block#, blocks
FROM v$managed_standby;

8.3 FRA

SELECT name, space_limit, space_used, space_reclaimable
FROM v$recovery_file_dest;

SELECT file_type, percent_space_used
FROM v$flash_recovery_area_usage;

9. 归档管理

9.1 清理

RMAN> CROSSCHECK ARCHIVELOG ALL;
RMAN> DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;
RMAN> DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
RMAN> DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7' BACKED UP 1 TIMES TO DEVICE TYPE DISK;

9.2 备份

RMAN> BACKUP ARCHIVELOG ALL DELETE INPUT;
RMAN> BACKUP ARCHIVELOG FROM TIME 'SYSDATE-1' DELETE INPUT;

9.3 保留

CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;

10. 空间问题

10.1 ORA-00257

- 归档空间满
- 清理
- 增大空间

10.2 ORA-19809

- FRA 满
- 清理
- 增大 FRA

10.3 处理

# 紧急清理
RMAN> CROSSCHECK ARCHIVELOG ALL;
RMAN> DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;
RMAN> DELETE NOPROMPT ARCHIVELOG UNTIL TIME 'SYSDATE-3';

详细见:Oracle 归档日志管理与 FRA 空间


11. 热备份

11.1 需要 ARCHIVELOG

- 热备份必须 ARCHIVELOG 模式
- BEGIN BACKUP
- 复制文件
- END BACKUP

11.2 RMAN

RMAN> BACKUP DATABASE;
# 无需 BEGIN/END BACKUP

12. 时间点恢复

12.1 需要 ARCHIVELOG

- PITR 必须 ARCHIVELOG
- 归档日志完整

12.2 流程

RMAN> SHUTDOWN IMMEDIATE;
RMAN> STARTUP MOUNT;
RMAN> SET UNTIL TIME "...";
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN RESETLOGS;

详细见:Oracle RMAN 不完全恢复详解


13. Data Guard

13.1 需要 ARCHIVELOG

- Data Guard 必须 ARCHIVELOG
- 归档传输

13.2 传输

- ARCH 传输
- LGWR 传输(SYNC/ASYNC)

详细见:Oracle Data Guard Redo 传输详解


14. 应用场景

14.1 生产

- ARCHIVELOG
- 热备份
- 时间点恢复
- Data Guard

14.2 测试

- NOARCHIVELOG
- 节省空间
- 简单

14.3 数据仓库

- 可 ARCHIVELOG 或 NOARCHIVELOG
- 取决于 RPO

15. 最佳实践

  1. 生产 ARCHIVELOG:必须
  2. FRA 充足:空间
  3. 多路归档:安全
  4. 定期清理:空间
  5. 监控:FRA 使用
  6. 告警:空间
  7. 备份归档:RMAN
  8. 测试:恢复
  9. 文档:配置
  10. 演练:定期

16. 参考资料

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