如何為Linux上的Oracle 11g做異地備份

異地備份, 好像很高貴的樣子, 當911發生後, 很多廠商推異地備份方案, 都不便宜。我們自己弄了一個不太花錢的簡單版: 其實就只是把備份的檔案, 利用網路FTP到另一個地點, 只要事後可以由備份檔還原資料即可。
規劃要備份的檔案有三種: 1.archivelog, 2. full backup, 3. export dump files
前兩者合在一起, 可以做幾乎任一個時點的資料還原, dump檔則可以簡單的找出之前資料的樣子, 算是多一個保險, 多一個還原資料的方式。
這三種檔案各寫一個Script來備份:
1. Archivelog
#!/bin/sh
HOST='ftp-server'
USER='user1'
PASSWD='pass1'
#D1=`date -d '1 day ago' "+%Y_%m_%d"`
ftp -n -i $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
bin
cd archivelog
mkdir $1
cd $1
lcd /u03/app/oracle/FRA/PRINCO/archivelog/$1
mput *
quit
END_SCRIPT
exit 0
2. Full Backup
#!/bin/sh
HOST='ftp-server'
USER='user1'
PASSWD='pass1'
ftp -n -i $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
bin
cd backupset
lcd /u03/app/oracle/FRA/PRINCO/backupset/$1
mput *FULL*.bkp
quit
END_SCRIPT
exit 0
3. Export dump files
#!/bin/sh
HOST='ftp-server'
USER='user1'
PASSWD='pass1'
#D1=`date -d '1 day ago' "+%Y_%m_%d"`
ftp -n -i $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
bin
cd dmp
lcd /u03/app/oracle/oradata/dpdump
put $1
quit
END_SCRIPT
exit 0
這三個Script分別命名為ftp_arch.sh, ftp_back.sh, ftp_dmp.sh 由於我們每周做一次, 一次備份七天的檔, archivelog, dump檔都可以日為單位, 備份七日份。但full backup也是每周只備一次, 所以它只有一份。另以一個Script來整合:
#!/bin/sh
D1=`date -d '1 day ago' "+%Y_%m_%d"`
D2=`date -d '2 day ago' "+%Y_%m_%d"`
D3=`date -d '3 day ago' "+%Y_%m_%d"`
D4=`date -d '4 day ago' "+%Y_%m_%d"`
D5=`date -d '5 day ago' "+%Y_%m_%d"`
D6=`date -d '6 day ago' "+%Y_%m_%d"`
D7=`date -d '7 day ago' "+%Y_%m_%d"`

M1=`date -d '1 day ago' "+%y%m%d"`
M1=EXPDAT${M1}.DMP
M2=`date -d '2 day ago' "+%y%m%d"`
M2=EXPDAT${M2}.DMP
M3=`date -d '3 day ago' "+%y%m%d"`
M3=EXPDAT${M3}.DMP
M4=`date -d '4 day ago' "+%y%m%d"`
M4=EXPDAT${M4}.DMP
M5=`date -d '5 day ago' "+%y%m%d"`
M5=EXPDAT${M5}.DMP
M6=`date -d '6 day ago' "+%y%m%d"`
M6=EXPDAT${M6}.DMP
M7=`date -d '7 day ago' "+%y%m%d"`
M7=EXPDAT${M7}.DMP

echo "======== start archivelog backup ========"
/root/ftp_arch.sh $D1
/root/ftp_arch.sh $D2
/root/ftp_arch.sh $D3
/root/ftp_arch.sh $D4
/root/ftp_arch.sh $D5
/root/ftp_arch.sh $D6
/root/ftp_arch.sh $D7

echo "======== start backupset backup ========"
/root/ftp_back.sh $D2

echo "======== start dump file backup ========"
/root/ftp_dmp.sh $M1
/root/ftp_dmp.sh $M2
/root/ftp_dmp.sh $M3
/root/ftp_dmp.sh $M4
/root/ftp_dmp.sh $M5
/root/ftp_dmp.sh $M6
/root/ftp_dmp.sh $M7
這個檔命名為: ftp_sche.sh 然後在/etc/crontab檔中加入一筆:
30 6 * * 1 root /root/ftp_sche.sh
這樣, 每周一早上6點半就會自動備份(透過FTP)了。只要在異地設一台FTP伺服器, 就完成異地備份的機制了。

留言

這個網誌中的熱門文章

D-BUS學習筆記

Cisco Switch學習筆記: EtherChannel

Cisco Switch學習筆記: interface的封包錯誤統計