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