实例一
假如我们在oracle数据库在迁移当中不小心丢失了一个归档文件,此时RMAN会因为缺少归档日志而不能完成备份,而且Veritas等备份软件由于归档日志的异常导致归档日志备份失败也是经常碰到的。解决方法很简单,执行下面2条命令即可:
RMAN>crosscheckarchivelogall;
RMAN>deleteexpiredarchivelogall;
对这2条命令做一下说明:
在controlfile中记录着每一个archivelog的相关信息,当我们在OS下把这些物理文件delete掉或异常变动后,在controlfile中仍然记录着这些archivelog的信息,当我们手工清除archive目录下的文件后,这些记录并没有被我们从controlfile中清除掉,也就是oracle并不知道这些文件已经不存在了!这时候我们要做手工的清除。
crosscheckarchivelogall;的作用就是检查控制文件和实际物理文件的差别。
deleteexpiredarchivelogall;就是同步控制文件的信息和实际物理文件的信息。
如果单独执行crosscheck而没有执行delete那么备份还是失败的,原因是那些控制文件的信息和实际的信息还是不同。
实例二
这种情况可以通过CROSSCHECKBACKUPPIECE的方式对问题备份进行单独的检查:
RMAN>crosscheckbackuppiece’/u01/backup/orcl_iljnvkad_1_1’;
RMAN>deleteobsolete;
进行检查之后的备份就可以顺利的删除了。
RMAN>crosscheckbackupset1612;
RMAN>deletebackupset1612;
使用CROSSCHECKBACKUPSET的方式也可以,但是比较单独指定被删除的备份,而通过CROSSCHECKBACKUP是无法找到的。其他手工删除的备份,则没有这个问题。
RMAN>crosscheckbackup;
RMAN>deleteexpiredbackup;
说明一下:
crosscheckbackupset命令是检查备份集和实际的文件
(1)备份集有两种状态A(Available,RMAN认为该项存在于备份介质上),X(Expired,备份存在于控制文件或恢复目录中,但是并没有物理存在于备份介质上)
(2)crosscheck的目的是检查RMAN的目录以及物理文件,如果物理文件不存在于介质上,将标记为Expired。如果物理文件存在,将维持Available。如果原先标记为Expired的备份集再次存在于备份介质上(如恢复了损坏的磁盘驱动器后),crosscheck将把状态重新从Expired标记回Available。
(3)crosscheck输出分两部分。第一部分列出确定存在于备份介质上的所有备份集片,第二部分列出不存在于备份介质上的备份集片,并将其标记为Expired。当设置备份保存策略后,一个备份过期,crosscheck之后标记为丢弃的备份状态依旧为availabel。备份策略不会删除过期的备份集,可以使用reportobsolete命令查看过期的备份,deleteobsolete命令删除过期的备份。
关于crosscheck的详细信息可以参考Blog中的第一部分:交叉效验RMAN备份
RMAN系列(七)----RMAN维护
http://blog.csdn.net/xujinyang/article/details/6838036
在 删除过期对象的时候出现了RMAN06207和RMAN06208错误:
RMAN>deleteobsolete;
RMAN06207:WARNING:2objectscouldnotbedeletedforDISKchannel(s)due
RMAN06208:tomismatchedstatus.UseCROSSCHECKcommandtofixstatus
用 crosscheckbackup检查的时候也没有检查这个备份:
RMAN>crosscheckbackup;
------------------------------------------------------------------------------