#! /bin/bash
source /home/oracle/.bash_profile
/opt/app/oracle/product/11.2.0/bin/rman target sys/sysPass@stbdb nocatalog log /home/oracle/bin/logs/"`date +%m%d`"_rman.log append <<EOF
run
{
crosscheck archivelog all;
delete expired archivelog all;
delete noprompt expired archivelog all;
DELETE ARCHIVELOG ALL COMPLETED before 'SYSDATE-7';
}
EOF
#前3行代码为后来添加,在standby 服务器中,如果备份规则设置成保留一分备份集是不行的。因为在standby中,并没有备份集。
所以只能只留几天的归档。
前段时间执行可能出错。因为没有加日志,也没看到,今天出错了,+RECOVERY 空间不够。
SHELL 修改如下:
[oracle@dg1 bin]$ cat delete_archive.sh
#! /bin/bash
source /home/oracle/.bash_profile
/opt/app/oracle/product/11.2.0/bin/rman target sys/sysPass@stbdb nocatalog log /home/oracle/bin/logs/"`date +%m%d`"_rman.log append <<EOF
run
{
DELETE ARCHIVELOG ALL COMPLETED before 'SYSDATE-7;
}
EOF
[oracle@dg1 bin]$
再用一个SHELL 删除ASMCMD 目录下的过期文件(如果上面的RMAN 删除不成功,那就这个吧)
这个脚本使用GRID用户登录ASMCMD.
[grid@dg1 ~]$ cat del_log.sh
#!/bin/sh
#su - oracle
source /home/grid/.bash_profile
arch_dir='+RECOVERY/stbdb/archivelog/'
del_date=`date +%Y_%m_%d -d'-7 day'`
asmcmd rm -rf $arch_dir$del_date
[grid@dg1 ~]$