ITPub博客

首页 > 数据库 > Oracle > asm下如何自动删除standby上已经applied过的归档日志

asm下如何自动删除standby上已经applied过的归档日志

原创 Oracle 作者:warehouse 时间:2013-01-06 20:00:02 0 删除 编辑

由于是asm,所以和文件系统处理起来可能还不太一样,这要完全依赖rman了,不能依赖os了,当然我的这些脚本适合db是文件系统。

[@more@]

首先先写了一个脚本purge_archlog_sql_.sh,内容如下:

ORACLE_BASE=/oracle
ORACLE_HOME=/oracle/product/11.1.0/db_1
ORACLE_SID=lnmsadg
export ORACLE_BASE ORACLE_HOME ORACLE_SID
applied_days=3
cat /dev/null>applied_arch.lst
chmod +x applied_arch.lst
sqlplus -s "/ as sysdba"</dev/null
set feedback off
set pages 0
set head off
set timing off
set echo off
spool applied_arch.lst
select 'run{' from dual;
select 'delete noprompt archivelog sequence '||sequence#||' ;' from v$archived_log where DEST_ID=1 and name like '%.dbf' and status='A'
and SEQUENCE#<(select max(SEQUENCE#) from v$archived_log where applied='YES')
and COMPLETION_TIME<=sysdate-${applied_days}
order by COMPLETION_TIME;
select '}' from dual;

spool off;
exit

EOF
--================================

以上脚本用来生成文件applied_arch.lst,applied_arch.lst的内容就是rman要调用的删除归档日志的脚本,内容大致如下:

$ more applied_arch.lst
run{
delete noprompt archivelog sequence 14254 ;
delete noprompt archivelog sequence 14255 ;
delete noprompt archivelog sequence 14256 ;
delete noprompt archivelog sequence 14257 ;
delete noprompt archivelog sequence 14258 ;
..................

delete noprompt archivelog sequence 14268 ;
delete noprompt archivelog sequence 14269 ;
delete noprompt archivelog sequence 14270 ;
delete noprompt archivelog sequence 14271 ;
delete noprompt archivelog sequence 14272 ;
delete noprompt archivelog sequence 14273 ;

}

--===============================

最后在脚本purge_archlog.sh里调用就可以了,purge_archlog.sh的内容如下:

$ more purge_archlog.sh


PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:$HOME/bin:/usr/bin/X11:/sbin:.

export PATH
export ORACLE_BASE=/oracle
export ORACLE_HOME=/oracle/product/11.1.0/db_1
export PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_SID=lnmsadg

rman target / cmdfile='/home/oracle/purge_archlog/applied_arch.lst' log='/home/o
racle/purge_archlog/purge_archlog.log' append <

--==========================

最后通过crontab自动执行就可以了,crontab -l的结果如下:

$ crontab -l
10 22 * * * purge_archlog_sql.sh >/dev/null 2>&1
20 22 * * * purge_archlog.sh >/dev/null 2>&1
$

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/19602/viewspace-1060033/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2007-12-07

  • 博文量
    717
  • 访问量
    5366319