rman及catalog執行於linux,target資料庫執行於windows,oracle版本一致,而且都是64位平臺。
歷史原因資料庫執行於windows,但顯然linux更適合於系統管理,因此此處rman暫時執行於混合環境。
備份策略
資料庫用於OLTP系統,容量中等,全庫接近400G,但有大約200G的資料是不變化只用於查詢的,將其表空間置於read only模式,備份時可以忽略這些資料。其他200G左右的資料每天都在發生變化,如果系統需要回復,要儘可能的恢復到最新的資料。已經做了dataguard災備。
基於以上情況制定備份策略,每週日凌晨做0級備份,週一到週六做1級備份。
備份指令碼
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.*/目錄下的指令碼不要帶任何副檔名。