DG备库磁盘空间满导致无法创建归档(二)

2015-02-03 10:03:21 · 作者: · 浏览: 53
Y2tjcm9zcy5ybWFuJmd0OyZndDtkZWxldGVfYXJjaGl2ZWxvZy5iYXQgCmRlbGV0ZV9hcmNoaXZlbG9nLmJhdCAmZ3Q7Jmd0O2RlbGV0ZV9kZ19hcmNoaXZlbG9nXyVEQVRFOn4wLDQlJURBVEU6fjUsMiUlREFURTp+OCwyJSZxdW90Oy5sb2cgCmV4aXQgCjxicj4KCjxzdHJvbmc+LS1kZWxldGVfYXJjaGl2ZS5zcWwgPC9zdHJvbmc+CnNldCBsaW5lcyAxNTAgCmNvbCBuYW1lIGZvciBhMTUwIApzZXQgcGFnZXNpemUgMCBmZWVkYmFjayBvZmYgdmVyaWZ5IG9mZiBoZWFkaW5nIG9mZiBlY2hvIG9mZiAKc3Bvb2wgZGVsZXRlX2FyY2hpdmVsb2cuYmF0IApzZWxlY3Qg"del '||name from v$archived_log where APPLIED='YES' AND NAME IS NOT NULL and DEST_ID=1; spool off exit;
--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的,因此也就不会从控制文件中删除这些归档的相关记录。
最后把这个脚本添加到 windows任务计划中定期运行即可,由于客户的日志切换频率并不高,因此暂定为每周清一次归档。