黃樑昌
(中國電信集團(tuán)集成股份有限公司廣西分公司,廣西 南寧 530005)
隨著信息技術(shù)廣泛融入人們的生產(chǎn)生活之中,作為信息系統(tǒng)核心的數(shù)據(jù)庫產(chǎn)品[1]也在最近一二十年得到了快速的發(fā)展。數(shù)據(jù)庫是所有IT應(yīng)用的核心,其中關(guān)系型數(shù)據(jù)庫又是現(xiàn)在最主流的數(shù)據(jù)庫產(chǎn)品。在關(guān)系型數(shù)據(jù)庫中,Oracle公司的同名關(guān)系型數(shù)據(jù)庫Oracle數(shù)據(jù)庫是市場占有率最高的數(shù)據(jù)庫,大量的國防、金融、政府、教育、通信等行業(yè)的核心業(yè)務(wù)都構(gòu)建在Oracle數(shù)據(jù)庫之上。作為系統(tǒng)數(shù)據(jù)存儲的核心軟件,數(shù)據(jù)庫軟件的平均無故障時間(Mean time between failures,MTBF)[1]要求最為嚴(yán)格,重要系統(tǒng)的年計劃內(nèi)停機(jī)時間按小時甚至以分鐘計,因此,必須在系統(tǒng)設(shè)計之初就加以考慮。否則,沒有任何預(yù)案下的計劃外停機(jī)導(dǎo)致的損失將會極其嚴(yán)重。
為應(yīng)對上訴情況,重要業(yè)務(wù)中數(shù)據(jù)庫系統(tǒng)的容災(zāi)已經(jīng)是目前信息系統(tǒng)建設(shè)時的一項必選內(nèi)容。
作為最大的數(shù)據(jù)庫產(chǎn)品提供商,Oracle數(shù)據(jù)庫提供了大量技術(shù)可以實現(xiàn)數(shù)據(jù)保護(hù)、故障切換、故障轉(zhuǎn)移等功能,Oracle統(tǒng)一稱之為高可用方案[2]。其中的Data Guard技術(shù)簡單介紹如下:
Data Guard分為物理Standby和邏輯Standby兩種實現(xiàn)。物理 Standby本質(zhì)是日志傳輸和應(yīng)用重做(介質(zhì)恢復(fù)),邏輯Standby本質(zhì)上是日志挖掘(log miner)。物理Standby因為其對性能影響非常小、穩(wěn)定、基本無需維護(hù),并且可以做到異地不丟數(shù)據(jù),在主節(jié)點發(fā)生故障的時候能夠在分鐘級甚至是秒級進(jìn)行切換提供服務(wù),因此是本文研究的重點。邏輯Standby的功能基本上由Streams取代,不再贅述。
某客戶的業(yè)務(wù)系統(tǒng)因為其業(yè)務(wù)的重要性,需要在異地搭建一套備用系統(tǒng),其中數(shù)據(jù)庫使用 Oracle Data Guard作為容災(zāi)系統(tǒng)。在生產(chǎn)中,通常數(shù)據(jù)庫服務(wù)器只安裝數(shù)據(jù)庫,因此為了方便標(biāo)識,本項目主庫所在的主機(jī)的hostname和主庫的dbname、sid、server name等均統(tǒng)一命名為pdb(Primary Database),同樣,備庫的系統(tǒng)和數(shù)據(jù)庫等也相應(yīng)命名為sdb(Standby Database)。表1具體規(guī)劃了某異地容災(zāi)項目中的參數(shù)配置。
表1 Data Guard 規(guī)劃
業(yè)務(wù)流程如下:
圖1 Data Guard業(yè)務(wù)流程
在開始Data Guard的配置之前,主庫的操作系統(tǒng)、Oracle Database軟件以及數(shù)據(jù)庫均已經(jīng)安裝完畢;備庫安裝好操作系統(tǒng)和Oracle Database軟件,不需建庫。
對于操作系統(tǒng)的安裝和數(shù)據(jù)庫軟件本身的安裝可以參考[3]。
配置 Data Guard之前,主庫需要修改一些參數(shù)以符合Data Guard的實施要求:
Forced Logging模式下,數(shù)據(jù)庫會記錄更改的所有信息。啟用這一模式才能保證備庫能夠和主庫的配置完全同步。在sqlplus中啟用Forced Logging的命令如下:
SQL> alter database force logging;
同一個Data Guard中,所有的數(shù)據(jù)庫必須擁有獨立的配置文件,并且其 SYS密碼相同,這樣才能保證日志的順利傳輸。使用oracle用戶在操作系統(tǒng)中產(chǎn)生密鑰文件的命令如下:
$ orapwd file=<fname> password=<password>
該命令會在 fname的位置生成文件指定的文件,<password>為系統(tǒng)SYS用戶的密碼。
最大保護(hù)和最大可用性模式需要備重做日志,Data Guard從備重做日志比單獨從歸檔重做日志文件能恢復(fù)和應(yīng)用更多重做數(shù)據(jù)。
雖然備重做日志只有在數(shù)據(jù)庫運行在備角色時才使用,Oracle 建議在主數(shù)據(jù)庫上創(chuàng)建一個備重做日志,使得主數(shù)據(jù)庫能快速切換到備角色而不需要額外的DBA干涉。
首先查詢目前的重做日志信息:
目前有三個重做日志組,備重做日志組數(shù)量由如下公式確定:
備重做日志組數(shù)量=(每個線程的日志文件的最大數(shù)目+1)×線程最大數(shù)目
由于未使用RAC,因此線程取1,需要建立的備重做日志組為 4組。備重做日志文件的大小需要和重做日志文件大小完全一致。同時為了統(tǒng)一管理,將備重做日志和重做日志放在相同位置。
創(chuàng)建的命令示例如下:
sql> alter database add standby logfile('/u01/app/oracle/data/pdb/st01.log') size 50m;
database altered.
……
只有在歸檔模式下,數(shù)據(jù)庫才會產(chǎn)生歸檔日志。開啟歸檔的命令序列如下:
通過修改主庫的初始化參數(shù),就可以將主庫配置為Data Guard的一部分。本例中單向Data Guard主庫需要修改或確認(rèn)的初始化參數(shù)如下:
完成上述配置,主庫的初始化參數(shù)配置完畢。
3.4.1 備份數(shù)據(jù)文件
RMAN> backup database;
3.4.2 由主庫的初始化文件 spfile生成備庫的初始化文件pfile,修改相應(yīng)的初始化參數(shù)。首先生成可編輯的pfile:
3.4.3 由主庫的控制文件生成備庫的控制文件
SQL> alter database create standby controlfile as '/u01/control01.ctl';
3.4.4 使用rman創(chuàng)建備份數(shù)據(jù)庫
(1)按照備庫的初始化參數(shù)文件指定的位置建立相應(yīng)的文件夾,之后將4.4.1至4.4.3三步得到的文件復(fù)制到備庫對應(yīng)的位置,其中備份文件在備庫的目錄位置需要和主庫完全一樣.
(2)按表1的規(guī)劃使用netca和netmgr配置對應(yīng)的監(jiān)聽服務(wù)相關(guān)的文件listener.ora和tnsname.ora
(3)由修改好的pfile生成spfile,啟動到nomount狀態(tài):
(4)使用 rman登錄主庫,使用備份文件恢復(fù)到備庫創(chuàng)建備庫:
$ rman target / auxiliary sys/oracle@sdb
RMAN> duplicate target database for standby;
3.4.5 備庫開始接受歸檔并應(yīng)用
SQL> alter database recover managed standby database using current logfile disconnect from session;
Oracle Data Guard搭建完成??梢酝ㄟ^監(jiān)控日志的傳輸情況對主庫進(jìn)行DML、DDL操作,驗證Data Guard的配置。
Oracle Data Guard是Oracle數(shù)據(jù)庫提供的免費的故障轉(zhuǎn)移、容災(zāi)解決方案。該方案的優(yōu)點是對系統(tǒng)影響小、配置完成后易于維護(hù),同時因為日志傳輸服務(wù)是基于網(wǎng)絡(luò)的,可以提供數(shù)據(jù)庫級別的異地容災(zāi),同時結(jié)合應(yīng)用系統(tǒng)即能夠?qū)崿F(xiàn)業(yè)務(wù)層的容災(zāi)。合理的配置下,Data Guard還能做到不丟失數(shù)據(jù)。因此,Oracle Data Guard是企業(yè)級系統(tǒng)數(shù)據(jù)保護(hù)、容災(zāi)方案的熱門選項。
[1] Abraham Silberschatz,Henry F.Korth and S. Sudarshan.Database System Concepts[M].New York:McGraw Hill. 2010.
[2] Scott Jesse, Bill Burton and Bryan Vongray. Oracle Database 11g Release 2 High Availability: Maximize Your Availability with Grid Infrastructure, RAC and Data Guard[M]. New York:McGraw Hill.2011.
[3] Ian Abramson, Michael Abbey and Michael Corey. Oracle Database 11g A Beginner's Guide[M].New York:McGraw Hill.2008.