好的,我们来详细梳理一下 Oracle 数据库中重做日志、归档日志,以及 RMAN 删除归档日志和归档删除策略 的知识点。为了方便理解,我会分模块讲解,并给出具体操作示例。


1️⃣ Oracle 数据库日志概念

(1) 重做日志(Redo Log)

  • 作用:记录数据库的所有修改操作(INSERT、UPDATE、DELETE),保证事务的 可恢复性
  • 组成
    • 在线重做日志组(Online Redo Log Group):至少两个组,每组可以有多个成员(Member)。
    • 日志缓冲区(Log Buffer):内存中暂存 redo 信息,然后写入 redo log 文件。
  • 特点
    • 用于 实例崩溃恢复
    • 日志是 循环使用 的(覆盖写入)。

(2) 归档日志(Archived Redo Log)

  • 作用
    • 当数据库处于 归档模式(ARCHIVELOG mode) 时,已填满的 redo log 会被归档成 归档日志文件
    • 支持 完整恢复(完全恢复/介质恢复)
  • 用途
    • 数据备份恢复。
    • 数据库闪回、远程备库同步(Data Guard)。
  • 开启方式-- 查看当前归档模式 SQL> archive log list; -- 设置归档模式 SQL> shutdown immediate; SQL> startup mount; SQL> alter database archivelog; SQL> alter database open;

2️⃣ RMAN 删除归档日志(Archivelog)

(1) 删除策略

  • RMAN 提供 DELETE ARCHIVELOG 来安全删除归档日志。
  • 基本命令RMAN> DELETE ARCHIVELOG ALL; RMAN> DELETE ARCHIVELOG COMPLETED BEFORE 'SYSDATE-7'; -- 删除7天前的归档日志
  • 注意
    • 不能删除仍然 需要进行恢复的归档日志
    • 可以结合 备份策略 安全删除: RMAN> DELETE ARCHIVELOG ALL BACKED UP 1 TIMES TO DISK; 解释:
      • 删除所有至少已备份一次到磁盘的归档日志。

(2) 配合备库(Data Guard)使用归档删除策略

当存在 备用数据库(Standby Database) 时:

  • 不能盲目删除归档日志,因为 备库可能还没应用
  • RMAN 提供了 ARCHIVELOG ALL BACKED UP X TIMES TO DEVICEFOR STANDBY 选项:
-- 删除已经传送并应用到备库的归档日志
RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7' 
     BACKED UP 1 TIMES TO DISK 
     NOT BACKED UP TO DEVICE TYPE SBT_TAPE
     FOR STANDBY;

  • 解释
    • FOR STANDBY:确保归档日志已传送并应用到备用库。
    • 避免删除备库尚未应用的日志,从而破坏数据同步。

(3) 自动归档删除策略

  • 备用库端:可以使用 log_archive_dest_n 参数设置 DELETE OBSOLETEREGISTER 策略。
  • 主库端
    • 配合 RMAN 自动化脚本,定期删除归档: rman target / <<EOF DELETE ARCHIVELOG ALL BACKED UP 2 TIMES TO DISK; EOF

3️⃣ RMAN 示例:完整流程

-- 1. 查看归档日志
RMAN> list archivelog all;

-- 2. 删除已经备份的归档日志
RMAN> delete archivelog all backed up 1 times to disk;

-- 3. 删除7天前的归档日志(安全策略)
RMAN> delete archivelog until time 'SYSDATE-7';

-- 4. 删除已备份且已应用到备库的归档日志
RMAN> delete archivelog all backed up 1 times to disk for standby;


✅ 总结

概念用途删除策略
Redo Log事务恢复循环使用,不删除
Archived Log介质恢复、备库同步RMAN 删除策略,必须备份或已应用到备库
RMAN 删除策略确保安全删除BACKED UP X TIMES TO DISK / FOR STANDBY / 时间条件

关键点

  1. 在线日志不可删除,归档日志才能删除。
  2. 对有备库的系统,删除归档日志必须保证备库已应用。
  3. 使用 RMAN 自动化脚本,可以安全管理归档日志。