
1、归档模式基本概念Oracle 数据库运行时所有数据修改操作INSERT/UPDATE/DELETE/DDL都会先写入在线重做日志组Online Redo Log Group。在线重做日志是循环覆盖的当一组日志写满后系统自动切换到下一组当所有组都写满后会回到第一组覆盖原有内容。归档模式ARCHIVELOG MODE 是 Oracle 的一种运行模式开启后Oracle 会在每次日志切换时将即将被覆盖的在线重做日志完整复制到指定的磁盘 / ASM 位置生成的文件就是归档日志Archive Log。与之相对的是非归档模式NOARCHIVELOG MODE日志切换时直接覆盖原有内容不保留历史重做日志。1.1、归档模式 vs 非归档模式对比维度归档模式非归档模式数据恢复能力支持时间点恢复PITR可恢复到故障前任意时刻只能恢复到最近一次全量备份时刻备份后的数据全部丢失备份方式支持热备份数据库打开状态下备份只能进行冷备份数据库关闭状态下备份高可用支持是 Data Guard、GoldenGate 等高可用方案的必要前提不支持任何高可用方案备份一致性热备份可获得一致性备份冷备份才能获得一致性备份磁盘空间消耗需要额外空间存储归档日志无额外空间消耗适用场景所有生产环境、核心业务系统仅用于测试环境、开发环境、可重建的非核心系统生产环境铁律所有承载业务数据的 Oracle 数据库必须运行在归档模式下。2、开启归档模式原因实现时间点恢复这是归档模式最核心的价值。没有归档日志RMAN 只能恢复到备份时刻备份之后的所有数据都会丢失。支持热备份可以在数据库正常运行的情况下进行备份不中断业务。高可用基础Data Guard、GoldenGate、RAC 等所有 Oracle 高可用技术都依赖归档日志进行数据同步。数据一致性保障数据库崩溃后归档日志可以用来恢复未写入数据文件的事务保证数据一致性。合规要求等保 2.0、PCI-DSS、银保监会等监管标准都明确要求数据库必须开启归档模式。3、单实例数据库归档模式配置与切换3.1、配置前准备a、规划归档存储1、归档日志必须存储在独立于数据文件和在线重做日志的磁盘 / ASM 磁盘组上2、建议至少保留 30 天的归档日志存储空间按 每日归档量 ×30×1.5 计算3、生产环境推荐使用 ASM 磁盘组如ARCH存储归档日志b、确认维护窗口开启 / 关闭归档模式需要重启数据库必须安排在业务低峰期c、备份数据库切换模式前执行一次全量冷备份作为安全保障3.2、从非归档模式切换到归档模式-- 步骤1以sysdba身份登录数据库 sqlplus / as sysdba -- 步骤2查看当前数据库模式 SELECT log_mode FROM v$database; -- 输出 NOARCHIVELOG 表示当前为非归档模式 -- 步骤3关闭数据库 SHUTDOWN IMMEDIATE; -- 步骤4启动数据库到mount状态 STARTUP MOUNT; -- 步骤5配置归档日志路径二选一 -- 方式A单归档路径推荐使用ASM ALTER SYSTEM SET log_archive_dest_1LOCATIONARCH VALID_FOR(ALL_LOGFILES,ALL_ROLES) SCOPESPFILE; -- 方式B多归档路径冗余备份生产推荐 ALTER SYSTEM SET log_archive_dest_1LOCATIONARCH1 VALID_FOR(ALL_LOGFILES,ALL_ROLES) SCOPESPFILE; ALTER SYSTEM SET log_archive_dest_2LOCATIONARCH2 VALID_FOR(ALL_LOGFILES,ALL_ROLES) SCOPESPFILE; -- 步骤6配置归档日志格式建议统一格式 ALTER SYSTEM SET log_archive_format%t_%s_%r.arc SCOPESPFILE; -- 格式说明%t线程号 %s日志序列号 %r重置日志ID12c必须包含 -- 步骤7开启归档模式 ALTER DATABASE ARCHIVELOG; -- 步骤8打开数据库 ALTER DATABASE OPEN; -- 步骤9验证配置是否生效 SELECT log_mode FROM v$database; -- 输出 ARCHIVELOG 表示切换成功 -- 查看归档日志配置 ARCHIVE LOG LIST; -- 输出应显示 Database log mode: Archive Mode3.3、从归档模式切换到非归档模式建议测试环境使用SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE NOARCHIVELOG; ALTER DATABASE OPEN; -- 验证 SELECT log_mode FROM v$database;4、归档日志管理4.1、查看归档日志信息-- 查看归档日志配置 ARCHIVE LOG LIST; -- 查看所有已生成的归档日志 SELECT name, sequence#, first_time, next_time, blocks*block_size/1024/1024 AS size_mb FROM v$archived_log ORDER BY sequence#; -- 查看每日归档量 SELECT TRUNC(first_time) AS day, COUNT(*) AS count, SUM(blocks*block_size/1024/1024) AS size_mb FROM v$archived_log GROUP BY TRUNC(first_time) ORDER BY day;4.2、手动切换日志并归档-- 手动切换在线重做日志触发归档 ALTER SYSTEM SWITCH LOGFILE; -- 强制归档所有未归档的日志 ALTER SYSTEM ARCHIVE LOG ALL;4.3、安全删除过期归档日志绝对不要使用操作系统 rm 命令直接删除归档日志必须使用 RMAN 命令删除否则控制文件中的归档记录不会更新会导致备份和恢复失败。rman target / -- 查看过期的归档日志 REPORT OBSOLETE ARCHIVELOG; -- 删除所有已备份1次的归档日志 DELETE ARCHIVELOG ALL BACKED UP 1 TIMES TO DEVICE TYPE DISK; -- 删除30天前的归档日志 DELETE ARCHIVELOG ALL COMPLETED BEFORE SYSDATE-30; -- 删除过期的归档日志根据RMAN保留策略 DELETE OBSOLETE ARCHIVELOG;实例生产库归档模式切换的完整流程S — Situation场景某公司 Oracle 11g 生产库一直运行在非归档模式。随着业务增长需要启用 Data Guard 实现容灾但切换到归档模式需要停机。T — Task任务在 30 分钟维护窗口内完成归档模式切换零数据丢失。A — Action行动1、 提前配置归档目录和 FRA2、计划停机窗口凌晨 2:00-2:303、执行切换4、 执行全量 RMAN 备份作为归档模式基线5、验证归档日志正常生成。R — Result结果归档模式在 15 分钟内切换完成归档日志正常生成。随后成功部署 Data Guard 备库实现了零数据丢失的容灾架构。