Oracle数据库中残留了一些备份软件的TAPE类型的备份记录, 这些备份集并不存在本地磁盘中。需要将这些rman记录从控制文件中清除。
RMAN> list backup summary;

对于SBT_TAPE类型的备份,如果直接删除备份集会报错:
RMAN> delete backupset 6719;

因为使用的是DISK通道,无法找到TAPE类型的备份集。
我们单独查看一下备份集
RMAN> list backupset 6719;

使用crosscheck对备份集进行检查,一样无法查询到备份集
RMAN> crosscheck backupset 6719;

我们分一个SBT_TAPE类型的临时通道,重新执行一下上述命令
RMAN> allocate channel for maintenance device type 'SBT_TAPE';
RMAN> crosscheck backupset 6719;

当前crosscheck的状态是AVAILABLE,因为没有传具体的路径参数,这个状态是有问题的。
我们看看能不能删备份集,发现是可以删的。
RMAN> delete backupset 6719;

我们如果给它传一个备份位置的参数,就可以检查当前的备份集是否存在了。但我也不知道备份软件指向的备份位置。当前控制文件中的残存信息对于平时的磁盘类型的备份来说并没有用,而且信息很多,干扰到平时的状态查看。
我们退出当前的临时通道。
RMAN> release channel;

重新分配一个带路径的SBT_SBT通道,指定备份路径为/tmp
RMAN> allocate channel for maintenance device type sbt parms 'SBT_LIBRARY=oracle.disksbt,ENV=(BACKUP_DIR=/tmp)';

此时再做crosscheck检查,应该就会将备份集标识为expired
RMAN> crosscheck backup;
执行后,因为/tmp下并没有备份文件,所有的TAPE类型的备份集都被标识为expired

将不存在的备份记录从控制文件中删除
RMAN> report obsolete;
RMAN> delete noprompt expired backup;

最后退出TAPE通道,检查备份状态,控制文件中只剩下磁盘备份。





