归档日志管理
Oracle 归档模式配置、归档日志管理、空间优化策略
最后更新: 2026-04-15
页面目录
第六章:归档日志管理
文档信息
- 适用版本:Oracle 12c / 19c / 21c
- 阅读时间:约 40 分钟
- 关键概念:归档模式、日志切换、归档空间管理
6.1 归档模式概述
6.1.1 归档 vs 非归档
┌─────────────────────────────────────────────────────────────────┐
│ 日志模式对比 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ NOARCHIVELOG (非归档) ARCHIVELOG (归档) │
│ ───────────────────── ───────────────── │
│ │
│ 在线日志循环覆盖 在线日志归档保存 │
│ │ │ │
│ ▼ ▼ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ Redo01 │──覆盖──►│ Redo02 │ │ Redo01 │──归档──►│ ARC0001 │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
│ ▲ │ │ │
│ └──────────────────────────────┘ │ │
│ ┌─────────┐ ┌─────────┐ │
│ │ Redo02 │──归档──►│ ARC0002 │ │
│ └─────────┘ └─────────┘ │
│ │
│ 特点: 特点: │
│ • 无法时点恢复 • 支持完全恢复 │
│ • 只能冷备份 • 支持热备份 │
│ • DataGuard 不可用 • DataGuard 必需 │
│ • 日志空间自动回收 • 需要管理归档空间 │
│ │
└─────────────────────────────────────────────────────────────────┘
6.1.2 开启归档模式
-- 1. 检查当前日志模式
SELECT log_mode FROM v$database;
-- 2. 关闭数据库
SHUTDOWN IMMEDIATE;
-- 3. 启动到 MOUNT 状态
STARTUP MOUNT;
-- 4. 开启归档
ALTER DATABASE ARCHIVELOG;
-- 5. 打开数据库
ALTER DATABASE OPEN;
-- 6. 确认归档已开启
ARCHIVE LOG LIST;
-- 或
SELECT log_mode, open_mode FROM v$database;
6.2 归档配置
6.2.1 归档目的地配置
-- 本地归档(必需)
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ORCL' SCOPE=SPFILE;
-- 远程归档(DataGuard)
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=ORCLDG LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORCLDG' SCOPE=BOTH;
-- 启用/禁用归档目的地
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1=ENABLE;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=DEFER; -- 临时禁用
-- 查看归档配置
SELECT
dest_id,
destination,
status,
binding,
target
FROM v$archive_dest
WHERE destination IS NOT NULL;
6.2.2 日志切换策略
-- 手动切换日志
ALTER SYSTEM SWITCH LOGFILE;
-- 查看日志切换历史
SELECT
sequence#,
first_time,
next_time,
ROUND((next_time - first_time) * 24 * 60, 2) as minutes
FROM v$log_history
ORDER BY sequence# DESC
FETCH FIRST 10 ROWS ONLY;
-- 查看当前日志状态
SELECT
group#,
sequence#,
bytes/1024/1024 as mb,
status,
archived
FROM v$log;
6.3 归档空间管理
6.3.1 空间监控
-- 查看归档空间使用
SELECT
destination,
ROUND(SPACE_LIMIT/1024/1024/1024, 2) as limit_gb,
ROUND(SPACE_USED/1024/1024/1024, 2) as used_gb,
ROUND((SPACE_USED/SPACE_LIMIT)*100, 2) as usage_pct,
NUMBER_OF_FILES
FROM v$recovery_file_dest;
-- 查看归档文件详情
SELECT
name,
completion_time,
blocks * block_size / 1024 / 1024 as size_mb
FROM v$archived_log
WHERE deleted = 'NO'
ORDER BY completion_time DESC;
6.3.2 归档清理策略
-- 方式1:基于 RMAN 保留策略
-- 配置保留策略(保留最近 7 天)
RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
-- 删除过期归档
RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
-- 方式2:基于备份次数(保留 2 份备份)
RMAN> DELETE ARCHIVELOG UNTIL SEQUENCE = 12345 THREAD = 1;
-- 方式3:强制删除(谨慎使用)
RMAN> DELETE FORCE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-1';
6.3.3 自动化清理脚本
#!/bin/bash
# archive_cleanup.sh - 归档日志自动清理
export ORACLE_SID=ORCL
export ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
# 保留天数
RETENTION_DAYS=7
# 检查归档空间使用率
USAGE=$(sqlplus -s / as sysdba <<EOF
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
SELECT ROUND((SPACE_USED/SPACE_LIMIT)*100, 0) FROM v\$recovery_file_dest;
EXIT;
EOF
)
# 如果使用率超过 80%,执行清理
if [ $USAGE -gt 80 ]; then
echo "$(date): Archive usage is ${USAGE}%, cleaning up..."
rman target / <<EOF
DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-$RETENTION_DAYS';
DELETE EXPIRED ARCHIVELOG ALL;
EXIT;
EOF
echo "$(date): Cleanup completed"
else
echo "$(date): Archive usage is ${USAGE}%, no cleanup needed"
fi
6.4 归档故障处理
6.4.1 常见故障
| 故障现象 | 原因 | 解决方案 |
|---|---|---|
| ORA-00257: archiver error | 归档空间满 | 清理归档或扩容 |
| 日志切换挂起 | 归档目的地不可用 | 检查磁盘/网络 |
| 归档 Gap | 网络中断 | 使用 RMAN 增量恢复 |
| 归档延迟 | I/O 性能问题 | 优化存储或增加 ARCn 进程 |
6.4.2 ORA-00257 处理
-- 1. 检查归档空间
SELECT * FROM v$recovery_file_dest;
-- 2. 临时增加归档进程(加速归档)
ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=4;
-- 3. 手动清理旧归档
-- 使用 RMAN 删除
-- 或移动到其他存储
-- 4. 临时切换归档目的地(应急)
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/tmp/arch_temp' SCOPE=MEMORY;
-- 5. 数据库恢复
ALTER SYSTEM RESUME; -- 如果之前挂起了归档
6.5 本章小结
核心要点
- 归档模式:DataGuard 和时点恢复的基础
- 空间管理:定期清理,设置告警阈值
- 保留策略:根据 RPO 要求设置保留期
- 监控重点:空间使用率、日志切换频率、归档延迟
下一步:学习 第十四章:闪回技术详解