Oracle自動清理日誌腳本

一、背景 

   繼《Oracle備份還原實踐》後(鏈接地址:http://kaliarch.blog.51cto.com/8966921/1978151),由於業務增長,頻繁的備份還原對於磁盤空間有了更大的空間需求,基本每週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號以前的日誌

73a2fc0e9ed74ca852b7842b3012bed6.png

如果手動在磁盤清理過日誌文件,需要在rman內檢查,然後刪除過期的日誌

crosscheck archivelog all;            #檢查所有歸檔日誌
list expired archivelog all;            #列出過期的歸檔日誌
delete noprompt expired archivelog all;        #刪除過期的歸檔日誌
delete noprompt archivelog all;               #清除所有的歸檔日誌

三、自清理腳本

github地址

#!/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=orcl
    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

配合定時任務清理磁盤,此在腳本內寫的判斷磁盤使用率大於80%進行清理,也可根據自己需求進行判斷,或每次都執行清理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章