小伙伴们是不是重要的库、重要的业务实例都已经且必须开启归档模式的。archive log是数据零丢失保障:其中归档日志完整记录所有事务变更,确保介质故障时可通过归档日志+在线日志实现完全恢复(如磁盘损坏),避免数据丢失。同时也是Data Guard实时同步的基础,归档日志实现主备库秒级切换(RPO≈0),支撑RAC集群的故障转移。Data Guard是OCM必考内容。
一、功能特点与技术原理
1. 核心功能
- 数据恢复与一致性:归档日志(Archive Log)是重做日志(Redo Log)的历史备份,记录所有事务变更(插入、更新、删除),确保数据库在故障后可通过日志恢复到一致状态。
- 时间点恢复(PITR):支持恢复到特定时间点,适用于误操作修复。
- 高可用性支持:归档日志是Data Guard物理备库同步的基础,实现数据实时复制和灾备切换。
- 备份与审计:为RMAN备份提供基础,同时记录变更历史用于合规审计。
2. 技术原理
- 日志生成与归档流程:
- 重做日志写入:事务发生时,变更首先写入在线重做日志(Online Redo Log)。
- 日志切换与归档:当在线日志写满后触发切换(ALTER SYSTEM SWITCH LOGFILE),ARCn进程将日志复制到归档目录,生成归档日志(如log_1_123.arc)。
- 恢复机制:故障发生时,通过归档日志+在线日志重做事务,确保数据一致性。
- 关键组件:
- ARCn进程:专责归档日志生成。
- 控制文件:记录归档日志元数据(位置、序列号)。
- 快速恢复区(FRA):10g起支持集中管理归档日志的存储区域。
3. 归档模式 vs. 非归档模式
|
特性 |
归档模式 |
非归档模式 |
|
数据恢复能力 |
支持时间点恢复、介质恢复 |
仅支持完全恢复(冷备) |
|
日志处理 |
在线日志归档后保留 |
在线日志被覆盖 |
|
适用场景 |
生产环境、高可用要求 |
测试环境、非关键数据 |
|
备份策略 |
支持增量备份和实时同步 |
仅支持全量备份 |
二、版本演进与关键改进
- 初始引入:基础归档模式支持,需手动管理日志文件。
- 增强RAC支持:归档日志可共享存储,提升集群可用性。
- LOG_ARCHIVE_DEST_n参数:支持多目的地归档(本地+远程)。
- 闪回技术(Flashback):依赖归档日志实现行级恢复。
- 快速恢复区(FRA):自动管理归档日志,空间不足时删除已备份日志。
- 实时应用(Real-Time Apply):备库可直接应用在线日志,减少同步延迟。
- 压缩归档日志:减少存储占用(BACKUP AS COMPRESSED ARCHIVELOG)。
- 多租户架构(CDB/PDB):每个PDB独立管理归档策略。
- 归档日志策略优化:支持基于冗余策略自动清理(CONFIGURE ARCHIVELOG DELETION POLICY)。
三、归档日志文件格式与结构
1. 文件命名规则
- 格式定义:归档日志文件名由初始化参数 LOG_ARCHIVE_FORMAT 控制,必须包含以下关键匹配符:
- - %s:日志序列号(无前导零)
- - %S:日志序列号(带前导零)
- - %t:重做线程号(无前导零)
- - %T:重做线程号(带前导零)
- - %r:RESETLOGS标识(用于区分不同恢复周期)
- 示例:若设置为 log_archive_format = 'arch_%t_%s_%r.arc',则生成文件名如 arch_1_123_114532.arc。
2. 文件内部结构
- 二进制格式:归档日志与在线重做日志结构一致,包含重做记录头(Redo Record Header)和变更向量(Change Vectors),记录事务修改的物理块地址、旧值/新值等。
- 头尾标识:文件头包含日志序列号、数据库ID、时间戳;文件尾包含校验和(Checksum)确保完整性。
四、写入机制与内部流程
1. 触发条件
- 日志切换(Log Switch):当在线重做日志组写满时,触发 ALTER SYSTEM SWITCH LOGFILE,ARCn进程立即启动归档。
- 强制归档:可手动执行 ALTER SYSTEM ARCHIVE LOG CURRENT 强制归档当前日志组。
2. ARCn进程工作流程
- 日志捕获:ARCn从 v$log 中识别状态为 ACTIVE 或 INACTIVE 的日志组。
- 文件复制:将日志组所有成员复制到归档目标(如 /u01/arch),若配置多目标(LOG_ARCHIVE_DEST_n),则并行写入多个位置。
- 元数据更新:归档完成后,更新控制文件中的 v$archived_log 视图,记录文件名、序列号、SCN等。
3. 写入优化技术
- 并行归档:通过 log_archive_max_processes 增加ARCn进程数(默认2,最大10),提升并发能力。
- 异步I/O:启用 DISK_ASYNCH_IO 参数,减少磁盘等待时间。
- 日志压缩:Oracle 11g+支持 BACKUP AS COMPRESSED ARCHIVELOG,减少存储占用和I/O压力。
五、归档日志管理策略
1. 删除机制
- 手动删除:使用RMAN删除指定时间或序列号之前的日志:
RMAN> DELETE ARCHIVELOG UNTIL TIME 'SYSDATE-7'; -- 删除7天前日志
RMAN> DELETE ARCHIVELOG SEQUENCE 100; -- 删除序列号≤100的日志
- 自动清理:
- 快速恢复区(FRA):当空间使用率超85%时,自动删除已备份的旧归档文件。
- 保留策略:通过 CONFIGURE RETENTION POLICY TO REDUNDANCY 2; 保留最近2份备份关联的日志。
2. 关键管理操作
|
操作类型 |
命令/方法 |
|
查看归档状态 |
SELECT dest_name, status FROM v$archive_dest; |
|
监控空间使用 |
SELECT * FROM v$recovery_area_usage;(关注ARCHIVED LOG行) |
|
跨平台迁移 |
RMAN> BACKUP ARCHIVELOG ALL FORMAT '/backup/arch_%U'; |
|
日志损坏修复 |
ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 3; (重建损坏日志组) |
四、各版本管理脚本(已验证)
1. 基础管理脚本(~10g)
-- 启用归档模式
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
-- 设置归档位置
ALTER SYSTEM SET log_archive_dest_1='LOCATION=/u01/arch' SCOPE=SPFILE;
2. 利用FRA自动管理(Oracle 10g+)
-- 启用FRA
ALTER SYSTEM SET db_recovery_file_dest_size=100G;
ALTER SYSTEM SET db_recovery_file_dest='/u01/fra';
-- 检查空间使用
SELECT * FROM V$RECOVERY_AREA_USAGE;
3. 归档日志清理脚本(Oracle 11g+)
#!/bin/bash
# 删除7天前的归档日志(RMAN)
rman target / <<EOF
DELETE ARCHIVELOG UNTIL TIME 'SYSDATE-7';
EOF
--结合FRA时,空间使用率超80%自动清理旧日志。
4. 多租户环境管理(Oracle 12c+)
-- PDB级别归档配置
ALTER SESSION SET CONTAINER=freepdb1;
ALTER SYSTEM SET log_archive_dest_1='LOCATION=/u01/pdb_arch' SCOPE=SPFILE;
五、高效归档最佳实践
1. 存储与I/O优化
- 分离存储:将归档目录与数据文件、在线日志分盘存储,避免I/O竞争。
- 多目标冗余:配置至少两个本地归档目标(如 LOG_ARCHIVE_DEST_1、LOG_ARCHIVE_DEST_2),并设置 MANDATORY 确保关键日志必归档:
ALTER SYSTEM SET log_archive_dest_1='location=/arch1 MANDATORY';
ALTER SYSTEM SET log_archive_dest_2='location=/arch2 OPTIONAL';
2. 参数调优
|
参数 |
推荐值 |
作用 |
|
log_archive_max_processes |
4 |
增加归档进程并行度 |
|
log_archive_min_succeed_dest |
2 |
强制至少2个目标归档成功 |
|
db_recovery_file_dest_size |
实际存储空间80% |
避免FRA满导致数据库挂起 |
六、故障处理与监控
1. 常见问题排查
- 归档停滞:
- 原因:FRA空间满或 LOG_ARCHIVE_DEST_n 不可写。
- 解决:扩增FRA大小或清理旧日志:
ALTER SYSTEM SET db_recovery_file_dest_size=200G; -- 扩展FRA空间
- 日志损坏:使用 RMAN> VALIDATE ARCHIVELOG ALL; 校验完整性。
2. 状态监控
-- 检查归档模式
SELECT log_mode FROM v$database;
-- 查看归档日志序列
SELECT sequence#, first_time FROM v$archived_log ORDER BY sequence# DESC;
-- 监控ARCn进程
SELECT process, status FROM v$archive_processes;
-- SELECT process, status FROM v$archive_processes;
PROCESS STATUS
__________ __________
0 ACTIVE
1 ACTIVE
2 ACTIVE
3 ACTIVE
4 STOPPED
5 STOPPED
-- 检查归档积压
SELECT thread#, max(sequence#) OVER (PARTITION BY thread#) last_seq
FROM v$archived_log
WHERE dest_id=1 AND applied='YES';
-- 实时归档吞吐量
SELECT dest_name, status FROM v$archive_dest_status
WHERE status <> 'INACTIVE';
七、运维最佳实践
1. 存储规划
- 归档目录与数据文件分盘存储,避免I/O竞争。
- 定期监控FRA使用率(V$RECOVERY_AREA_USAGE)。
--使用RMAN备份归档日志后自动清理:
--删除所有副本
BACKUP ARCHIVELOG ALL DELETE ALL INPUT;
--保留策略设置(例:保留2份备份):
CONFIGURE RETENTION POLICY TO REDUNDANCY 2;
--仅删除指定天数前日志
BACKUP ARCHIVELOG UNTIL TIME 'SYSDATE-7' DELETE ALL INPUT;
3. 故障处理
- 归档目录满:扩展空间或清理旧日志(避免ORA-00257)。
- 日志损坏:使用ALTER DATABASE CLEAR LOGFILE GROUP n重建日志组。
3. 使用体验
- 格式规范:通过 %s/%t/%r 确保文件名唯一性;
- 写入优化:增加ARCn进程、启用压缩与异步I/O;
- 删除策略:结合FRA自动清理与RMAN保留策略避免空间不足;
- 高可用:多目标归档+实时应用最小化数据丢失风险。
Oracle归档日志的功能、管理与优化
382

被折叠的 条评论
为什么被折叠?



