目录标题
RUN {
ALLOCATE CHANNEL ch00 TYPE DISK;
CROSSCHECK ARCHIVELOG ALL;
DELETE NOPROMPT EXPIRED BACKUP;
DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;
DELETE NOPROMPT OBSOLETE;
}
在这个 RUN
块中,RMAN 执行了一系列用于校验和清理过期/不再需要的备份和归档日志的维护操作。总体流程如下:
- 分配磁盘通道 (
ALLOCATE CHANNEL
) —— 为后续的校验和删除操作打开一个磁盘 I/O 通道; - 交叉校验归档日志 (
CROSSCHECK ARCHIVELOG ALL
) —— 使 RMAN 仓库中归档日志的状态与文件系统中实际存在情况保持一致,并将找不到的文件标记为 EXPIRED; - 删除过期备份 (
DELETE NOPROMPT EXPIRED BACKUP
) —— 删除所有已标记为 EXPIRED(物理文件已丢失或损坏)的备份集记录及其对应文件; - 删除过期归档日志 (
DELETE NOPROMPT EXPIRED ARCHIVELOG ALL
) —— 删除所有标记为 EXPIRED 的归档日志; - 删除不再需要的备份和归档日志 (
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。
使用流程
- 先用
REPORT OBSOLETE;
查看哪些文件将被删除; - 再执行
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 仓库和物理存储中不再保留丢失、损坏或超出保留策略的历史数据,从而释放存储空间并保持仓库整洁。