□潘傳迪PAN Chuan-di
數據已經滲透到各行各業,企業信息化首先要確保這些數據的安全,常采用的方法是數據備份和系統容災[1]。數據備份的目的是為了在系統數據崩潰時能夠快速地恢復數據,是一種初級和簡單的容災方案。對于IT而言,容災就是提供一個能防止各種災難的計算機信息系統。當災難發生時,不僅要求確保數據安全,而且能在盡可能短的時間內恢復系統正常運行。容災是一個系統工程,而不僅僅是技術。
1.主要技術指標。從技術上看,衡量容災系統有兩個主要技術指標,即RPO和RTO。RPO(Recovery Point Object)即恢復點目標,主要代表業務系統所能容忍的數據丟失量。不同的系統,對RPO的要求不同,對于一些重要的系統,不允許出現數據丟失,要求RPO=0,即數據零丟失[2]。RTO(Recovery Time Object)即恢復時間目標,主要代表所能容忍的業務停止服務的最長時間,也就是從災難發生到業務系統恢復服務所需要的最短時間周期,大部分7天*24小時服務的業務系統要求RTO越小越好。
2.常見容災等級。通常將容災分成以下四個等級,即:
第0級:本地備份,本地保存。
第1級:本地備份,異地保存。
第2級:即熱備份站點備份。在異地建立一個熱備份點,通過網絡進行數據備份。正常情況下,備份站點不承擔業務,當出現災難時,備份站點接替主站點的業務。
第3級:即活動備援中心。結構與第2級相似,主、從系統不再是固定的,而是互為對方的備份系統。這種級別的備份根據實際要求和投入資金的多少,又可分為兩種:(1)兩個數據中心之間只限于關鍵數據的相互備份;(2)兩個數據中心之間互為鏡像,即零數據丟失。
3.容災系統數據復制策略類型。根據生產數據中心和容災數據中心之間復制數據的時間間隔差異,將容災系統分成同步系統、準同步系統、異步系統和時間點系統四種。其中同步系統安全性要求高,要求中心之間距離短,對系統性能影響大。時間點系統安全性要求低,允許較長的中心間距離,對系統性能影響小。準同步系統和異步系統的安全性要求、距離要求和對系統性能影響介于同步系統和時間點系統之間。
4.典型的異地容災方式。典型的異地容災方式包括以下幾種:
4.1 主機軟件層次。如Symantec(Veritas)公司的VVR,它基于卷(邏輯磁盤)進行數據復制,復制的數據可以是數據庫中的數據(文件方式或裸設備方式)和關鍵業務系統中的文件。
4.2 存儲陣列層次。如EMC公司的SRDF,即遠程數據鏡像技術,通過兩個存儲系統間的磁盤鏡像實現容災。
4.3 網絡層次。如EMC RecoverPoint,其前身是Kashya容災方案,該方案是基于SAN網絡的持續數據保護方案,能夠同時動態支持同步、準同步、異步和時間點四種復制策略。
4.4 數據庫層次。如DSG RealSync,Quest SharePlex,它們實現原理相同,都是通過對oracle log信息進行分析,生成交易指令后傳輸到容災端進行重新裝載的方式來實現容災的。
無論采用哪種容災方式,硬件和軟件資金投入都很大,且對系統性能多少都會有影響,有些方式還無法實現RPO=0和較小的RTO。
圖1是Oracle數據庫恢復過程示意圖。數據庫必須運行在歸檔模式,通過冷備份(關閉數據庫后進行備份)或熱備份(不關閉數據庫直接進行備份)方式定期備份Oracle數據文件、重做日志文件、控制文件。一旦數據庫出現介質故障,可將最近正常備份的Oracle數據文件、重做日志文件、控制文件同時覆蓋故障文件,并通過歸檔日志(Archive log)進行數據庫完全或不完全恢復。

