Oracle 数据库归档模式配置

Oracle 数据库归档模式配置

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


1. 概述

归档模式是备份基础[1]:

作用

  • 保留 Redo 历史
  • 支持时间点恢复
  • 支持 Data Guard

详细见:Oracle 归档日志管理


2. 查看归档模式

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

3. 启用归档模式

3.1 关闭

SHUTDOWN IMMEDIATE;

3.2 MOUNT

STARTUP MOUNT;

3.3 启用

ALTER DATABASE ARCHIVELOG;

3.4 打开

ALTER DATABASE OPEN;

3.5 验证

ARCHIVE LOG LIST;
SELECT log_mode FROM v$database;

4. 关闭归档模式

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

5. 归档目的地

5.1 单一

ALTER SYSTEM SET log_archive_dest_1 = 'location=/u01/archive';

5.2 FRA

ALTER SYSTEM SET log_archive_dest_1 = 'location=use_db_recovery_file_dest';
ALTER SYSTEM SET db_recovery_file_dest = '/u01/fra';
ALTER SYSTEM SET db_recovery_file_dest_size = 100G;

5.3 多目的地

ALTER SYSTEM SET log_archive_dest_1 = 'location=/u01/archive';
ALTER SYSTEM SET log_archive_dest_2 = 'location=/u02/archive';
ALTER SYSTEM SET log_archive_dest_3 = 'service=standby async';

5.4 状态

ALTER SYSTEM SET log_archive_dest_state_1 = enable;
ALTER SYSTEM SET log_archive_dest_state_2 = enable;

6. 归档进程

6.1 数量

ALTER SYSTEM SET log_archive_max_processes = 4;

6.2 查看

SELECT * FROM v$archive_processes;

7. 归档日志查看

7.1 v$archived_log

SELECT 
  thread#, 
  sequence#, 
  name, 
  archived, 
  status, 
  completion_time
FROM v$archived_log
ORDER BY sequence# DESC;

7.2 v$log_history

SELECT 
  thread#, 
  sequence#, 
  first_change#, 
  first_time,
  next_change#
FROM v$log_history
ORDER BY sequence# DESC;

7.3 v$archive_dest

SELECT dest_id, status, destination, error 
FROM v$archive_dest 
WHERE status != 'INACTIVE';

8. 归档切换

8.1 手动

ALTER SYSTEM ARCHIVE LOG CURRENT;
-- 或
ALTER SYSTEM SWITCH LOGFILE;

8.2 自动

-- 大小达到自动切换
-- Redo Log 大小决定

9. 归档满处理

9.1 检查

-- 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
FROM v$recovery_file_dest;

9.2 清理

-- RMAN
RMAN> CROSSCHECK ARCHIVELOG ALL;
RMAN> DELETE EXPIRED ARCHIVELOG ALL;
RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
RMAN> DELETE ARCHIVELOG UNTIL TIME 'SYSDATE-7';

9.3 增大 FRA

ALTER SYSTEM SET db_recovery_file_dest_size = 500G;

详细见:Oracle 归档日志管理


10. 归档传输

10.1 Data Guard

ALTER SYSTEM SET log_archive_dest_2 = 'service=standby async valid_for=(online_logfiles,primary_role) db_unique_name=standby';

详细见:Oracle Data Guard 部署

10.2 Stream

-- 归档传输到下游

11. 备份归档

11.1 RMAN

RMAN> BACKUP ARCHIVELOG ALL;
RMAN> BACKUP ARCHIVELOG FROM TIME 'SYSDATE-1' UNTIL TIME 'SYSDATE';
RMAN> BACKUP ARCHIVELOG FROM SEQUENCE 100 UNTIL SEQUENCE 200;

11.2 删除已备份

RMAN> BACKUP ARCHIVELOG ALL DELETE INPUT;
RMAN> BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT;

12. 监控

12.1 归档速率

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

12.2 告警

-- FRA 使用率
SELECT 
  ROUND(space_used / space_limit * 100, 2) AS pct
FROM v$recovery_file_dest;
-- > 80% 告警

13. 常见坑与排错

13.1 ORA-00257

-- 归档满
-- 1. 清理
RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
-- 2. 增大 FRA
ALTER SYSTEM SET db_recovery_file_dest_size = 1T;

13.2 ORA-16014

-- 归档目的地满
-- 1. 检查空间
-- 2. 清理或增大
-- 3. 切换归档
ALTER SYSTEM ARCHIVE LOG CURRENT;

13.3 ORA-19809

-- FRA 满
-- 同上

14. 最佳实践

  1. 生产必启用:备份基础
  2. 多目的地:冗余
  3. FRA 足够:避免满
  4. 定期清理:空间
  5. RMAN 备份归档:保护
  6. 监控告警:80%
  7. 归档进程足够:性能
  8. Redo 日志大小:合理切换
  9. 归档模式 + Flashback:快速恢复
  10. 文档化:流程

15. 参考资料

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