刪除data guard歸檔日誌

ewelamb發表於2013-11-19

連結:

標題:刪除data guard歸檔日誌
作者:
惜分飛

Oracle Data Guard 是透過歸檔檔案來進行資料同步的。 主庫的歸檔檔案,我們可以在RMAN 備份的時候進行刪除,但是備庫的歸檔檔案無法自動刪除,需要寫指令碼來定時刪除。

#!/bin/bash
export ORACLE_HOME=/opt/oracle/product/10.2.0/db_1
export ORACLE_SID=zjch
export ARCHIVE_DIR=/opt/oracle/oradata/zjch/archive
export LOG_FILE=/home/oracle/logs/del_archive.log
 
echo "開始刪除歸檔日誌:`date`……">>$LOG_FILE
if [ `whoami` != 'oracle' ]
then
echo "Error: You must be oracle to execute.">>$LOG_FILE
exit 99
fi
 
del_seq=`ls -tr $ARCHIVE_DIR/|grep -v stdarch | head -1|cut -f2 -d_`
$ORACLE_HOME/bin/sqlplus -silent "/ as sysdba" <tmp.log
set pagesize 0 feedback off verify off heading off echo off
select max(sequence#) from v\$ARCHIVED_LOG where APPLIED='YES';
exit;
XFF
max_sn=`cat tmp.log`
rm tmp.log
max_sn=$(( $max_sn - 20 ))
#我這裡是保留最近的20個歸檔檔案,這個具體情況自己決定
 
while [[ ${del_seq} -lt ${max_sn} ]]
do
  echo "${ARCHIVE_DIR}/1_${del_seq}_681145105.dbf">>$LOG_FILE
  rm ${ARCHIVE_DIR}/1_${del_seq}_681145105.dbf
  #這裡是我定義歸檔檔案的格式,具體根據自己的歸檔檔案格式來匹配,關鍵是匹配日誌的sequence no。
  del_seq=$(( $del_seq + 1 ))
done
echo "刪除歸檔日誌結束:`date`……">>$LOG_FILE
 
#清楚controlfile中資訊
$ORACLE_HOME/bin/rman target / <>$LOG_FILE
crosscheck archivelog all;
delete expired archivelog all;
YES
exit;
XIFENFEI
 
echo "………………………………………………………………………………………………………………………">>$LOG_FILE

重點是在讀取現在存在的歸檔日誌檔案中sequence最小值時,
使用了ls -tr $ARCHIVE_DIR/|grep -v stdarch | head -1|cut -f2 -d_

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7191998/viewspace-777003/,如需轉載,請註明出處,否則將追究法律責任。

相關文章