Oracle:清理备份和归档

RUN {
  ALLOCATE CHANNEL ch00 TYPE DISK;
  CROSSCHECK ARCHIVELOG ALL;
  DELETE NOPROMPT EXPIRED BACKUP;
  DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;
  DELETE NOPROMPT OBSOLETE;
}

在这个 RUN 块中,RMAN 执行了一系列用于校验和清理过期/不再需要的备份和归档日志的维护操作。总体流程如下:

  1. 分配磁盘通道 (ALLOCATE CHANNEL) —— 为后续的校验和删除操作打开一个磁盘 I/O 通道;
  2. 交叉校验归档日志 (CROSSCHECK ARCHIVELOG ALL) —— 使 RMAN 仓库中归档日志的状态与文件系统中实际存在情况保持一致,并将找不到的文件标记为 EXPIRED;
  3. 删除过期备份 (DELETE NOPROMPT EXPIRED BACKUP) —— 删除所有已标记为 EXPIRED(物理文件已丢失或损坏)的备份集记录及其对应文件;
  4. 删除过期归档日志 (DELETE NOPROMPT EXPIRED ARCHIVELOG ALL) —— 删除所有标记为 EXPIRED 的归档日志;
  5. 删除不再需要的备份和归档日志 (DELETE NOPROMPT OBSOLETE) —— 根据当前的保留策略(Retention Policy)删除标记为 OBSOLETE 的备份集和归档日志。

下面逐条解释每个命令的作用和背景:

1. ALLOCATE CHANNEL ch00 TYPE DISK;

作用

  • 手动分配一个磁盘通道:在当前 RUN { … } 块内,打开名为 ch00 的磁盘 I/O 通道,供后续所有维护命令使用。
  • 必须在 RUN 块内执行,分配的通道只在该块范围内有效,结束时 RMAN 自动释放。

背景

  • RMAN 通过“通道”(channel)与数据库进行 I/O 交互,分为 DISK(文件系统)和 SBT_TAPE(媒体管理器)两类。本例中选择 DISK,表示操作系统文件。
  • 如果未手动分配,RMAN 会使用 CONFIGURE 配置的自动通道,但手动分配可精确控制设备类型、并行度等。(Oracle 文档)

2. CROSSCHECK ARCHIVELOG ALL;

作用

  • 同步仓库与物理文件:RMAN 检查所有归档日志在文件系统中的实际状态,找不到的文件会被标记为 EXPIRED,但不删除记录或物理文件。

为什么要做

  • 如果有人在操作系统层面误删或移动了归档日志,RMAN 仓库(control file 或 catalog)仍会认为它们存在。CROSSCHECK 能及时更新状态,避免后续删除或恢复操作出错。(Oracle 文档)

3. DELETE NOPROMPT EXPIRED BACKUP;

作用

  • 删除所有状态为 EXPIRED 的备份集:包括物理文件(若仍存在)和 RMAN 仓库中的记录,并将其状态更新为 DELETED。
  • NOPROMPT:跳过确认提示,适合脚本自动化。

典型使用场景

  • 在备份失败、手动删除或磁带介质移除后,需要清理 RMAN 中已“失联”的备份记录。
  • 先执行 CROSSCHECK BACKUP; 再执行本命令,以确保所有找不到的备份都被准确标记;然后 DELETE EXPIRED BACKUP; 真正清理。(Gouranga’s Tech Blog)

4. DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;

作用

  • 删除所有状态为 EXPIRED 的归档日志:与上一步类似,但针对归档日志文件。

参考示例

RMAN> DELETE EXPIRED ARCHIVELOG ALL;
  • 该命令会移除仓库中标记为 EXPIRED 的归档日志记录,并物理删除文件(若存在)。(Blog)

5. DELETE NOPROMPT OBSOLETE;

作用

  • 删除所有根据当前保留策略判定为 OBSOLETE(不再需要)的备份集和归档日志

  • OBSOLETE 的判定依据:

    • 冗余(REDUNDANCY)策略:保留最近 N 份完整备份,其余标为 OBSOLETE;
    • 恢复窗口(RECOVERY WINDOW)策略:保留 X 天内所需的备份和归档日志,过期的标为 OBSOLETE。

使用流程

  1. 先用 REPORT OBSOLETE; 查看哪些文件将被删除;
  2. 再执行 DELETE OBSOLETE NOPROMPT; 批量删除。

注意事项

  • 删除后,无法通过 RMAN 恢复被删除的文件,务必确认保留策略设置正确。
  • 如果想只删除磁盘或磁带上对应的 OBSOLETE 文件,可加上 DEVICE TYPE DISK|SBT_TAPE。(极客资源)

整体脚本示例

RUN {
  ALLOCATE CHANNEL ch00 TYPE DISK;
  CROSSCHECK ARCHIVELOG ALL;
  DELETE NOPROMPT EXPIRED BACKUP;
  DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;
  DELETE NOPROMPT OBSOLETE;
}

该脚本可集成到定期维护作业中,确保 RMAN 仓库和物理存储中不再保留丢失、损坏或超出保留策略的历史数据,从而释放存储空间并保持仓库整洁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值