Oracle database 通過linux下命令crontab 基於RMAN實現oracle數據庫自動備份

俄羅斯服務器本來有自動清理歸檔日誌腳本的
—exdp方式、(個人認爲很不嚴謹) 我之前也不清楚、一直沒有出問題、 也沒來找我、


前些天找到我、歸檔日誌不自動備份清理了、 導致歸檔日誌寫滿、數據庫無法登陸、
現在只能是運維人員手工清理、 讓我查下原因、解決下


大概查了下、 問題原因是因爲root密碼過期、 之前的腳本是掛在root下的、通過crontab定時執行、 root密碼過期導致crontab失效、 我拿出的解決方案是重置下root密碼、 因爲甲方涉及到密碼問題流程比較繁瑣、 不是很樂意、問我有沒有別的辦法、
那隻能改到oracle用戶下咯、再換成rman備份、、、、



腳本如下:

#zyz
#backupscript

source /home/oracle/.bash_profile_hrt

export BACK_DATE=`date +%Y%m%d`

export BACKUP_PATH=/data/spi_bak/rman

echo `mkdir -p ${BACKUP_PATH}/${BACK_DATE}`

rman target /  msglog=${BACKUP_PATH}/${BACK_DATE}/bak_0_$BACK_DATE.log << EOF

run  
{  
allocate channel ch1 device type disk;  #分配通道  
allocate channel ch2 device type disk;  
sql 'alter system archive log current'; #歸檔當前日誌  
backup database format '${BACKUP_PATH}/${BACK_DATE}/data_%s.bak';  
backup format '${BACKUP_PATH}/${BACK_DATE}/conbak_%s.bak' current controlfile;  
backup spfile format ='${BACKUP_PATH}/${BACK_DATE}/spfile_%s.bak';
crosscheck backup;  
crosscheck archivelog all; 
sql 'alter system archive log current';  
backup archivelog all format '${BACKUP_PATH}/${BACK_DATE}/arch_%s.bak' delete all input;  
crosscheck backup;  
crosscheck archivelog all;  
delete noprompt expired backup;  
delete noprompt obsolete;  
delete noprompt backup of database completed before 'sysdate -1';  
delete noprompt archivelog all;  
delete noprompt backup of archivelog all completed before 'sysdate -1';  
release channel ch1;  
release channel ch2;  
} 


exit;

EOF
$ crontab -e
10 3 * * * /data/spi_bak/script/zback.sh



$ crontab -l


這裏說下exdp(導入導出方式)備份和RMAN備份方式的區別、 exdp導入導出、 設置定時任務、把整個用戶導出作爲備份(因爲我們這個項目就用一個用戶)
這種方法有什麼弊端呢、 定時任務設置每天早上8點備份、 當數據庫在2號早上7點出問題了、 我們手裏就只有1號早上8點的備份、從1號早上8點到2號早上7點這段時間的數據就是個很大的問題、
用RMAN呢、 如果出問題了、 就可以用歸檔日誌、去把這段時間的數據找回來、 大概就是這樣、
還有一個就是rman備份會壓縮、相比較於exdp備出來的文件應該是小的、具體的壓縮效果沒有特別注意過、 但是能節省下服務器資源嘛、

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