實(shí)現(xiàn)Oracle異地?cái)?shù)據(jù)自動(dòng)備份的方案
Oracle異地?cái)?shù)據(jù)自動(dòng)備份現(xiàn)在在很多地方都得到了廣泛的應(yīng)用,就比如在大型商業(yè)應(yīng)用中,數(shù)據(jù)的異地容災(zāi)備份十分重要,也必不可少。筆者根據(jù)自己的實(shí)踐經(jīng)驗(yàn),設(shè)計(jì)了一套簡(jiǎn)潔地實(shí)現(xiàn)異地?cái)?shù)據(jù)自動(dòng)備份的方案,可供數(shù)據(jù)庫(kù)管理人員參考。文中所有的程序都經(jīng)過(guò)測(cè)試,運(yùn)行良好。這里模擬的異地運(yùn)行環(huán)境為一主一備兩套SunSolaris系統(tǒng),所采用的備份方法為Oracle數(shù)據(jù)庫(kù)提供的標(biāo)準(zhǔn)備份:export。
相關(guān)命令
文中主要用到三個(gè)命令,這里先單獨(dú)介紹一下:
export:將數(shù)據(jù)庫(kù)中數(shù)據(jù)備份成一個(gè)二進(jìn)制系統(tǒng)文件,它有三種模式:用戶模式、表模式、整個(gè)數(shù)據(jù)庫(kù)模式。還可分為三種備份類型:完全型、積累型、增量型。本文以整個(gè)數(shù)據(jù)庫(kù)模式下的完全型為例說(shuō)明。export使用格式為:expuseridfile。
其中:userid的用法為username/userpassword,即Oracle中的用戶名/口令。userid必須為exp的第一個(gè)參數(shù),file指?jìng)浞菸募盼恢眉懊Q。
ftp:一般情況下可通過(guò)交互方式實(shí)現(xiàn)兩臺(tái)主機(jī)間的數(shù)據(jù)傳輸,即需要手工輸入目標(biāo)主機(jī)的IP地址、用戶名、口令等。但是當(dāng)用戶使用ftp命令時(shí),系統(tǒng)將會(huì)先在該用戶的注冊(cè)目錄中尋找.netrc文件,并首先執(zhí)行該文件。這樣,我們可以通過(guò)編寫一個(gè).netrc的文件來(lái)達(dá)到自動(dòng)備份的目的。要注意該文件必須命名為.netrc,且必須存放在啟動(dòng)ftp命令主機(jī)上的用戶注冊(cè)目錄里。ftp常用選項(xiàng):
-i:進(jìn)行多文件傳送時(shí)關(guān)閉交互提示;
-n:在連接之后不進(jìn)行自動(dòng)登錄。
本文使用“-i”選項(xiàng),以關(guān)閉交互提示。
crontab:cron是一個(gè)永久進(jìn)程,它由/etc/rc.local啟動(dòng)執(zhí)行。cron檢查/var/spool/cron/crontabs/目錄中的文件,找到所要執(zhí)行的任務(wù)和執(zhí)行任務(wù)的時(shí)間,并自動(dòng)完成。該目錄中文件由crontab命令建立。用戶所建立的crontab文件存于/var/spool/cron/crontabs中,其文件名與用戶名一致,本文使用crontab的用戶為Oracle,所建立的文件名也為Oracle。
cron使用者的權(quán)限記載在下列兩個(gè)文件中:/usr/var/adm/cron/cron.deny和/usr/var/adm/cron/cron.allow。前面的文件中所列的用戶不允許使用crontab命令;后一文件中所列的用戶允許使用crontab命令。crontab命令的常用格式為:
crontab-l:顯示用戶的crontab文件的內(nèi)容;
crontab-r:從crontabs目錄中刪除用戶的crontab文件;
crontab-e:編輯用戶的crontab文件。
crontab文件每行中有6個(gè)字段,前5個(gè)為時(shí)間設(shè)定段,第6個(gè)為所要執(zhí)行的命令。時(shí)間段分別為:minutes、hours、dayofmonth、month、dayofweek,字段之間用空格或Tab分開。字段如果為“*”,表示該字段在所有可能的取值范圍內(nèi)取值;如果一個(gè)字段是由連字符隔開的兩個(gè)數(shù)字,表明命令可以在兩個(gè)數(shù)字之間的范圍內(nèi)執(zhí)行。
備份數(shù)據(jù)庫(kù)
設(shè)定數(shù)據(jù)庫(kù)的擁有者為Oracle,用戶名為mistest,其口令為test,新建備份目錄為/export/home/oracle/backup。建立一個(gè)命名為testbackup的備份文件,文件內(nèi)容如下:
ORACLE-HOME=/export/home/oracle/815;exportORACLE-HOME
ORACLE-SID=ora815;exportORACLE-SID
rm/export/home/oracle/backup/*
rq=丶date+“%m%d”丶
/export/home/oracle/815/bin/expmistest/testfile=/export/home/oracle
/backup/exp$rq.dmplog=/exoport/home/oracle/backup/exp$rq.log
說(shuō)明:前兩句對(duì)Oracle數(shù)據(jù)庫(kù)初始化,第3條語(yǔ)句清空備份目錄,第4條語(yǔ)句建立一個(gè)取當(dāng)前日期的變量,以便在最后一條語(yǔ)句的備份文件名里含有當(dāng)前日期信息。testbackup編寫完成后,用“chmod+xtestbackup”命令授予它可執(zhí)行權(quán)限。
異地傳輸
在備份主機(jī)里建立一個(gè)備份目錄:/database/oradata/newbackup,在本地主機(jī)Oracle用戶的注冊(cè)目錄/export/home/oracle里建立一個(gè).netrc文件。設(shè)定好備份主機(jī)的IP地址,備份主機(jī)上的用戶為oraclebk,口令為testbk2。.netrc文件內(nèi)容為:
machinex.x.x..x
loginoraclebk
passwordtestbk2
macdefinit
bin
lcd/export/home/oracle/backup
cd/database/oradata/backup
mput*
bye
說(shuō)明:前3條語(yǔ)句完成在備份主機(jī)上的登錄,第4條語(yǔ)句定義一個(gè)名為init的宏,第5條語(yǔ)句表示以二進(jìn)制傳輸,第6條語(yǔ)句表示進(jìn)入本地工作目錄,第7條語(yǔ)句表示進(jìn)入備份主機(jī)目錄,第8條語(yǔ)句完成將本地主機(jī)/export/home/oracle/backup目錄下的所有文件傳輸至備份主機(jī)/database/oradata/backup目錄下,最后一條語(yǔ)句退出ftp會(huì)話進(jìn)程。.netrc文件編寫完成后,用命令“chmod600.netrc”使該文件只能被該用戶所訪問(wèn)。
自動(dòng)執(zhí)行
我們以oracle用戶登錄本地主機(jī),用“crontab-e”編寫crontab文件用以啟動(dòng)自動(dòng)備份進(jìn)程。oracle文件內(nèi)容如下:
1023***/export/home/oracle/testbackup
3023***ftp-ix.x.x.x
說(shuō)明:第1條語(yǔ)句指定每天自動(dòng)在23點(diǎn)10分執(zhí)行對(duì)數(shù)據(jù)庫(kù)的備份,第2條語(yǔ)句指定每天自動(dòng)在23點(diǎn)半啟動(dòng)ftp,將備份文件傳輸?shù)絺浞葜鳈C(jī)(備份主機(jī)為符合語(yǔ)句中指定IP地址的主機(jī))。
Oracle文件只能在Oracle用戶名下用“crontab-e”命令來(lái)編輯。編輯完成后,可以在用“crontab-l”命令來(lái)查看crontab文件內(nèi)容,同時(shí)在/var/spool/cron/crontabs目錄下查看是否增加了一個(gè)Oracle文件。
至此,本地主機(jī)可以每天定時(shí)備份數(shù)據(jù)庫(kù),并定時(shí)把備份數(shù)據(jù)傳到備份主機(jī)。這樣,較好地實(shí)現(xiàn)了Oracle數(shù)據(jù)異地自動(dòng)備份,本地主機(jī)如果有什么故障,數(shù)據(jù)有了可靠備份,同時(shí),在一定程度上也減輕了系統(tǒng)管理人員煩瑣、重復(fù)的備份工作。