1、Data Guard 主庫歸檔檔案刪除策略:
當我們設定:
RMAN>configure archivelog deletion policy to applied on standby;
在Maximum Availability和 Maximum Performance下,RMAN備份歸檔檔案的時候,加上delete input的時候,歸檔會被刪除。
RMAN> configure archivelog deletion policy to none;
此時歸檔刪除策略會被取消。
2、Data Guard 備庫歸檔檔案刪除策略
此次備庫的歸檔刪除策略是在單機版的基礎上進行升級,增加了日誌功能,支援對2個節點RAC主庫的歸檔檔案在備庫上刪除的功能,可以作為計劃任務執行也可以以互動的形式單獨執行。
由於備庫一般不執行rman備份計劃,所以需要指令碼刪除這些歸檔記錄檔。
[Oracle@ www.bkjia.com backup_scripts]$ vim delstarch.sh
export ORACLE_THREAD=$1
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
export ORACLE_SID=bdspoc
export SHELL_DIR=/u01/app/oracle/backup_scripts
export DATE=$(date +%Y-%m-%d\ %H:%M:%S)
if [ ! $ORACLE_THREAD ];then
read -p "Enter deleted thread[1|2]: "
DB_THREAD=$REPLY
else
DB_THREAD=$ORACLE_THREAD
fi
if [ $DB_THREAD == 1 ];then
del_seq=`ls /arch|grep ^1|cut -f2 -d_|sort -n |head -1`
echo $del_seq "is the minimum archlog sequence"
$ORACLE_HOME/bin/sqlplus -s "sys/***** as sysdba" <<eof >$SHELL_DIR/max_sn.log
set head off;
set feedback;
select max(sequence#) from v\$log_history where THREAD#=1;
exit;
eof
max_sn=`cat /u01/app/oracle/backup_scripts/max_sn.log|awk '{print $1}'|grep ^[0-9]`
#保留最近的20個歸檔,其他都刪除
max_sn=`expr $max_sn - 20`
echo $max_sn "is the maximum archlog sequence"
while [ $del_seq -lt $max_sn ]
do
DATE=$(date +%Y%m%d_%H%M%S)
rm /arch/1_"$del_seq"_816281825.arc
DATE=$(date +%Y-%m-%d\ %H:%M:%S)
#由於log_archive_format 為%t_%s_%r.arc類型,%r為resetlog id
echo "$DATE" /arch/1_"$del_seq"_816281825.arc >> $SHELL_DIR/delarch.log
del_seq=`expr $del_seq + 1`
echo "$DATE" 1_"$del_seq"_816281825.arc
done
elif [ $DB_THREAD == 2 ];then
del_seq=`ls /arch|grep ^2|cut -f2 -d_|sort -n |head -1`
echo $del_seq "is the minimum archlog sequence"
$ORACLE_HOME/bin/sqlplus -s "sys/***** as sysdba" <<eof >$SHELL_DIR/max_sn.log
set head off;
set feedback;
select max(sequence#) from v\$log_history where upper(THREAD#)=2;
exit;
eof
max_sn=`cat /u01/app/oracle/backup_scripts/max_sn.log|awk '{print $1}'|grep ^[0-9]`
max_sn=`expr $max_sn - 20`
echo $max_sn "is the maximum archlog sequence"
while [ $del_seq -lt $max_sn ]
do
rm /arch/2_"$del_seq"_816281825.arc
DATE=$(date +%Y-%m-%d\ %H:%M:%S)
echo "$DATE" /arch/2_"$del_seq"_816281825.arc >> $SHELL_DIR/delarch.log
echo "$DATE" 2_"$del_seq"_816281825.arc has been deleted
del_seq=`expr $del_seq + 1`
done
else
echo "$DATE" There has a fault db_thread value! >> $SHELL_DIR/delarch.log
fi
可以互動式執行,例如:
[oracle@ www.bkjia.com backup_scripts]$ sh delstarch.sh
Enter deleted thread[1|2]: 1 --選擇刪除從哪個節點歸檔來的記錄檔
也可以做成計劃任務執行該指令碼
[root@ www.bkjia.com ~]# crontab -l
0 1 * * * su - oracle -c /u01/app/oracle/backup_scripts/delstarch.sh 1
0 2 * * * su - oracle -c /u01/app/oracle/backup_scripts/delstarch.sh 2
每天1點執行1節點歸檔來的記錄檔,2點執行2節點歸檔來的記錄檔。
推薦閱讀:
Oracle 11G RAC 修改歸檔模式
Oracle RMAN 清除歸檔日誌
Oracle 11g Flashback Data Archive(閃回資料歸檔)