如何安全地逐步删除 RMAN 中的备份
为什么要在 RMAN 中删除备份Oracle 恢复管理器RMAN是 Oracle 原生的备份和恢复工具。人们使用RMAN 备份 Oracle 数据库来保护数据文件、控制文件、SPFILE、重做日志等。但有时您会想要删除 RMAN 备份原因如下释放备份存储空间几周的全备份加上归档日志可能会填满您的快速恢复区。当这种情况发生时数据库可能会冻结。只需删除不必要的备份即可释放存储空间。目录不同步。如果您在操作系统级别删除了备份文件绕过 RMANRMAN 仍然会将它们列为 AVAILABLE。由于文件不存在恢复将会失败。您需要删除过期的目录记录来清理混乱。保留策略发生变化。业务需求从“保留 30 天”变为“保留 7 天”。那些较旧的备份变成了过时备份。它们一直占用空间直到您运行 DELETE OBSOLETE。什么是 RMAN 备份删除当您运行 DELETE BACKUP 时RMAN 会做两件事1. 从磁盘上物理删除备份片或通知介质管理器将磁带空间标记为可重用2. 从控制文件和/或恢复目录中删除相应的记录。如果您在操作系统级别删除了备份文件rm 或 delRMAN 的控制文件仍然认为这些备份存在。CROSSCHECK 后跟 DELETE EXPIRED 可以清理记录 — 但无法恢复物理文件。对于磁带备份介质管理器Oracle Secure Backup 或第三方 SBT 库决定物理磁带文件是否被真正删除。通常它只是被标记为可重用。如何逐步删除 RMAN 中的备份下表列出了核心的 RMAN 删除语法以供快速参考。同时我们将提供详细的分步指南说明如何在不同的场景中使用它们。命令功能使用时机DELETE BACKUP从磁盘/磁带删除备份集或备份片并删除目录记录。物理删除文件。您确切知道要删除哪些备份键。与特定键一起使用 — 切勿在没有过滤条件的情况下运行。DELETE BACKUP OF删除特定数据库对象数据文件、表空间、归档日志、控制文件的备份。您想要删除单个表空间或所有归档日志备份但保留其他备份不变。DELETE OBSOLETE根据您配置的保留策略RECOVERY WINDOW 或 REDUNDANCY删除不再需要的备份。定期清理。设置保留策略后每天运行。始终先用 REPORT OBSOLETE 预览。DELETE EXPIRED删除 CROSSCHECK 标记为 EXPIRED物理文件丢失的备份的目录记录。不删除文件 — 仅删除元数据。备份物理文件是在 RMAN 外部删除的操作系统 rm 或 del您需要清理目录以便恢复不会失败。删除超过 7 天或特定日期的备份RMAN 的 DELETE BACKUP 没有直接的 UNTIL TIME 子句。但您可以使用 LIST BACKUP 来标识键然后逐个删除。以下是一个示例sql# Find backups older than 7 days RMAN LIST BACKUP OF DATABASE COMPLETED BEFORE SYSDATE-7; -- Note the BS Key values, then delete eachRMAN DELETE BACKUP 2048;RMAN DELETE BACKUP 2049;对于脚本编写可以使用 REPORT OBSOLETE 配合临时保留策略更改 — 但这有删除过多的风险。大多数 DBA 会编写一个基于 V$BACKUP_PIECE 的小型 PL/SQL 循环来实现精确的基于日期的删除。仅删除归档日志备份如果您想释放归档日志备份片占用的空间但保留磁盘上的原始归档日志文件请使用sqlRMAN DELETE BACKUP OF ARCHIVELOG ALL COMPLETED BEFORE SYSDATE-3;这仅删除备份片RMAN 制作的副本。原始归档日志文件例如 /u01/arch/arch_1_123.arc保持不变。当您的备份存储已满但您仍然需要原始日志进行时间点恢复或因为它们尚未被复制到另一个目标时请使用此命令。如果您想删除原始的归档数据文件副本请使用 DELETE ARCHIVELOG而不是 DELETE BACKUP OF ARCHIVELOG。bashRMAN DELETE ARCHIVELOG ALL COMPLETED BEFORE SYSDATE-3 BACKED UP 1 TIMES TO DEVICE TYPE DISK;从归档日志目录中物理删除 .arc 或 .log 文件。备份片保持不变。注意为了安全起见只有在确认原始归档日志已备份后才删除它们使用 BACKED UP … TIMES 子句。如果您实际上需要释放归档日志目标位置的磁盘空间运行 DELETE BACKUP OF ARCHIVELOG 命令不会释放任何空间。相反如果您只想删除备份文件运行 DELETE ARCHIVELOG 命令会删除错误的文件。手动删除特定的备份片要删除不需要的 RMAN 备份片请使用以下语法bashRMAN DELETE BACKUPPIECE full_path_to_backup_piece;BACKUPPIECE 后面跟的是备份片的完整文件系统路径或磁带句柄。您可以通过运行 LIST BACKUP OF DATABASE 找到此路径。RMAN 会从磁盘中精确删除该备份片并删除其目录记录。同一备份集中的其他备份片不会被删除。警告删除备份片会使整个备份集不完整。如果您删除了一个多片备份集中的一片您将无法再从该备份集恢复。仅在您确定该备份片已损坏或过时时才使用此命令。使用保留策略自动删除 RMAN 备份如果您想自动删除 RMAN 备份请设置保留策略。示例自动删除 RMAN 中超过 7 天的备份。您可以根据需要更改天数。sqlRMAN CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;如果您想要一个每日脚本bash#!/bin/bash rman target / catalog rman/rmancatdb RMAN 中删除备份时的常见问题排查有时您在删除备份时可能会遇到一些错误。以下是解决方法。1. “RMAN-06091: no channel allocated for maintenance”这通常发生在删除磁带备份时。解决方法bashRMAN ALLOCATE CHANNEL FOR MAINTENANCE DEVICE TYPE sbt; RMAN DELETE OBSOLETE;2. 恢复目录显示有备份但物理文件丢失CROSSCHECK DELETE EXPIRED 会删除目录条目。如果在 crosscheck 后备份仍显示为 AVAILABLE则文件可能存在但无法读取权限问题、损坏。在假设文件丢失之前请使用 VALIDATE BACKUP。使用 i2Backup 进行集中备份管理使用 cron 作业管理备份对于单个或几个数据库来说是可行的。但是当您管理跨物理、虚拟和云环境的数十个 Oracle 实例时为所有内容编写脚本会变得过于复杂。i2Backup 由英方软件开发采取了不同的方法。它是一个企业级备份平台通过统一界面处理 Oracle 备份生命周期管理包括自动清理因此您无需为每个数据库编写和维护 RMAN 脚本。管理员只需在中央 Web 控制台中定义备份计划和策略。然后软件会处理其余工作。它将按照预设的备份计划执行备份任务。当备份文件过时时i2Backup 可以配置为根据您的保留规则自动删除它们。Oracle 备份管理的关键能力集中保留策略设置一次保留窗口或冗余规则应用于所有 Oracle 实例让系统处理清理工作无需每个数据库都设置 cron 作业。细粒度恢复选项在 CDB、PDB、归档日志或控制文件级别进行恢复无需提取整个备份集。还支持基于时间戳的时间点恢复。多种存储目标备份到本地磁盘、磁带库、NAS 或对象存储内置重复数据删除功能以减少占用空间。用于勒索软件防护的不可变备份i2Backup 使用不可变存储和防篡改驱动程序防止未经授权的删除。结论以上就是关于如何删除 RMAN 中过期备份的全部内容。这并不复杂使用 DELETE OBSOLETE 根据您的保留策略进行定期清理。当物理文件在 RMAN 外部丢失时使用 CROSSCHECK DELETE EXPIRED。只有在您确切知道备份键或备份片时才使用 DELETE BACKUP。永远不要在操作系统级别删除备份文件。这会破坏目录导致空间无法回收和恢复不可靠。您还可以设置保留策略在每日脚本中自动化该过程。如果您管理超过几个 Oracle 数据库请考虑使用像 英方软件 的 i2Backup 这样的集中式平台来管理备份。