linux基於cron的rman自動增量備份指令碼及設定

rongshiyuan發表於2012-09-01

linux基於cron的rman自動增量備份指令碼及設定

rman及catalog執行於linux,target資料庫執行於windows,oracle版本一致,而且都是64位平臺。

歷史原因資料庫執行於windows,但顯然linux更適合於系統管理,因此此處rman暫時執行於混合環境。

備份策略

資料庫用於OLTP系統,容量中等,全庫接近400G,但有大約200G的資料是不變化只用於查詢的,將其表空間置於read only模式,備份時可以忽略這些資料。其他200G左右的資料每天都在發生變化,如果系統需要回復,要儘可能的恢復到最新的資料。已經做了dataguard災備

基於以上情況制定備份策略,每週日凌晨做0級備份,週一到週六做1級備份。

target資料庫要開啟塊變化追蹤機制,然後建立恢復目錄

備份指令碼


 1 #!/bin/bash
 2 
 3 set -e
 4 
 5 #############################################################
 6 # sunday incremental level 0
 7 # other day incremental level 1
 8 #
 9 # rman and catalog on oracle 10.2.0.4 64bits for debian amd64
10 # target on oracle 10.2.0.4 64bits for windows 2003 r2 sp2 x64 
11 #############################################################
12 
13 export ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
14 rman_bin=$ORACLE_HOME/bin/rman
15 
16 weekday=`date +%a`
17 case "${weekday}" in
18 
19     "Sun")
20         inc_level=0
21         ;;
22     *)
23         inc_level=1
24         ;;
25 esac
26 
27 rman_user=rman_usr
28 rman_passwd=rman_usr
29 catalog_inst_name=catalogd
30 
31 target_sys_passwd=oracle
32 target_inst_name=db_test
33 
34 log_file=/var/log/rman/`date +%F`_${inc_level}.log
35 bak_file=d:\rman_bak\bak_%U
36 arc_file=d:\rman_bak\arc_%U
37 ctl_file=d:\rman_bak\ctl_%F
38 
39 $rman_bin log ${log_file} >> /dev/null 2>&1 <
40 
41 connect catalog ${rman_user}/${rman_passwd}@${catalog_inst_name};
42 connect target sys/${target_sys_passwd}@${target_inst_name};
43 
44 run {
45     configure backup optimization on;
46     configure archivelog deletion policy to applied on standby;
47     configure retention policy to redundancy 3;
48     configure controlfile autobackup on;
49     configure controlfile autobackup format for device type disk to ‘${ctl_file}‘;
50 
51     allocate channel ch1 device type disk;
52     backup incremental level ${inc_level} cumulative database format ‘${bak_file}‘ skip readonly plus archivelog format ‘${arc_file}‘;
53 
54     release channel ch1;
55 }
56 
57 crosscheck backup;
58 delete noprompt obsolete;
59 
60 delete noprompt archivelog all completed before ‘sysdate – 14′;
61 
62 exit;
63 EOF
64 
65 exit 0

rman操作日誌記錄於/var/log/rman目錄下,需要在/var/log目錄先新建rman子目錄,不然rman會報錯無法開啟log檔案。指令碼很簡單,就不解釋了。

自動執行

開啟/etc/crontab,編輯cron.daily所在的那行,將其第一個欄位m(minute)改為0或其他小於60的數值,第二個欄位h(hour)改為0,這樣以來cron守護程式每天的0點稍後自動執行/etc/cron.daily目錄下的指令碼。然後將備份指令碼拷貝到/etc/cron.daily目錄下,注意為備份指令碼新增可執行許可權。

特別注意:crond或者直接說run-parts不會執行帶有.sh副檔名的指令碼,也就說/etc/cron.*/目錄下的指令碼不要帶任何副檔名。

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

相關文章