利用sqlplus指令碼刪除備庫歸檔

yangtingkun發表於2011-06-14

一般而言,這種備份或者刪除歸檔的指令碼都是透過作業系統上的shell指令碼實現,不過如果shell不是很熟,類似的功能完全可以利用sqlplus指令碼實現。

 

 

一個9204RACDATA GUARD環境的STANDBY資料庫上的例子。

一共需要建立3個檔案,此外還有一個在呼叫指令碼過程中生成的檔案,第一個檔案sql.sh用來執行sqlplus命令,並最終呼叫生成後的指令碼:

sqlplus system/password@primary_db << EOF
@execute.sql
EOF
chmod 755 delete_archivelog.sh
./delete_archivelog.sh

第二個檔案execute.sql用來設定輸出的格式,並呼叫最終指令碼檔案:

set pages 0 lines 100 feedback off ver off echo off trims on trim on show off term off
spo delete_archivelog.sh
@@call.sql
spo off

最後一個檔案call.sql利用sql拼出rman刪除歸檔的命令,因為是RAC環境,因此需要對兩個THREAD分別進行刪除:

select '/u01/oracle/product/9.2.0.4/bin/rman target / << EOF' from dual;
select 'delete noprompt archivelog until sequence ' || (max(sequence#) - 10) || ' thread ' || thread# || ';'
from v$archived_log
where dest_id = 2
and applied = 'YES'
group by thread#;
select 'EOF' from dual;

最後將sql.sh指令碼新增到crontab中,使得系統可以定時呼叫。

 

 

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

相關文章