一、ARCn的核心定位与使命
定义
ARCn是Oracle的关键后台进程(n为编号,可多进程并行),负责在日志切换(Log Switch)后将已满的在线重做日志文件(Online Redo Log File)复制到归档日志文件(Archived Redo Log)中。核心使命
- 保障数据可恢复性:为时间点恢复(PITR)提供完整日志链。
- 支持高可用架构:为Data Guard备库提供实时日志源。
- 释放在线日志空间:确保LGWR可复用日志文件组。
二、工作原理与归档机制
1. 数据流转路径
graph LR
A[LGWR写满在线日志] --> B[触发日志切换]
B --> C[CKPT更新检查点]
C --> D[ARCn进程被唤醒]
D --> E[复制在线日志 → 归档日志]
2. ARCn触发条件
| 触发场景 | 原理说明 |
|---|---|
| 日志切换(Log Switch) | 当LGWR写满当前日志组时,自动切换到下一组,并通知ARCn归档上一组日志。 |
| 手动切换日志 | ALTER SYSTEM SWITCH LOGFILE 强制触发归档。 |
| 强制归档 | ALTER SYSTEM ARCHIVE LOG CURRENT 立即归档当前日志(不切换)。 |
3. 归档流程详解
- 识别待归档日志
- 通过控制文件定位已切换且未归档的在线日志文件。
- 读取在线日志
- 以顺序读取方式获取日志内容(避免竞争LGWR写入)。
- 写入归档日志
- 按
LOG_ARCHIVE_FORMAT命名规则生成文件(如arc_%t_%s_%r.arc)。 - 写入到
LOG_ARCHIVE_DEST_n指定的路径(本地/远程)。
- 按
- 更新元数据
- 在控制文件和数据文件头记录归档日志序列号。
- 更新
V$ARCHIVED_LOG视图状态。
三、核心特性
多进程并行(Multiple ARCn)
- 通过
LOG_ARCHIVE_MAX_PROCESSES(默认4)控制最大进程数,应对高负载归档。
- 通过
异步归档(Asynchronous Archiving)
- ARCn独立于LGWR运行,不阻塞事务提交。
多目的地冗余
- 支持配置多个归档目标(
LOG_ARCHIVE_DEST_1至LOG_ARCHIVE_DEST_10),增强可靠性。
- 支持配置多个归档目标(
实时传输(Real-Time Transport)
- 12c+支持
REALTIME APPLY,ARCn直接传输日志到Data Guard备库(不等待日志切换)。
- 12c+支持
压缩与加密
- 支持日志压缩(
COMPRESSION=ENABLE)和TDE加密(ENCRYPTION=ENABLE)。
- 支持日志压缩(
四、关键作用
完整备份与恢复
RECOVER DATABASE UNTIL TIME '2023-10-01 12:00:00'; -- 依赖归档日志Data Guard日志传输
LOG_ARCHIVE_DEST_2='SERVICE=standby ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)'日志挖掘(LogMiner)
BEGIN DBMS_LOGMNR.ADD_LOGFILE(LOGFILENAME => '/arch/arc_123.arc'); END;避免日志覆盖
- 非归档模式下,在线日志被覆盖后将无法恢复历史数据。
五、配置与监控
1. 核心参数
| 参数 | 说明 |
|---|---|
LOG_ARCHIVE_DEST_n |
定义归档目标(本地目录/远程备库),如:LOCATION=/arch/ 或 SERVICE=standby |
LOG_ARCHIVE_FORMAT |
归档文件命名规则(%s日志序列号, %t线程号, %rRESETLOGS标识) |
LOG_ARCHIVE_MAX_PROCESSES |
最大ARCn进程数(默认4,可动态调整) |
LOG_ARCHIVE_DEST_STATE_n |
启用/禁用目标(ENABLE/DEFER) |
2. 关键监控视图
| 视图 | 用途 |
|---|---|
V$ARCHIVED_LOG |
查看已生成的归档日志(序列号、路径、大小、完成时间) |
V$ARCHIVE_DEST |
监控归档目标状态(STATUS、ERROR、TRANSMIT_LAG) |
V$ARCHIVE_PROCESSES |
显示所有ARCn进程状态(PROCESS、STATUS、LOG_SEQUENCE) |
V$LOG |
检查在线日志状态(GROUP#、STATUS、ARCHIVED) |
3. 健康指标
| 指标 | 健康标准 | 异常处理 |
|---|---|---|
| 归档延迟 | TRANSMIT_LAG < 60秒 |
检查网络或I/O性能 |
| 归档失败率 | V$ARCHIVE_DEST.ERROR为空 |
检查目标路径权限/空间 |
| ARCn进程阻塞 | V$ARCHIVE_PROCESSES.STATUS=BUSY |
增加LOG_ARCHIVE_MAX_PROCESSES |
六、性能调优与高可用设计
1. 调优场景
归档速度慢(ARCH wait events)
解决方案:- 增加ARCn进程数:
ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=6; - 分离归档目录到高速磁盘(如SSD)。
- 启用归档压缩(需Oracle Advanced Compression):
ALTER SYSTEM SET LOG_ARCHIVE_COMPRESSION=ENABLE;
- 增加ARCn进程数:
归档目标空间不足
解决方案:- 配置RMAN自动清理策略:
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY; - 增加多路归档目标:
ALTER SYSTEM SET LOG_ARCHIVE_DEST_3='LOCATION=/backup_arch/';
- 配置RMAN自动清理策略:
2. 高可用设计
- 多路复用归档路径
-- 主路径 + 备路径 LOG_ARCHIVE_DEST_1='LOCATION=/arch1/ MANDATORY' LOG_ARCHIVE_DEST_2='LOCATION=/arch2/ OPTIONAL' - 远程归档到备库
LOG_ARCHIVE_DEST_2='SERVICE=standby SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)' - 使用快速恢复区(FRA)
DB_RECOVERY_FILE_DEST_SIZE = 100G DB_RECOVERY_FILE_DEST = '/fra'
七、故障处理
1. 典型故障与解决
| 故障现象 | 原因 | 解决方案 |
|---|---|---|
| ORA-00257: archiver error | 归档目标空间满 | 清理归档文件或增加空间 |
| ORA-16038: 日志无法归档 | 归档路径权限错误 | chown oracle:oinstall /arch |
| ORA-03113: 通信通道断开 | ARCn进程异常终止 | 检查alert.log,重启实例 |
| 备库归档延迟 | 网络带宽不足/主库ARCn阻塞 | 启用压缩,增加LOG_ARCHIVE_MAX_PROCESSES |
2. 强制归档
-- 立即归档当前日志(不切换日志组)
ALTER SYSTEM ARCHIVE LOG CURRENT;
-- 归档指定日志组
ALTER SYSTEM ARCHIVE LOG GROUP 3;
八、与相关进程的协作
| 进程 | 协作机制 |
|---|---|
| LGWR | LGWR触发日志切换后通知ARCn归档。 |
| CKPT | CKPT更新检查点后,ARCn确保该检查点前的日志已归档(用于恢复起点)。 |
| RMAN | RMAN备份时依赖归档日志实现增量备份和时间点恢复。 |
| MRP | Data Guard中MRP进程(Managed Recovery Process)应用ARCn传输的日志到备库。 |
九、核心知识点总结表
| 类别 | 核心要点 |
|---|---|
| 核心功能 | 将在线日志复制为归档日志 |
| 触发条件 | 日志切换(自动/手动)、ALTER SYSTEM ARCHIVE LOG命令 |
| 多进程支持 | LOG_ARCHIVE_MAX_PROCESSES控制并行数(默认4) |
| 关键参数 | LOG_ARCHIVE_DEST_n(路径)、LOG_ARCHIVE_FORMAT(文件名格式) |
| 高可用设计 | 多路复用目标、FRA管理、实时传输 |
| 监控视图 | V$ARCHIVED_LOG(归档列表)、V$ARCHIVE_DEST(目标状态) |
| 与备份关系 | RMAN必须依赖归档日志实现完整恢复 |
十、运维命令速查
-- 查看归档状态
SELECT DEST_NAME, STATUS, ERROR FROM V$ARCHIVE_DEST;
-- 检查未归档日志
SELECT GROUP#, THREAD#, SEQUENCE#, ARCHIVED
FROM V$LOG WHERE ARCHIVED='NO';
-- 清理过期归档(RMAN)
RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
-- 重建损坏的归档(需备份)
RMAN> BACKUP AS COPY ARCHIVELOG SEQUENCE 123;
注:
- 非归档模式下ARCn不启动,无法进行时间点恢复!
- Oracle 21c引入Block-Level Tracking,ARCn仅传输修改的块,大幅减少日志量。
通过深入理解ARCn机制,DBA可确保数据库的可恢复性和高可用性,尤其在Data Guard、增量备份等场景中,ARCn的稳定运行直接决定了系统的RPO(恢复点目标)指标。记住:没有完整的归档日志链,任何备份都是不安全的!
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




