最近在擺弄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語句另換行
╮(╯▽╰)╭