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. 最佳实践
- 生产必启用:备份基础
- 多目的地:冗余
- FRA 足够:避免满
- 定期清理:空间
- RMAN 备份归档:保护
- 监控告警:80%
- 归档进程足够:性能
- Redo 日志大小:合理切换
- 归档模式 + Flashback:快速恢复
- 文档化:流程
15. 参考资料
[1] Oracle Database Administrator’s Guide 19c, “Archived Redo Logs” https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/