【轉載】Oracle Data Guard 備庫 歸檔檔案 刪除指令碼

renjixinchina發表於2013-04-11

【轉載地址】:http://blog.csdn.net/tianlesoftware/article/details/6194498

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

 

       如果直接刪除歸檔檔案的話,可能會出現一種情況,就是歸檔檔案還沒有來的急apply,就被刪除掉了。所以最安全的做法是在刪除歸檔檔案做一個判斷。 然後在刪除。

 

       整理的一個刪除備庫的shell 指令碼如下:

 

[oracle@qs-xezf-db2 scripts]$ cat del_st_archive.sh

#!/usr/bin/ksh

# created by tianlesoftware

# 2010/12/24

export ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1

export ORACLE_SID=xxxx

export SHELL_DIR=/u02/scripts

 

del_seq=`ls /u02/archivelog/|head -1|cut -f2 -d_`

echo $del_seq

$ORACLE_HOME/bin/sqlplus -s "user/pwd@sid_pd as sysdba" </u02/scripts/max_sn.log

set head off;

set feedback;

select max(sequence#) from v/$log_history;

exit;

eof

max_sn=`cat /u02/scripts/max_sn.log|awk '{print $1}'|grep ^[0-9]`

max_sn=`expr $max_sn - 30`

-- 我這裡是保留最近的30個歸檔檔案,這個具體情況自己決定

echo $max_sn

while [ $del_seq -lt $max_sn ]

do

  rm /u02/archivelog/1_"$del_seq"_737806218.arc

-- 這裡是我定義歸檔檔案的格式,具體根據自己的歸檔檔案格式來匹配,關鍵是匹配日誌的sequence no

  del_seq=`expr $del_seq + 1`

  echo $del_seq

done

 

--指令碼里的紅色部分根據自己的情況進行修改

 

[oracle@qs-xezf-db2 scripts]$ ls

del_st_archive.sh  del_st_arch.log  max_sn.log

--max_sn.log 是存放最大seq tmp檔案。 用來進行比較的

 

新增到crontab,定時執行:

[oracle@qs-xezf-db2 scripts]$ crontab -l

00 6 * * * /u02/scripts/del_st_archive.sh >/u02/scripts/del_st_arch.log 2>&1

 

Linux Crontab 定時任務 命令詳解

http://blog.csdn.net/tianlesoftware/archive/2010/02/21/5315039.aspx

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

相關文章