趙 婷
(中船重工集團(tuán)公司第七二二研究所,武漢 430205)
伴隨著信息化的持續(xù)推進(jìn),政府、企業(yè)的生產(chǎn)、經(jīng)營(yíng)對(duì)信息系統(tǒng)的依賴越來(lái)越緊密,信息數(shù)據(jù)的安全和業(yè)務(wù)運(yùn)行的可靠性越來(lái)越重要,對(duì)于軍用數(shù)據(jù)更是如此.雙機(jī)熱備就是一種保證數(shù)據(jù)庫(kù)安全、高可靠性的解決方案.
一般的雙機(jī)熱備都是在磁盤陣列的基礎(chǔ)上進(jìn)行的,數(shù)據(jù)庫(kù)放在共享的存儲(chǔ)設(shè)備上,當(dāng)一臺(tái)服務(wù)器提供服務(wù)時(shí),直接在存儲(chǔ)設(shè)備上進(jìn)行讀寫(xiě),而當(dāng)系統(tǒng)切換后,另一臺(tái)服務(wù)器也同樣讀取該存儲(chǔ)設(shè)備上的數(shù)據(jù)[1],但是由于磁盤陣列等技術(shù)并未通過(guò)軍方認(rèn)證,只能采用純軟件的方式進(jìn)行.
Oracle Data Guard就是一種純軟方式的解決方案,它是內(nèi)置于Oracle數(shù)據(jù)庫(kù)的一個(gè)功能模塊,它創(chuàng)建、維護(hù)和監(jiān)控一個(gè)或多個(gè)備用數(shù)據(jù)庫(kù),以保護(hù)企業(yè)數(shù)據(jù)結(jié)構(gòu)不受故障、災(zāi)難、錯(cuò)誤和崩潰的影響[2].正常情況下應(yīng)用程序只連接主數(shù)據(jù)庫(kù),主數(shù)據(jù)庫(kù)的數(shù)據(jù)能夠近實(shí)時(shí)地同步到備數(shù)據(jù)庫(kù),當(dāng)主數(shù)據(jù)庫(kù)出現(xiàn)故障,Data Guard能夠?qū)崿F(xiàn)主庫(kù)到備庫(kù)的無(wú)縫切換,從而使與中斷相關(guān)的停機(jī)時(shí)間減到最少,并防止任何數(shù)據(jù)丟失.
但是主庫(kù)到備庫(kù)的角色切換是需要人工操作來(lái)完成的,而且當(dāng)主數(shù)據(jù)庫(kù)故障排除后,必須經(jīng)過(guò)人工干預(yù)才能避免出現(xiàn)兩臺(tái)都是主庫(kù)的情況,而在備庫(kù)上產(chǎn)生的新數(shù)據(jù)也必須通過(guò)人工操作才能導(dǎo)入到主庫(kù).
而某型艦的網(wǎng)絡(luò)管理系統(tǒng)的使用者是軍方,使用時(shí)經(jīng)常出現(xiàn)不規(guī)范的情況,導(dǎo)致主備庫(kù)經(jīng)常切換.但是由于使用者身份特殊,大多數(shù)情況下技術(shù)人員無(wú)法上艦進(jìn)行人工維護(hù),這樣如果不加入策略實(shí)現(xiàn)計(jì)算機(jī)全自動(dòng)維護(hù),單靠Oracle Data Guard難以保證數(shù)據(jù)的安全可靠的.因此如何在不增加硬件的條件下保護(hù)數(shù)據(jù)信息安全、保證業(yè)務(wù)系統(tǒng)的實(shí)時(shí)性和高可用性成為嚴(yán)峻的挑戰(zhàn).某型艦的網(wǎng)絡(luò)管理系統(tǒng)利用Oracle的Data Guard技術(shù),結(jié)合自身系統(tǒng)的實(shí)際情況,設(shè)計(jì)并實(shí)現(xiàn)了無(wú)需人工干預(yù)的數(shù)據(jù)庫(kù)雙機(jī)熱備和容災(zāi)策略,全面保證了數(shù)據(jù)的安全.
如圖1所示,網(wǎng)絡(luò)管理軟件的應(yīng)用服務(wù)器與兩個(gè)數(shù)據(jù)庫(kù)相連(數(shù)據(jù)庫(kù)服務(wù)器安裝Linux操作系統(tǒng),采用Oracle 10i數(shù)據(jù)庫(kù)),兩個(gè)數(shù)據(jù)庫(kù)利用Data Guard進(jìn)行雙機(jī)熱備,并互為主備.
圖1 系統(tǒng)框架圖
應(yīng)用服務(wù)器同時(shí)監(jiān)視兩個(gè)數(shù)據(jù)庫(kù)服務(wù)器,如果一臺(tái)宕機(jī)或者未開(kāi)機(jī),則自動(dòng)切換到另外一臺(tái)數(shù)據(jù)庫(kù),客戶端不會(huì)感覺(jué)到任何變化.
對(duì)于兩臺(tái)數(shù)據(jù)庫(kù)服務(wù)器來(lái)說(shuō),需要編寫(xiě)shell腳本,也就是加入策略,并結(jié)合Data Guard自身機(jī)制,來(lái)避免因用戶操作不規(guī)范或數(shù)據(jù)庫(kù)服務(wù)器出現(xiàn)異常而導(dǎo)致主備切換混亂的情況.例如用戶會(huì)隨機(jī)開(kāi)啟某臺(tái)數(shù)據(jù)庫(kù)服務(wù)器,而另一臺(tái)長(zhǎng)期關(guān)閉;又或者主機(jī)宕機(jī)后另一臺(tái)備機(jī)升級(jí)為主機(jī),主機(jī)故障排除后開(kāi)機(jī),這樣就出現(xiàn)了兩臺(tái)服務(wù)器都是主機(jī)的情況.
圖2是一部分策略的流程,該策略的主要功能是避免出現(xiàn)兩臺(tái)都是主機(jī)或者兩臺(tái)都是備機(jī)的情況,這些腳本同時(shí)在兩臺(tái)數(shù)據(jù)庫(kù)服務(wù)器上運(yùn)行.
圖2 部分策略流程圖
(1)首先在系統(tǒng)文件夾中加入如下配置文件用于策略的實(shí)施:①w ritedb.ini:用于記錄修改數(shù)據(jù)庫(kù)的時(shí)間,這個(gè)是在應(yīng)用程序中寫(xiě)入,當(dāng)應(yīng)用軟件對(duì)數(shù)據(jù)庫(kù)進(jìn)行增加/修改/刪除的操作時(shí),寫(xiě)入變更時(shí)間;②status.ini:用于記錄本機(jī)是主機(jī)還是備機(jī);③switchstatus.ini:當(dāng)備機(jī)切換為主機(jī)時(shí),加入識(shí)別標(biāo)志,避免出現(xiàn)兩臺(tái)主機(jī)的情況;④sendchange.ini:通過(guò)w ritedb.ini進(jìn)行時(shí)間判斷,發(fā)現(xiàn)本機(jī)時(shí)間為最新,則在該文件中加入識(shí)別標(biāo)志,讓對(duì)機(jī)降為備機(jī).
(2)開(kāi)機(jī)后檢查整個(gè)網(wǎng)絡(luò)是否連通,如果不通,則兩臺(tái)數(shù)據(jù)庫(kù)狀態(tài)保持不變;如果連通,則要查看status.ini文件,判斷是主機(jī)還是備機(jī):①如果是備機(jī)且不能連通主機(jī),則升級(jí)為主機(jī),給switchstatus.ini文件打標(biāo),修改status.ini是主;如果備機(jī)能夠連通主機(jī),則兩臺(tái)數(shù)據(jù)庫(kù)狀態(tài)保持不變;②如果是主機(jī)且不能連通備機(jī),則兩臺(tái)數(shù)據(jù)庫(kù)狀態(tài)保持不變;如果主機(jī)能夠連通備機(jī),則要根據(jù)w ritedb.ini文件的內(nèi)容,判斷哪個(gè)數(shù)據(jù)庫(kù)上的數(shù)據(jù)最新.如果主機(jī)最新,則修改sendchange.ini文件,發(fā)送給對(duì)機(jī),讓對(duì)機(jī)降為備機(jī);如果備機(jī)最新,則主機(jī)做rman操作,降為備機(jī),修改status.ini是備.
(1)強(qiáng)制數(shù)據(jù)庫(kù)以logging的方式打開(kāi).
主庫(kù)上安裝完數(shù)據(jù)庫(kù)后,將主數(shù)據(jù)庫(kù)修改為歸檔模式:alter database archivelog;alter database force logging.
(2)在主、備庫(kù)上面建立備份使用的目錄.
(3)在主庫(kù)上面創(chuàng)建pfile,以后備庫(kù)上面將會(huì)使用這個(gè)文件.
SQL>create pfile='/oradata/primary/primary.ora'from spfile;修改主庫(kù)上面的pfile文件以便適應(yīng)data guard環(huán)境.
(4)在主庫(kù)上面通過(guò)rman創(chuàng)建備份集.
RMAN>BACKUP DEVICETYPEDISK FORMAT'/oradata/oracle/stage/recover_%U'DATABASE PLUS ARCHIVELOG.
(5)創(chuàng)建備庫(kù)上面的 standby控制文件(在主機(jī)做).
RMAN>BACKUP DEVICETYPEDISK FORMAT'/oradata/oracle/stage/%U'CURRENT CONT ROLFILE FOR STANDBY.
(6)拷貝上面制作完成的備份集到備份機(jī)上面.
[oracle@ldTest primary]$scp/oradata/oracle/stage/*168.4.24.225:/oradata/oracle/stage/.
(7)在備庫(kù)上面修改傳過(guò)去的pfile內(nèi)容.
(8)創(chuàng)建備庫(kù)上的復(fù)制實(shí)例.
在備用數(shù)據(jù)庫(kù)機(jī)器相應(yīng)位置上面建立udump、bdump、cdump目錄,用來(lái)存放Oracle的跟蹤文件和警告文件.
利用RMAN復(fù)制實(shí)例:RMAN>DUPLICATE TARGET DATABASE FOR STANDBY nofilenamecheck.
(9)啟動(dòng) standby模式.
將備用數(shù)據(jù)庫(kù)啟動(dòng)為standby模式,并且將備用數(shù)據(jù)庫(kù)處于管理恢復(fù)模式,即自動(dòng)應(yīng)用模式.當(dāng)主數(shù)據(jù)庫(kù)傳送歸檔文件過(guò)來(lái),備用數(shù)據(jù)庫(kù)立即應(yīng)用此歸檔文件,使備用數(shù)據(jù)庫(kù)和主數(shù)據(jù)庫(kù)保持同步.
(10)備機(jī)ping主機(jī),如果主機(jī)不通,則升級(jí)為主機(jī),并修改status.ini文件.
(11)兩臺(tái)都是主機(jī),則比較 write.ini文件,如果備機(jī)最新,則主機(jī)做rman操作,降為備機(jī).
經(jīng)過(guò)第三方軟件測(cè)試機(jī)構(gòu)(信息產(chǎn)業(yè)部華東軟件測(cè)評(píng)中心)的測(cè)試,這套雙機(jī)熱備和容災(zāi)策略能夠很好地實(shí)現(xiàn)無(wú)人工干預(yù)下的主備切換,并能保證數(shù)據(jù)的完整性.
[1]張貴芳.基于雙機(jī)熱備技術(shù)的水利郵件系統(tǒng)備份方法探討[J].河南水利與南水北調(diào),2010(1):46-47.
[2]黃 健.基于Oracle Data Guard的容災(zāi)策略設(shè)計(jì)與實(shí)現(xiàn)[J].科技廣場(chǎng),2006,11:72-73.