最近在摆弄DG,由于磁盘资源紧缺,需要一个归档日志处理的策略

网上找了几个脚本,发现写的那么麻烦

毛了,于是简单写了一个,实际路径等可以自己在修改

主库备库都可以用,自己再做crontab就好,建议错开时间进行

需要注意,提前查询DEST_ID,下面这个是主库删除的脚本(备库只需更改dest_id即可),我的主库v$archived_log里,主库的归档dest_id=1,备库是dest_id=2

 

  1. #!/bin/bash 
  2.  
  3. ############ easy script by lcrash @ 2011-1-25############ 
  4. for delete DG archive log                              # 
  5. # you should modify USER_HOME && make sure del_dir exists# 
  6. and you can change your keep date by modify SQL below  # 
  7. ########################################################## 
  8.  
  9. USER_HOME=/opt/oracle 
  10. DEL_DIR=$USER_HOME/del_arch 
  11.  
  12. source $USER_HOME/.bash_profile  
  13. $ORACLE_HOME/bin/sqlplus -S "/as sysdba" <<EOF 
  14. set heading off 
  15. set feedback off 
  16. spool /opt/oracle/del_arch/del_arch.list 
  17. select 'rm -rf '||name from v\$archived_log  
  18. where DEST_ID=1 and SEQUENCE#<(select max(SEQUENCE#) from v\$archived_log where applied='YES'and COMPLETION_TIME<=sysdate-0; 
  19. spool off 
  20. exit 
  21. EOF 
  22.  
  23. cd $DEL_DIR 
  24. sed -n '/dbf/p' del_arch.list>del_arch_do.sh 
  25. chmod +x del_arch_do.sh 
  26. source del_arch_do.sh 
  27.  
  28. rm del_arch.list 
  29. mv {,`date +%Y-%m-%d-%H`}del_arch_do.sh 
  30.  
  31.  
  32. rman target / <<EOF 
  33. crosscheck archivelog all
  34. delete obsolete; 
  35. delete noprompt expired archivelog all
  36. EOF 

by the way:

1、我开始使用uniread sqlplus,发现动不了,浪费时间,后面修改为$ORACLE_HOME/bin/sqlplus

防止其他别名取代出问题

2、脚本中的SQL语句一句话太长居然给我认成两行,非常恼火

于是将where语句另换行


╮(╯▽╰)╭