圖1 Oracle數據庫恢復過程
Oracle DataGuard只是在軟件上對數據庫進行設置,不需要額外購買任何組件,能夠在對主數據庫影響很小的情況下,實現主備數據庫的同步。圖2是Oracle DataGuard架構圖。Oracle通過將primary DB(database)的重做日志或歸檔日志傳輸并應用到standby DB來使standby DB與primary DB保持數據同步。當primary DB出現問題時可以將生產系統快速地切換到standby DB[3-4]。
可以將重做日志直接從primary DB同步寫到standby DB來完成RPO=0的災難保護,這會給primary DB帶來一定的性能損失。也可以將歸檔日志從primary DB異步寫到standby DB來使primary DB在極少性能損失的前提下,最小化地減少數據丟失。如果重做日志數據到達standby DB后快速應用到standby DB,則在primary DB出現問題時可以快速地failover 到standby DB。然而,如果延緩一定時間后再應用重做日志數據,可以避免primary DB的錯誤快速地傳播到standby DB中。從Oracle 10g開始,Oracle Dataguard已支持實時應用 (Real-Time Apply,RTA)確保主備數據庫數據一致性,即在網絡狀況良好時,Primary DB與Standby DB之間處于最大數據保護模式(Maximum Protection Mode),當網絡狀況不良時,Primary DB與Standby DB自動調整為最大性能模式(Maximum Performance Mode),從而不影響業務數據的正常存儲訪問。Oracle11g Active Dataguard在數據實時應用的同時,Standby DB可提供查詢及報表服務。
Oracle歸檔日志文件本地存儲,控制文件、數據文件和重做日志文件存儲在專用存儲設備上,如DAS、SAN。為確保系統安全,生產系統和備用系統常采用獨立的不同存儲設備。系統運行在歸檔且可以相互切換模式,即系統可以從生產環境切換到備機環境,也可從備機臨時運行環境切換到生產運行環境。

圖2 Oracle DataGuard架構圖
Oracle Dataguard swithover是在primary DB與Standby DB均正常運行的情況下,進行主備系統切換測試或進行primary DB維護時,計劃內的數據庫系統切換。以IBM AIX操作系統為例,DataGuard Switchover具體操作步驟如下。
Switchover狀態切換時,如生產系統是RAC環境,須關閉其它節點,只留一個節點。以下SQL提示符均為sqlplus “/as sysdba”登錄后的操作。
先在primary DB上操作,將primary切換到standby模式:
a.首先查看切換狀態。switchover_status的值如果是To standby,可以直接switchover,如果是sessions active,則需要在switchover的命令后面加上 with session shutdown。
SQL>select switchover_status from v$database;
b.執行切換主庫到備庫。
SQL>alter database commit to switchover to physical standby with session shutdown;
c.關閉數據庫。
SQL>shutdown immediate;
d.啟動數據庫到mount狀態。
SQL>startup mount;
e.只讀方式打開數據庫并切換到恢復狀態。
SQL>alter database open read only;
SQL>recover managed standby DB using current logfile disconnect;
然后在standby DB上操作,將standby切換到primary模式。
a.查看切換狀態。switchover_status的值如果是To primary,可以直接switchover,如果是sessions active,則需要在switchover的命令后面加上with session shutdown。
SQL>select switchover_status from v$database;
b. 執行切換備庫到主庫。
SQL>alter database commit to switchover to primary with session shutdown;
c.關閉數據庫。
SQL>shutdown immediate;
d.打開數據庫。
SQL>startup;
Oracle Dataguard Failover是Primary DB崩潰,修復時間不可預計或超出業務可承受的中斷時長,而強行啟用standby DB的方式。Failover時操作語句均在備機上執行,以IBM AIX操作系統為例,DataGuard Failover具體操作步驟如下。
a.停止standby DB日志自動應用。
SQL>alter database recover managed standby DB cancel;
b.如果Dataguard 運行在最大性能模式(Maximum Performance Mode),需手工啟用尚未應用的數據庫日志。
SQL>recover standby DB until cancel;
c.強制激活standby DB。
SQL>alter database activate standby DB;
d.關閉及重啟數據庫。
SQL>shutdown immediate;
SQL>startup;
e.以root用戶將業務系統服務IP添加到相關網卡。
# 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數據庫的系統自帶工具。RMAN支持ORACLE8以上版本。它可以備份整個數據庫或數據庫部件,如表空間、數據文件、控制文件、歸檔日志文件等。可以用來執行完全或不完全的數據庫恢復[5]。
圖3是基于RMAN的Oracle數據庫容災方案架構圖。生產系統Oracle RAC數據庫各節點共享數據文件、控制文件,并存儲于Storage A中,且各節點必須至少有兩組重做日志文件,每組重做日志組設兩個重做日志成員文件,分別存儲在Storage A和Storage B中,重做日志組中的兩個重做日志成員由Oracle進行自動鏡像同步,如果Storage B出現故障,不會影響生產系統正常運行。生產系統Oracle RAC數據庫各節點歸檔日志文件本地存儲。

