最近在摆弄DG,由于磁盘资源紧缺,需要一个归档日志处理的策略
网上找了几个脚本,发现写的那么麻烦
毛了,于是简单写了一个,实际路径等可以自己在修改
主库备库都可以用,自己再做crontab就好,建议错开时间进行
需要注意,提前查询DEST_ID,下面这个是主库删除的脚本(备库只需更改dest_id即可),我的主库v$archived_log里,主库的归档dest_id=1,备库是dest_id=2
- #!/bin/bash
- ############ easy script by lcrash @ 2011-1-25############
- # for delete DG archive log #
- # you should modify USER_HOME && make sure del_dir exists#
- # and you can change your keep date by modify SQL below #
- ##########################################################
- USER_HOME=/opt/oracle
- DEL_DIR=$USER_HOME/del_arch
- source $USER_HOME/.bash_profile
- $ORACLE_HOME/bin/sqlplus -S "/as sysdba" <<EOF
- set heading off
- set feedback off
- spool /opt/oracle/del_arch/del_arch.list
- select 'rm -rf '||name from v\$archived_log
- where DEST_ID=1 and SEQUENCE#<(select max(SEQUENCE#) from v\$archived_log where applied='YES') and COMPLETION_TIME<=sysdate-0;
- spool off
- exit
- EOF
- cd $DEL_DIR
- sed -n '/dbf/p' del_arch.list>del_arch_do.sh
- chmod +x del_arch_do.sh
- source del_arch_do.sh
- rm del_arch.list
- mv {,`date +%Y-%m-%d-%H`}del_arch_do.sh
- rman target / <<EOF
- crosscheck archivelog all;
- delete obsolete;
- delete noprompt expired archivelog all;
- EOF
by the way:
1、我开始使用uniread sqlplus,发现动不了,浪费时间,后面修改为$ORACLE_HOME/bin/sqlplus
防止其他别名取代出问题
2、脚本中的SQL语句一句话太长居然给我认成两行,非常恼火
于是将where语句另换行
╮(╯▽╰)╭
转载于:https://blog.51cto.com/lcrash/485830