在大型商業應用中,數據的異地容災備份十分重要,也必不可少。筆者根據自己的實踐經驗,設計了一套簡潔地實現異地數據自動備份的方法,可供數據庫管理人員參考。文中所有的程序都經過測試,運行良好。這裡模擬的異地運行環境為一主一備兩套Sun Solaris系統,所采用的備份方法為Oracle數據庫提供的標准備份:export。
相關命令
文中主要用到三個命令,這裡先單獨介紹一下:
export: 將數據庫中數據備份成一個二進制系統文件,它有三種模式: 用戶模式、表模式、整個數據庫模式。還可分為三種備份類型:完全型、積累型、增量型。本文以整個數據庫模式下的完全型為例說明。export使用格式為:
exp userid file
其中:userid的用法為username/userpassword,即Oracle中的用戶名/口令。userid必須為exp的第一個參數,file指備份文件所放位置及名稱。
ftp: 一般情況下可通過交互方式實現兩台主機間的數據傳輸,即需要手工輸入目標主機的IP地址、用戶名、口令等。但是當用戶使用ftp命令時,系統將會先在該用戶的注冊目錄中尋找.netrc文件,並首先執行該文件。這樣,我們可以通過編寫一個.netrc的文件來達到自動備份的目的。要注意該文件必須命名為.netrc,且必須存放在啟動ftp命令主機上的用戶注冊目錄裡。ftp常用選項:
-i:進行多文件傳送時關閉交互提示;
-n:在連接之後不進行自動登錄。
本文使用“-i”選項,以關閉交互提示。
crontab: cron是一個永久進程,它由/etc/rc.local啟動執行。cron檢查/var/spool/cron/crontabs/目錄中的文件,找到所要執行的任務和執行任務的時間,並自動完成。該目錄中文件由crontab命令建立。用戶所建立的crontab文件存於/var/spool/cron/crontabs中,其文件名與用戶名一致,本文使用crontab的用戶為Oracle,所建立的文件名也為Oracle。
cron使用者的權限記載在下列兩個文件中: /usr/var/adm/cron/cron.deny和/usr/var/adm/cron/cron.allow。前面的文件中所列的用戶不允許使用crontab命令;後一文件中所列的用戶允許使用crontab命令。crontab命令的常用格式為:
crontab -l:顯示用戶的crontab文件的內容;
crontab -r:從crontabs目錄中刪除用戶的crontab文件;
crontab -e:編輯用戶的crontab文件。
crontab文件每行中有6個字段,前5個為時間設定段,第6個為所要執行的命令。時間段分別為: minutes、hours、day of month、month、day of week,字段之間用空格或Tab分開。字段如果為“*”,表示該字段在所有可能的取值范圍內取值; 如果一個字段是由連字符隔開的兩個數字,表明命令可以在兩個數字之間的范圍內執行。
備份數據庫
設定數據庫的擁有者為Oracle,用戶名為mistest,其口令為test,新建備份目錄為/export/home/oracle/backup。建立一個命名為testbackup的備份文件,文件內容如下:
ORACLE-HOME=/export/home/oracle/815;export ORACLE-HOME
ORACLE-SID=ora815;export ORACLE-SID
rm /export/home/oracle/backup/*
rq=丶date +“%m%d”丶
/export/home/oracle/815/bin/exp mistest/test file=/export/home/oracle
/backup/exp$rq.dmp log=/exoport/home/oracle/backup/exp$rq.log
說明:前兩句對Oracle數據庫初始化,第3條語句清空備份目錄,第4條語句建立一個取當前日期的變量,以便在最後一條語句的備份文件名裡含有當前日期信息。
testbackup編寫完成後,用“chmod +x testbackup”命令授予它可執行權限。