圖3 基于RMAN的Oracle數據庫容災方案架構圖
本方案特點:(1)可以實現RPO=0;(2)RTO較小;(3)可以在備機上進行基于時間點或SCN的不完全數據恢復,而不影響生產數據庫的運行;(4)操作相對簡單;(5)投入小,性價比高。
以IBM AIX操作系統為例,具體步驟如下:
第一,定期備份(Backup)。用Oracle RMAN工具定期(如每周日凌晨2:00)備份生產數據庫全部數據文件及控制文件,并用操作系統命令定期清理過期的歸檔日志文件,同時執行RMAN的crosscheck指令整理控制文件中各實例(thread)歸檔日志信息。上述指令編寫成腳本,由操作系統自動執行。
第二,定期還原(Restore)。將生產系統備份目錄通過網絡文件系統共享給備用主機(Standby),使備用主機能正常讀取RMAN備份數據。用Oracle RMAN工具定期(如每周日晚9:00)恢復最新備份的數據。
第三,災難恢復(Disaster Recovery)。只有在Storage A或生產系統數據庫故障一時難以修復,需啟用備用主機時,才進行此步數據恢復操作。數據恢復后,生產系統業務數據庫將切換到備用主機上運行。恢復操作步驟如下:
a.關閉生產系統各節點數據庫及HACMP集群軟件。
SQL>shutdown abort
# smitty clstop
b.在備機上導入logvg卷組,改變裸設備屬性。
# importvg-V 58-y logvg hdisk3
# chown oracle:dba /dev/*db_*
c.在備用機上掛載生產系統各節點歸檔日志網絡文件系統。
# mount /backup1
# mount /backup2
# mount /backup3
d.在備用機上恢復數據,加入臨時表空間臨時數據文件。
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監聽文件中IP地址為修改后的IP,啟動監聽器。
基于DataGuard 和RMAN的兩種Oracle數據庫容災方案目前在我院信息系統中都得到很好的應用。我院HIS使用的數據庫為Oracle 11G RAC,采用基于DataGuard的容災方案,生產系統和異地災備系統采用獨立SAN存儲,RPO=0,RTO約10分鐘,異地災備系統平時還用于大數據量歷史數據統計和查詢。我院門戶網站系統使用的數據庫為Oracle 9i RAC,采用基于RMAN的容災方案,生產系統和異地災備系統采用獨立SAN存儲,RPO=0,RTO約15分鐘。目前兩個系統運行良好,不僅確保了系統可用性、可靠性和安全性,還節約系統投資,性價比很高。
1 劉曉輝.醫院信息系統中災備系統的設計與實現[J].醫療設備信息,2007,22(1):22-24
2 李峰,劉曉潔,林翰翮.基于Oracle數據庫的容災系統[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數據庫應用系統的容災性分析研究[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