本文轉自http://blog.51cto.com/kaliarch/1983430
一、背景
由于業務增長,頻繁的備份還原對于磁盤空間有了更大的空間需求,基本每周500G的磁盤,空間使用率都會達到85%以上,故編寫oracle清理腳本結合crond自動清理oracle歸檔日志。
二、工具介紹
RMAN(Recovery Manager)是一種用于備份(backup)、還原(restore)和恢複(recover)資料庫的 Oracle 工具。RMAN隻能用于ORACLE8或更高的版本中。它能夠備份整個資料庫或資料庫部件,如表空間、資料檔案、控制檔案、歸檔檔案以及Spfile參數檔案。RMAN也允許您進行增量資料塊級别的備份,增量RMAN備份是時間和空間有效的,因為他們隻備份自上次備份以來有變化的那些資料塊。而且,通過RMAN提供的接口,第三方的備份與恢複軟體如veritas将提供更強大的備份與恢複的管理功能。通過RMAN,也提供了其它更多功能,如資料庫的克隆、采用RMAN建立備用資料庫、利用RMAN備份與移動裸裝置(RAW)上的檔案等工作将變得更友善簡單。9i的RMAN通過增強的自動配置與管理功能,以及特有的塊級别的恢複,将使備份與恢複工作變得更加快捷與完美。
使用RMAN連接配接到資料庫時,預設使用SYSDBA角色登陸。
rman target / #連接配接進rman
DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7'; #删除系統時間7天以前的歸檔日志,不會删除閃回區有效的歸檔日志由于實體 #磁盤dbf檔案很多,如果進行實體删除dbf檔案較麻煩,列出以下指令供實體删除參考
rm -rf `ls -l /home/oracle/app/arch/ |grep Apr|awk '{print $9}'` #PATH可以根據實際環境,删除Apr月的所有歸檔日志
rm -rf `ls -l /home/oracle/app/arch/ |awk '{if ($7<20) print$0}'` #删除20号以前的日志
crosscheck archivelog all; #檢查所有歸檔日志
list expired archivelog all; #列出過期的歸檔日志
delete noprompt expired archivelog all; #删除過期的歸檔日志
delete noprompt archivelog all; #清除所有的歸檔日志
#!/bin/bash
oracle_env() {
source /home/oracle/.bash_profile
export ORACLE_BASE=/home/oracle/app
export ORACLE_HOME=$ORACLE_BASE/oracle/product/12.1.0/dbhome_1
export ORACLE_SID=glpfin
export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
oraclecmd="/home/oracle/app/oracle/product/12.1.0/dbhome_1/bin/sqlplus"
oraclerman="/home/oracle/app/oracle/product/12.1.0/dbhome_1/bin/rman"
}
disk_useper=`/bin/df -Th|grep -v 'Filesystem'|awk '/\/dev\/mapper\/vg00-lv_root/{if ("$(NF)"=="/");print $(NF-1)}'|cut -d% -f1`
oracle_clean() {
oracle_env
${oraclerman} target /<<EOF
DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
crosscheck archivelog all;
list expired archivelog all;
delete noprompt expired archivelog all;
exit;
EOF
}
main() {
if [ ${disk_useper} -gt 80 ];then
oracle_clean
fi
}
main