□潘傳迪PAN Chuan-di
數(shù)據(jù)已經(jīng)滲透到各行各業(yè),企業(yè)信息化首先要確保這些數(shù)據(jù)的安全,常采用的方法是數(shù)據(jù)備份和系統(tǒng)容災[1]。數(shù)據(jù)備份的目的是為了在系統(tǒng)數(shù)據(jù)崩潰時能夠快速地恢復數(shù)據(jù),是一種初級和簡單的容災方案。對于IT而言,容災就是提供一個能防止各種災難的計算機信息系統(tǒng)。當災難發(fā)生時,不僅要求確保數(shù)據(jù)安全,而且能在盡可能短的時間內(nèi)恢復系統(tǒng)正常運行。容災是一個系統(tǒng)工程,而不僅僅是技術。
1.主要技術指標。從技術上看,衡量容災系統(tǒng)有兩個主要技術指標,即RPO和RTO。RPO(Recovery Point Object)即恢復點目標,主要代表業(yè)務系統(tǒng)所能容忍的數(shù)據(jù)丟失量。不同的系統(tǒng),對RPO的要求不同,對于一些重要的系統(tǒng),不允許出現(xiàn)數(shù)據(jù)丟失,要求RPO=0,即數(shù)據(jù)零丟失[2]。RTO(Recovery Time Object)即恢復時間目標,主要代表所能容忍的業(yè)務停止服務的最長時間,也就是從災難發(fā)生到業(yè)務系統(tǒng)恢復服務所需要的最短時間周期,大部分7天*24小時服務的業(yè)務系統(tǒng)要求RTO越小越好。
2.常見容災等級。通常將容災分成以下四個等級,即:
第0級:本地備份,本地保存。
第1級:本地備份,異地保存。
第2級:即熱備份站點備份。在異地建立一個熱備份點,通過網(wǎng)絡進行數(shù)據(jù)備份。正常情況下,備份站點不承擔業(yè)務,當出現(xiàn)災難時,備份站點接替主站點的業(yè)務。
第3級:即活動備援中心。結構與第2級相似,主、從系統(tǒng)不再是固定的,而是互為對方的備份系統(tǒng)。這種級別的備份根據(jù)實際要求和投入資金的多少,又可分為兩種:(1)兩個數(shù)據(jù)中心之間只限于關鍵數(shù)據(jù)的相互備份;(2)兩個數(shù)據(jù)中心之間互為鏡像,即零數(shù)據(jù)丟失。
3.容災系統(tǒng)數(shù)據(jù)復制策略類型。根據(jù)生產(chǎn)數(shù)據(jù)中心和容災數(shù)據(jù)中心之間復制數(shù)據(jù)的時間間隔差異,將容災系統(tǒng)分成同步系統(tǒng)、準同步系統(tǒng)、異步系統(tǒng)和時間點系統(tǒng)四種。其中同步系統(tǒng)安全性要求高,要求中心之間距離短,對系統(tǒng)性能影響大。時間點系統(tǒng)安全性要求低,允許較長的中心間距離,對系統(tǒng)性能影響小。準同步系統(tǒng)和異步系統(tǒng)的安全性要求、距離要求和對系統(tǒng)性能影響介于同步系統(tǒng)和時間點系統(tǒng)之間。
4.典型的異地容災方式。典型的異地容災方式包括以下幾種:
4.1 主機軟件層次。如Symantec(Veritas)公司的VVR,它基于卷(邏輯磁盤)進行數(shù)據(jù)復制,復制的數(shù)據(jù)可以是數(shù)據(jù)庫中的數(shù)據(jù)(文件方式或裸設備方式)和關鍵業(yè)務系統(tǒng)中的文件。
4.2 存儲陣列層次。如EMC公司的SRDF,即遠程數(shù)據(jù)鏡像技術,通過兩個存儲系統(tǒng)間的磁盤鏡像實現(xiàn)容災。
4.3 網(wǎng)絡層次。如EMC RecoverPoint,其前身是Kashya容災方案,該方案是基于SAN網(wǎng)絡的持續(xù)數(shù)據(jù)保護方案,能夠同時動態(tài)支持同步、準同步、異步和時間點四種復制策略。
4.4 數(shù)據(jù)庫層次。如DSG RealSync,Quest SharePlex,它們實現(xiàn)原理相同,都是通過對oracle log信息進行分析,生成交易指令后傳輸?shù)饺轂亩诉M行重新裝載的方式來實現(xiàn)容災的。
無論采用哪種容災方式,硬件和軟件資金投入都很大,且對系統(tǒng)性能多少都會有影響,有些方式還無法實現(xiàn)RPO=0和較小的RTO。
圖1是Oracle數(shù)據(jù)庫恢復過程示意圖。數(shù)據(jù)庫必須運行在歸檔模式,通過冷備份(關閉數(shù)據(jù)庫后進行備份)或熱備份(不關閉數(shù)據(jù)庫直接進行備份)方式定期備份Oracle數(shù)據(jù)文件、重做日志文件、控制文件。一旦數(shù)據(jù)庫出現(xiàn)介質故障,可將最近正常備份的Oracle數(shù)據(jù)文件、重做日志文件、控制文件同時覆蓋故障文件,并通過歸檔日志(Archive log)進行數(shù)據(jù)庫完全或不完全恢復。
圖1 Oracle數(shù)據(jù)庫恢復過程
Oracle DataGuard只是在軟件上對數(shù)據(jù)庫進行設置,不需要額外購買任何組件,能夠在對主數(shù)據(jù)庫影響很小的情況下,實現(xiàn)主備數(shù)據(jù)庫的同步。圖2是Oracle DataGuard架構圖。Oracle通過將primary DB(database)的重做日志或歸檔日志傳輸并應用到standby DB來使standby DB與primary DB保持數(shù)據(jù)同步。當primary DB出現(xiàn)問題時可以將生產(chǎn)系統(tǒng)快速地切換到standby DB[3-4]。
可以將重做日志直接從primary DB同步寫到standby DB來完成RPO=0的災難保護,這會給primary DB帶來一定的性能損失。也可以將歸檔日志從primary DB異步寫到standby DB來使primary DB在極少性能損失的前提下,最小化地減少數(shù)據(jù)丟失。如果重做日志數(shù)據(jù)到達standby DB后快速應用到standby DB,則在primary DB出現(xiàn)問題時可以快速地failover 到standby DB。然而,如果延緩一定時間后再應用重做日志數(shù)據(jù),可以避免primary DB的錯誤快速地傳播到standby DB中。從Oracle 10g開始,Oracle Dataguard已支持實時應用 (Real-Time Apply,RTA)確保主備數(shù)據(jù)庫數(shù)據(jù)一致性,即在網(wǎng)絡狀況良好時,Primary DB與Standby DB之間處于最大數(shù)據(jù)保護模式(Maximum Protection Mode),當網(wǎng)絡狀況不良時,Primary DB與Standby DB自動調(diào)整為最大性能模式(Maximum Performance Mode),從而不影響業(yè)務數(shù)據(jù)的正常存儲訪問。Oracle11g Active Dataguard在數(shù)據(jù)實時應用的同時,Standby DB可提供查詢及報表服務。
Oracle歸檔日志文件本地存儲,控制文件、數(shù)據(jù)文件和重做日志文件存儲在專用存儲設備上,如DAS、SAN。為確保系統(tǒng)安全,生產(chǎn)系統(tǒng)和備用系統(tǒng)常采用獨立的不同存儲設備。系統(tǒng)運行在歸檔且可以相互切換模式,即系統(tǒng)可以從生產(chǎn)環(huán)境切換到備機環(huán)境,也可從備機臨時運行環(huán)境切換到生產(chǎn)運行環(huán)境。
圖2 Oracle DataGuard架構圖
Oracle Dataguard swithover是在primary DB與Standby DB均正常運行的情況下,進行主備系統(tǒng)切換測試或進行primary DB維護時,計劃內(nèi)的數(shù)據(jù)庫系統(tǒng)切換。以IBM AIX操作系統(tǒng)為例,DataGuard Switchover具體操作步驟如下。
Switchover狀態(tài)切換時,如生產(chǎn)系統(tǒng)是RAC環(huán)境,須關閉其它節(jié)點,只留一個節(jié)點。以下SQL提示符均為sqlplus “/as sysdba”登錄后的操作。
先在primary DB上操作,將primary切換到standby模式:
a.首先查看切換狀態(tài)。switchover_status的值如果是To standby,可以直接switchover,如果是sessions active,則需要在switchover的命令后面加上 with session shutdown。
SQL>select switchover_status from v$database;
b.執(zhí)行切換主庫到備庫。
SQL>alter database commit to switchover to physical standby with session shutdown;
c.關閉數(shù)據(jù)庫。
SQL>shutdown immediate;
d.啟動數(shù)據(jù)庫到mount狀態(tài)。
SQL>startup mount;
e.只讀方式打開數(shù)據(jù)庫并切換到恢復狀態(tài)。
SQL>alter database open read only;
SQL>recover managed standby DB using current logfile disconnect;
然后在standby DB上操作,將standby切換到primary模式。
a.查看切換狀態(tài)。switchover_status的值如果是To primary,可以直接switchover,如果是sessions active,則需要在switchover的命令后面加上with session shutdown。
SQL>select switchover_status from v$database;
b. 執(zhí)行切換備庫到主庫。
SQL>alter database commit to switchover to primary with session shutdown;
c.關閉數(shù)據(jù)庫。
SQL>shutdown immediate;
d.打開數(shù)據(jù)庫。
SQL>startup;
Oracle Dataguard Failover是Primary DB崩潰,修復時間不可預計或超出業(yè)務可承受的中斷時長,而強行啟用standby DB的方式。Failover時操作語句均在備機上執(zhí)行,以IBM AIX操作系統(tǒng)為例,DataGuard Failover具體操作步驟如下。
a.停止standby DB日志自動應用。
SQL>alter database recover managed standby DB cancel;
b.如果Dataguard 運行在最大性能模式(Maximum Performance Mode),需手工啟用尚未應用的數(shù)據(jù)庫日志。
SQL>recover standby DB until cancel;
c.強制激活standby DB。
SQL>alter database activate standby DB;
d.關閉及重啟數(shù)據(jù)庫。
SQL>shutdown immediate;
SQL>startup;
e.以root用戶將業(yè)務系統(tǒng)服務IP添加到相關網(wǎng)卡。
# ifconfig enX X.X.X.X netmask X.X.X.X alias
# ifconfig enX X.X.X.X netmask X.X.X.X alias
RMAN(Recovery Manager)是一種用于備份、還原和恢復Oracle數(shù)據(jù)庫的系統(tǒng)自帶工具。RMAN支持ORACLE8以上版本。它可以備份整個數(shù)據(jù)庫或數(shù)據(jù)庫部件,如表空間、數(shù)據(jù)文件、控制文件、歸檔日志文件等??梢杂脕韴?zhí)行完全或不完全的數(shù)據(jù)庫恢復[5]。
圖3是基于RMAN的Oracle數(shù)據(jù)庫容災方案架構圖。生產(chǎn)系統(tǒng)Oracle RAC數(shù)據(jù)庫各節(jié)點共享數(shù)據(jù)文件、控制文件,并存儲于Storage A中,且各節(jié)點必須至少有兩組重做日志文件,每組重做日志組設兩個重做日志成員文件,分別存儲在Storage A和Storage B中,重做日志組中的兩個重做日志成員由Oracle進行自動鏡像同步,如果Storage B出現(xiàn)故障,不會影響生產(chǎn)系統(tǒng)正常運行。生產(chǎn)系統(tǒng)Oracle RAC數(shù)據(jù)庫各節(jié)點歸檔日志文件本地存儲。
圖3 基于RMAN的Oracle數(shù)據(jù)庫容災方案架構圖
本方案特點:(1)可以實現(xiàn)RPO=0;(2)RTO較??;(3)可以在備機上進行基于時間點或SCN的不完全數(shù)據(jù)恢復,而不影響生產(chǎn)數(shù)據(jù)庫的運行;(4)操作相對簡單;(5)投入小,性價比高。
以IBM AIX操作系統(tǒng)為例,具體步驟如下:
第一,定期備份(Backup)。用Oracle RMAN工具定期(如每周日凌晨2:00)備份生產(chǎn)數(shù)據(jù)庫全部數(shù)據(jù)文件及控制文件,并用操作系統(tǒng)命令定期清理過期的歸檔日志文件,同時執(zhí)行RMAN的crosscheck指令整理控制文件中各實例(thread)歸檔日志信息。上述指令編寫成腳本,由操作系統(tǒng)自動執(zhí)行。
第二,定期還原(Restore)。將生產(chǎn)系統(tǒng)備份目錄通過網(wǎng)絡文件系統(tǒng)共享給備用主機(Standby),使備用主機能正常讀取RMAN備份數(shù)據(jù)。用Oracle RMAN工具定期(如每周日晚9:00)恢復最新備份的數(shù)據(jù)。
第三,災難恢復(Disaster Recovery)。只有在Storage A或生產(chǎn)系統(tǒng)數(shù)據(jù)庫故障一時難以修復,需啟用備用主機時,才進行此步數(shù)據(jù)恢復操作。數(shù)據(jù)恢復后,生產(chǎn)系統(tǒng)業(yè)務數(shù)據(jù)庫將切換到備用主機上運行?;謴筒僮鞑襟E如下:
a.關閉生產(chǎn)系統(tǒng)各節(jié)點數(shù)據(jù)庫及HACMP集群軟件。
SQL>shutdown abort
# smitty clstop
b.在備機上導入logvg卷組,改變裸設備屬性。
# importvg-V 58-y logvg hdisk3
# chown oracle:dba /dev/*db_*
c.在備用機上掛載生產(chǎn)系統(tǒng)各節(jié)點歸檔日志網(wǎng)絡文件系統(tǒng)。
# mount /backup1
# mount /backup2
# mount /backup3
d.在備用機上恢復數(shù)據(jù),加入臨時表空間臨時數(shù)據(jù)文件。
SQL>startup mount
$ rman target / nocatalog
RAMN>recover database;
SQL>alter database open resetlogs;
SQL>ALTER TABLESPACE TEMP ADD TEMPFILE’/dev/rdb_temp’ SIZE 419430400 REUSE AUTOEXTEND OFF;
e.修改主機IP, 修改$ORACLE_HOME/network/admin/listener.ora監(jiān)聽文件中IP地址為修改后的IP,啟動監(jiān)聽器。
基于DataGuard 和RMAN的兩種Oracle數(shù)據(jù)庫容災方案目前在我院信息系統(tǒng)中都得到很好的應用。我院HIS使用的數(shù)據(jù)庫為Oracle 11G RAC,采用基于DataGuard的容災方案,生產(chǎn)系統(tǒng)和異地災備系統(tǒng)采用獨立SAN存儲,RPO=0,RTO約10分鐘,異地災備系統(tǒng)平時還用于大數(shù)據(jù)量歷史數(shù)據(jù)統(tǒng)計和查詢。我院門戶網(wǎng)站系統(tǒng)使用的數(shù)據(jù)庫為Oracle 9i RAC,采用基于RMAN的容災方案,生產(chǎn)系統(tǒng)和異地災備系統(tǒng)采用獨立SAN存儲,RPO=0,RTO約15分鐘。目前兩個系統(tǒng)運行良好,不僅確保了系統(tǒng)可用性、可靠性和安全性,還節(jié)約系統(tǒng)投資,性價比很高。
1 劉曉輝.醫(yī)院信息系統(tǒng)中災備系統(tǒng)的設計與實現(xiàn)[J].醫(yī)療設備信息,2007,22(1):22-24
2 李峰,劉曉潔,林翰翮.基于Oracle數(shù)據(jù)庫的容災系統(tǒng)[J].計算機工程與設計,2011,32(11):3573-3576,3581
3 Oracle.Introduction to Oracle Data Guard[EB/OL]. http://docs.oracle.com/cd/E11882_01/server.112/e25608/concepts.htm
4 眭曉欣.基于Oracle數(shù)據(jù)庫應用系統(tǒng)的容災性分析研究[J].電腦知識與技術,2010,(24):6676-6678
5 Oracle.Using RMAN to Back Up and Restore Files [EB/OL]. http://docs.oracle.com/cd/E11882_01/server.112/e25608/rman.htm