4. 数据库归档模式配置
归档模式是Oracle备份恢复体系的“总开关”。它决定了联机重做日志在被LGWR写满并发生日志切换后,是直接允许被覆盖,还是必须先由归档进程(ARCn)复制成归档日志文件保存下来。理解这一点,才能理解为什么生产库几乎必须运行在ARCHIVELOG模式,以及归档路径、FRA和归档日志管理为什么是DBA日常运维的核心工作。
一、ARCHIVELOG与NOARCHIVELOG的本质区别
在NOARCHIVELOG模式下,数据库发生日志切换时,旧的联机重做日志组被标记为可重用,其中的重做记录随之丢失。这意味着数据库只能恢复到最近一次一致性的全库备份点,备份之后的所有事务无法前滚。因此NOARCHIVELOG只适合测试库、只读报表库或可以随时重建的环境。
在ARCHIVELOG模式下,日志切换触发ARCn把即将被覆盖的联机重做日志内容写出为归档日志文件。只要归档日志链完整,配合全库备份和当前控制文件,就可以做到不完全恢复、时间点恢复(PITR)、基于SCN的恢复,以及Data Guard的日志传输。代价是额外的I/O、归档空间占用和归档失败风险。
切换归档模式需要数据库处于MOUNT状态,且必须先正常关闭再启动到MOUNT:
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;
SQL> ARCHIVE LOG LIST;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 1024
Next log sequence to archive 1026
Current log sequence 1026
其中“Automatic archival Enabled”表示ARCn自动归档已开启,这是生产环境的必备状态。若显示Disabled,需要执行 ALTER SYSTEM ARCHIVE LOG START; 或设置 LOG_ARCHIVE_START=TRUE(旧版本)。
二、归档路径规划
归档路径决定了归档日志写到哪里。Oracle支持两种方式:一是使用 LOG_ARCHIVE_DEST_n 显式指定本地或远程目录;二是使用 DB_RECOVERY_FILE_DEST(即FRA),由Oracle自动管理目录结构。生产环境通常采用“FRA为主 + 远程备库/备份目录为辅”的组合。
规划归档路径时,需要关注几个关键参数:
LOG_ARCHIVE_DEST_1:主归档目标,通常指向FRA或独立归档盘。LOG_ARCHIVE_DEST_2:备用目标,可指向Data Guard备库或远程备份存储。LOG_ARCHIVE_FORMAT:归档文件命名格式,建议包含线程号、序列号和RESETLOGS ID,例如%t_%s_%r.arc。LOG_ARCHIVE_MAX_PROCESSES:ARCn进程数,默认4,高并发写入场景可适当增加。
一个典型的生产配置示例:
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1=
'LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl' SCOPE=BOTH;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2=
'SERVICE=standby1 ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby' SCOPE=BOTH;
ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='%t_%s_%r.arc' SCOPE=SPFILE;
ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=6 SCOPE=BOTH;
注意:LOG_ARCHIVE_FORMAT 是静态参数,修改后需要重启实例。归档路径应避免与数据文件、联机日志放在同一物理磁盘,防止I/O争用和单盘故障导致数据与归档同时丢失。
三、归档日志管理
归档日志会持续增长,管理不当会迅速耗尽磁盘。日常管理包括查看归档状态、监控空间、删除过期归档和验证归档完整性。
查看归档日志信息常用视图:
-- 查看归档目的地状态
SELECT dest_id, status, destination, error FROM V$ARCHIVE_DEST;
-- 查看归档日志历史
SELECT sequence#, first_time, next_time, applied, deleted
FROM V$ARCHIVED_LOG ORDER BY sequence#;
-- 查看FRA空间使用
SELECT name, space_limit/1024/1024 AS limit_mb,
space_used/1024/1024 AS used_mb,
space_reclaimable/1024/1024 AS reclaim_mb
FROM V$RECOVERY_FILE_DEST;
删除归档日志必须谨慎。如果归档已备份到磁带或远程存储,并且不再需要用于恢复,可以使用RMAN删除:
RMAN> CROSSCHECK ARCHIVELOG ALL;
RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
RMAN> DELETE EXPIRED ARCHIVELOG ALL;
切勿直接用操作系统命令 rm 删除归档文件,否则控制文件中仍保留记录,导致RMAN认为归档存在但实际缺失,恢复时才会暴露问题。正确做法是先CROSSCHECK,再DELETE。
四、FRA配置与生产注意事项
FRA(Fast Recovery Area)是Oracle推荐的集中恢复区域,用于存放归档日志、控制文件自动备份、数据文件副本、闪回日志等。FRA由 DB_RECOVERY_FILE_DEST 和 DB_RECOVERY_FILE_DEST_SIZE 两个参数控制。
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=200G SCOPE=BOTH;
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='/u01/fra' SCOPE=BOTH;
FRA空间规划需要估算:全库备份大小 + 归档日志日增量 × 保留天数 + 闪回日志 + 控制文件自动备份。例如数据库500GB,每日归档增量20GB,保留7天,则FRA至少需要 500 + 20×7 = 640GB,再留30%余量,建议设置为850GB以上。
FRA空间不足时,Oracle会先删除已备份到磁带且不再需要的归档日志来腾出空间;如果仍不足,数据库可能挂起(ARCHIVER HANG)。因此必须设置合理的 DB_RECOVERY_FILE_DEST_SIZE,并监控 V$RECOVERY_AREA_USAGE。
最后,归档模式配置完成后,务必执行一次完整的验证:手动切换日志触发归档,检查归档文件是否生成、RMAN是否能识别、备库是否能接收。只有归档链完整且可恢复,ARCHIVELOG模式才真正发挥了它的价值。