--rman_checkcross.rman crosscheck archivelog all; delete noprompt expired archivelog all; exit
下面来说明一下这个脚本,其中第一个bat脚本就是去调用了delte_archive.sql和rman_checkcross.rman这2个命令文件,最主要的就是delete_archive.sql这个脚本的执行内容,用SQL拼接的方式找出已经应用过的归档文件,然后生成del命令,在OS级别删除它们,最后再调用rman命令交叉校验,最后删除expired的归档日志(OS级别的删了,也要通知控制文件这些归档已经不存在了,需要删除),如果日志还未在备库应用,那么之前的那条select语句是不会查询出行记录的。
今天第一次做的时候delete_archivelog.sql中select语句用DEST_ID=1的时候,居然没查到数据行,用了DEST_ID=2才有结果,而后来又碰到用DEST_ID=2没结果,于是又换回DEST_ID=1才行。其实最主要的就是要关注SQL脚本要跑出结果,否则之前的那些命令都等于不起作用了,没有结果,OS命令就不会去del这些文件,而如果OS级别没有del掉这些文件,那么RMAN就检查不出是expired的,因此也就不会从控制文件中删除这些归档的相关记录。