如何在控制文件中删除过去rman备份到磁带的备份集

  小程序备案     |      2023-09-30
如何在控制文件中删除过去rman备份到磁带的备份集

案例分析:

问题描述:监控短信通知oracle服务器磁盘空间报警。登录主机后,确认备份目录使用率过高。该目录仅用于rman备份,rman保留策略为1份。一般情况下,不可能出现磁盘空间报警。检查rman backup 脚本,备份存储在本地磁盘,脚本中删除过期的备份策略没有问题,如下:report obsolete;

crosscheck archivelog all;crosscheck backup;crosscheck copy;删除noprompt 过期备份;删除noprompt 过期副本;删除noprompt 过时;

手动执行删除过期备份命令,报如下错误(而且从备份日志看,每次执行这一步也是报错,所以过期备份并没有被删除,导致磁盘空间紧张): RMAN delete过时的; --错误RMAN-06091:备份通道不匹配RMAN-00571:==================================================================RMAN-00569:===============错误消息堆栈如下==============RMAN-00571:====================================================================RMAN-03002:删除命令于05/07/2008 失败22:04:21RMAN-06091:没有分配用于维护的通道(适当类型)

这个命令没有问题。为什么执行失败呢?我列出了备份信息,发现有SBT类型的备份。突然想起最近通过rman全库迁移的方式对oracle服务器进行了搬迁,使用NBU将旧库备份到磁带库。旧库的备份信息保存在控制文件中,新库的控制文件在重定位过程中使用旧库。这些保存在控制文件中旧库中的备份是在检查时发现的,并没有分配。合适的频道,不能删除。所以执行命令的时候就报错了,那么现在的问题就是如何删除控制文件中到磁带的备份信息。 RMAN列表备份摘要;备份列表================关键TY LV S设备类型完成时间#Pieces #Copies压缩标签------- -- -- - - ---------- --------------- ------- -------- ---------- - --41333 B 0 A SBT_TAPE 15-FEB-17 1 1 无HOT_DB_BK_LEVEL041340 B 0 A SBT_TAPE 15-FEB-17 1 1 无HOT_DB_BK_LEVEL0...41372 B A A SBT_TAPE 16-FEB-17 1 1 无TAG20170216T00092941386 B F A SBT_TAPE 20-FEB-17 1 1 无TAG20170220T001015...

对于生产,首先强制删除磁盘类型的过期备份以释放空间。 RMAN强制删除无提示废弃设备类型磁盘;

尝试想办法删除磁带的备份信息,但问题的关键是现在没有磁带备份设备,所以无法为其分配磁带通道。如何给磁带分配通道?幸运的是,我看到了类似的案例。假设您当前的备份策略仅使用磁盘,但您有几个想要删除的旧磁带备份。您可以使用虚拟sbt API 分配维护通道来执行磁带备份的删除(因为介质管理器不再可用)。然后,您可以使用delete obsolete 命令删除磁带备份。下面是一个示例,展示了如何执行这些操作: RMAN allocate Channel for Maintenance device type sbtparms 'SBT_LIBRARY=Oracle.disksbt,ENV=(BACKUP_DIR=/tmp )';RMAN delete obsolete;Although the media manager is not available no more, RMAN 模拟对介质管理层(MML) 的调出,并成功启动维护命令来删除您想要删除的旧磁带备份。

所以执行如下,删除过期、过时的SBT类型备份: RMAN allocate Channel for Maintenance device type sbt parms 'SBT_LIBRARY=oracle.disksbt, ENV=(BACKUP_DIR=/tmp)'; RMAN删除noprompt obsolete; RMAN删除noprompt过期备份; RMAN发布通道;

再次查看备份集信息,发现仍然有SBT类型的备份。这是怎么回事?继续执行看看会发生什么:RMAN列表备份摘要; RMAN 为维护设备类型sbt parms 'SBT_LIBRARY=oracle.disksbt, ENV=(BACKUP_DIR=/tmp)' 分配通道;分配的通道: ORA_MAINT_SBT_TAPE_2channel ORA_MAINT_SBT_TAPE_2: S ID=1281 instance=notedb2 device type=SBT_TAPEchannel ORA_MAINT_SBT_TAPE_2: WARNING: Oracle Test Disk API 注意:如果您之前使用过SBT,但没有磁带备份设备,rman 无法连接到磁带通道,oracle给出了上面的测试API。

RMAN 删除备份;备份片列表BP 密钥BS 密钥Pc# Cp# 状态设备类型片名称-------- ------- --- --- ------- - -- --------- ----------41333 41333 1 1 可用SBT_TAPE bk_41368_1_93597715141334 41334 1 1 可用SBT_TAPE bk_41367_1_93597715041372 41372 1 1 可用SBT_TAPE al_41 407_1_93605816941385 41385 1 1 可用SBT_TAPE al_41418_1_93640377941386 41386 1 1 可用SBT_TAPE cntrl_41420_1_936403815Do您确实要删除上述对象(输入“是”或“否”)? yesRMAN-06207:警告:由于RMAN-06208:状态不匹配,无法删除SBT_TAPE 通道的18 个对象。使用CROSSCHECK 命令修复状态

RMAN交叉检查备份; RMAN删除noprompt过期备份; RMAN列表备份摘要;从上面可以看出,未删除的SBT备份是由于其SBT_TAPE状态不匹配,需要执行CROSSCHECK来检查备份的有效性。严重警告:直接对生产数据库进行删除备份操作是不允许的。因为当前的操作已经被安全记录下来,所以执行这个命令来检查状态,最终找到问题并解决。

转载:https://www.cnblogs.com/zfox2017/p/6610388.html