霍長娟1,孫洪平2
?。?. 中國航空結算有限責任公司,北京 100028;2. 北京高陽金信信息技術有限公司,北京 100050)
摘要:結合實際生產業(yè)務要求,利用Oracle11g的DataGuard技術,通過本地部署主備數據庫實現高可用架構,通過遠端級聯第二個備庫實現異地容災的要求。在DataGuard的搭建過程中,配置Broker工具實現自動管理DataGuard,在此基礎上,設置FSFO和快速閃回恢復區(qū)實現本地主數據庫故障時自動切換到備庫,以及在備庫快速閃回恢復區(qū)沒有被歸檔日志撐滿之前主庫得到正?;謴停珺roker能夠自動恢復DataGuard的配置,從而真正實現高效的、自動的高可用架構。
關鍵詞:DataGuard;主備數據庫;遠程災備;FSFO
中圖分類號:TP309文獻標識碼:ADOI: 10.19358/j.issn.1674-7720.2016.24.022
引用格式:霍長娟,孫洪平. 一種自動管理的高可用架構[J].微型機與應用,2016,35(24):77-80,83.
0引言
目前很多銀行、金融等企業(yè)都使用Oracle作為后臺數據庫,如何保證數據庫的安全可靠性是從上到下一致關心的問題。目前的高可用配置有多種方案,數據庫RAC、DataGuard、操作系統(tǒng)HA等,都能在某種程度上滿足高可用性的要求。RAC是通過集群來消除單點故障;HA是一種OS級別的高可用方案;DataGuard是通過在異地部署備庫,當主庫出現問題時立即切換到備庫的一種高可用方案。
1DataGuard簡介
Oracle DataGuard是Oracle公司開發(fā)的一種數據庫級別的HA方案,其最主要功能是容災、數據保護、故障恢復等,其基本原理是將日志文件從源數據庫傳輸到目標數據庫,然后在目標數據庫上應用這些日志文件,從而使目標數據庫與源數據庫保持同步,達到高可用的目的。以下是DataGuard的一些基本概念。
(1)DataGuard中的備庫分為物理備庫和邏輯備庫兩種,物理備庫就是應用日志進行恢復, 邏輯備庫就是應用SQL語句進行恢復,業(yè)界大多采用物理備庫的方式。
?。?)DataGuard包含三種服務:日志傳輸服務——日志從主庫傳輸到備庫;日志應用服務——在備庫應用日志;角色轉換服務——主備庫角色的轉換。
?。?)DataGuard的三種數據保護模式是:最大保護、最大性能、最大(高)可用。
2業(yè)務要求
本文結合實際生產業(yè)務,利用Oracle11g的DataGuard技術搭建高可用架構。此業(yè)務系統(tǒng)的等級比較高,用戶要求數據庫系統(tǒng)的可使用時間為24×365小時,除了每晚計劃內的online備份時間和達成一致的維護時間外,網絡連接可用率必須為可用時間的99.9%,在出現故障的時候,要求2小時內解決故障,需要廠商受理的要求4小時內解決。另外,為預防災難發(fā)生,此系統(tǒng)要求有異地災備數據庫設置,也就是說需要在異地構建一套同樣的環(huán)境,并且要保持數據的一致性同步。因此,簡單的單機部署已經不能滿足此系統(tǒng)的高可用性要求,必須為此系統(tǒng)配置帶有災備系統(tǒng)的高可用性架構。目前的高可用配置有多種方案,數據庫RAC、DataGuard、操作系統(tǒng)HA等,都能在某種程度上滿足高可用性的要求,結合各種技術的優(yōu)缺點以及成本、對維護人員的要求等各方面因素,最終采用Oracle11g的DataGuard [1]技術實現本系統(tǒng)的高可用架構以及異地災備配置。
3架構設計
高可用架構圖如圖1所示。本地三臺服務器,主庫、備庫和Broker [2]服務器,主庫實時向備庫傳輸redolog日志,備庫實時恢復,Broker工具實時監(jiān)測DG數據庫的狀態(tài),當發(fā)生主庫不可用或是其他問題(例如Broker不能和主庫通信)時,通過Broker端設置的FSFO功能可以自動切換到備庫,從而實現自動管理,不需要人為干預。另外,在主備庫設置快速閃回恢復區(qū),用于存放歸檔日志,當主庫出問題后,如果能在備庫快速閃回恢復區(qū)沒有被歸檔日志撐滿之前恢復正常,則不用重新搭建DG,Broker能夠自動恢復DG的配置(如表1所示),歸檔日志往回同步完成后可以重新切回主庫,從而真正實現高效的、自動的高可用架構。關于災備數據庫,通過搭建級聯DG來實現,具體就是從備庫通過專線向異地傳輸redolog,在異地數據庫進行實時恢復,從而達到異地容災的目的。由于Broker的特性,不能同時部署兩臺Broker服務器,因此選擇在本地部署,災備端沒有部署,這也是符合SLA要求的。
4搭建DataGuard環(huán)境
4.1約定信息
DataGuard配置表如表2所示。
4.2DG環(huán)境配置
4.2.1主庫配置
?。?)基本配置。開啟force logging,通過使用remote login密碼文件配置redo的傳輸認證、開啟歸檔。
(2)調整undo設置和開啟數據庫閃回。通過設置快速閃回恢復區(qū),再結合DG的管理工具Broker自動管理功能可以實現DG crash后,不用手工重新搭建DG,便于DG數據庫failover時快速恢復主庫狀態(tài)。結合實際生產業(yè)務要求,生產數據庫undo數據和數據庫閃回數據保留時間分別設置為12小時和24小時。主要語句如下:
SQL>ALTER SYSTEM SET UNDO_RETENTION=43200 SCOPE=SPFILE;
SQL>ALTER SYSTEM SET UNDO_MANAGEMENT='AUTO' SCOPE=SPFILE;
SQL>ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=1440 SCOPE=BOTH;
SQL>ALTER SYSTEM SET db_recovery_file_dest_size=150G;
SQL>ALTER SYSTEM SET db_recovery_file_dest=’/dbflashback/flashlog’;
SQL>ALTER DATABASE FLASHBACK ON;
?。?)配置DG相關參數(修改pfile文件,以下列出主要參數),然后重新生成spfile,重啟數據庫實例生效。
*.db_name=dbpro
*.db_unique_name=dbpro
*.log_archive_config=dg_config=(dbpro,dbsty,dbdr)
*.log_archive_dest_1=location=/dbarch/dbpro
valid_for=(all_logfiles,all_roles) db_unique_name=dbpro
*.log_archive_dest_2=service=dbsty async
valid_for=(all_logfiles,primary_role) db_unique_name=dbsty
*.log_archive_dest_3=service=dbdr async compression=enable
valid_for=(standby_logfiles,standby_role) db_unique_name=dbdr
*.log_archive_dest_state_1=enable
*.log_archive_dest_state_2=enable
*.log_archive_dest_state_3=enable
*.fal_server=dbsty
*.fal_client=dbpro
?。?)配置備庫的TNS解析,在主庫tnsnames.ora中添加備庫的TNS解析。
(5)創(chuàng)建應用程序的連接服務。為保證應用程序在數據庫切換后自動連接到新主庫,使用dbdg服務和觸發(fā)器實現應用程序的連接轉移。
創(chuàng)建啟動dbdg服務
begin
dbms_service.create_service('dbdg','dbdg');
end;
/
begin
DBMS_SERVICE.START_SERVICE('dbdg');
end;
/
創(chuàng)建服務更改觸發(fā)器
create or replace trigger startdbdg after startup on database
declare
v_role varchar(30);
begin
select database_role into v_role from vMYMdatabase;
if v_role = 'PRIMARY' then
DBMS_SERVICE.START_SERVICE('dbdg');
elseDBMS_SERVICE.STOP_SERVICE('dbdg');
end if;
end;
/
?。?)配置standby redo log。
數據庫standby redo log用來實時接收redo日志,大小與online redo log一致,組數比online redo log多一組。語句如下:
ALTER DATABASE ADD STANDBY LOGFILE GROUP 21 ('/dbdata01/oradata/dbpro/styredo01a.log','/dbdata02/oradata/dbpro/styredo01b.log') SIZE 800M;
...
(7)為備庫做準備。
對主庫做rman全備份、為備庫創(chuàng)建參數文件、為備庫創(chuàng)建standby控制文件。語句如下:
SQL> CREATE PFILE=/tmp/initdbpro.ora FROM SPFILE;
SQL>ALTER DATABASE CREATE STANDBY CONTROLFILE AS /tmp/dbsty.ctl;
4.2.2備庫配置
?。?)基本配置。從主庫恢復參數文件和拷貝密碼文件、恢復standby控制文件(直接把standby控制文件改名成control1,control2,control3存到相應目錄即可,然后啟庫到mount)、恢復主庫rman備份。
?。?)配置DG相關參數(修改pfile文件,以下列出主要參數),然后重新生成spfile,重啟數據庫到mount。
*.db_name=dbpro
*.db_unique_name=dbsty
*.log_archive_config=dg_config=(dbpro,dbsty,dbdr)
*.log_archive_dest_1=location=/dbarch/dbpro
valid_for=(all_logfiles,all_roles) db_unique_name=dbsty
*.log_archive_dest_2=service=dbpro async
valid_for=(online_logfiles,primary_role) db_unique_name=dbpro
*.log_archive_dest_3=service=dbdr async compression=enable
valid_for=(standby_logfiles,standby_role) db_unique_name=dbdr
*.log_archive_dest_state_1=enable
*.log_archive_dest_state_2=enable
*.log_archive_dest_state_3=enable
?。?)配置主庫的TNS解析,在備庫tnsnames.ora中添加主庫的TNS解析。
(4)配置standby redo log。
ALTER DATABASE ADD STANDBY LOGFILE GROUP 21 (/dbdata01/oradata/dbpro/styredo01a.log,/dbdata02/oradata/dbpro/styredo01b.log) SIZE 800M;
...
?。?)開啟數據庫閃回。
SQL>ALTER DATABASE FLASHBACK ON;
?。?)啟動redo數據同步。
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
(7)驗證redo數據同步。
備庫確認現有的歸檔redo日志文件:
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM VMYMARCHIVED_LOG ORDER BY SEQUENCE#;
主庫強制切換日志:
SQL> ALTER SYSTEM SWITCH LOGFILE;
備庫驗證新的redo數據是否歸檔:
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM VMYMARCHIVED_LOG ORDER BY SEQUENCE#;
備庫驗證接受的redo是否被應用:
SQL> SELECT SEQUENCE#,APPLIED FROM VMYMARCHIVED_LOG ORDER BY SEQUENCE#;
4.3搭建DR配置
關于災備數據庫,通過搭建級聯DG來實現,具體就以備庫為源端,通過專線向異地災備服務器傳輸redolog,在異地數據庫進行實時恢復,從而達到異地容災的目的。
(1)基本配置。從主庫恢復參數文件、拷貝密碼文件、恢復控制文件,然后啟庫到mount、恢復主庫rman備份。
(2)配置相關參數(修改pfile文件,以下列出主要參數),然后重新生成spfile,重啟數據庫。
*.db_name=dbpro
*.db_unique_name=dbdr
*.log_archive_config=dg_config=(dbpro,dbsty,dbdr)
*.log_archive_dest_1=location=/dbarch/dbpro
valid_for=(online_logfiles,all_roles) db_unique_name=dbdr
*.log_archive_dest_2=location=dbpro
alid_for=(standby_logfiles,standby_role) db_unique_name=dbdr
*.log_archive_dest_state_1=enable
*.log_archive_dest_state_2=enable
?。?)配置主庫備庫的TNS解析、配置standby redo log、開啟閃回、啟動redo數據同步、驗證redo數據同步,和DG搭建是一樣的部署,這里不再贅述。
4.4DG Broker和FastStart Failor配置
4.4.1Broker配置過程
Broker是管理DataGuard的命令行工具,為使用快速放障切換(Fast-Start Failover,FSFO)功能,必須將Broker配置在Broker管理服務器HOST-DGMT-1上。
?。?)主、備庫配置監(jiān)聽服務。
修改主、備庫監(jiān)聽配置文件,重啟監(jiān)聽檢查**_DGMGRL服務。
主數據庫:
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=dbpro_DGMGRL) (ORACLE_HOME=/dbu01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME=dbpro)
)
)
備數據庫:
SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(GLOBAL_DBNAME=dbsty_DGMGRL)(ORACLE_HOME=/dbu01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME=dbpro)
)
)
(2)主、備庫設置Broker配置文件位置。
參數dg_broker_config_file1規(guī)定Broker配置文件的位置,默認就在MYMORACLE_HOME/dbs下,主備庫采用默認配置即可。
?。?)主、備庫啟用Broker。
SQL>ALTER SYSTEM SET DG_BROKER_START=TRUE scope=both;
檢查dmon進程,存在即可。
?。?)Broker服務器配置主、備庫的TNS解析。
修改Broker服務器上tnsname.ora文件,添加主、備庫的TNS解析,此處省略。
(5)從Broker服務器連接主庫,添加主備庫信息:
DGMGRL>connect sys/xxxxxxx@dbpro;
創(chuàng)建主庫配置信息:
DGMGRL> CREATE CONFIGURATION 'dbproconf' AS PRIMARY DATABASE IS 'dbpro' CONNECT IDENTIFIER IS dbpro;
添加備庫配置:
DGMGRL> ADD DATABASE 'dbsty' AS CONNECT IDENTIFIER IS dbsty MAINTAINED AS PHYSICAL;
?。?)啟用Broker配置:
DGMGRL> ENABLE CONFIGURATION;
4.4.2Fast-Start Failover 配置過程
FastStart Failover功能實現主數據庫異常情況下快速切換到備數據庫,在Broker管理工具基礎上增加了一個單獨的observer,在Broker服務器上進行配置。
(1)配置數據庫failover的目標。
配置dbpro failover的目標:
DGMGRL>edit database dbpro set property FastStartFailoverTarget=dbsty;
配置dbsty failover的目標:
DGMGRL>edit database dbsty set property FastStartFailoverTarget=dbpro;
(2)設置FastStartFailoverThreshold閾值和FastStartFailoverLagLimit閾值。
FastStartFailoverThreshold閾值設置為120秒(默認30秒),如果observer和備庫在120秒內無法連接上主數據庫,則啟動FastStart Fallouer。
DGMGRL>EDIT CONFIGURATION SET PROPERTY FastStartFailoverThreshold = 120;
FastStartFailoverLagLimi閾值設置為180秒(默認30秒),備數據庫與主數據庫的數據丟失在180秒之內才能啟動FastStart Failover。
DGMGRL>EDIT CONFIGURATION SET PROPERTY FastStartFailoverLagLimit = 180;
?。?)啟用Fast-Start Failover。
DGMGRL> ENABLE FAST_START FAILOVER;
4.4.3switchover和手動failover測試
?。?)switchover切換測試
切換前檢查狀態(tài)是否正常,如果數據同步不正常,將不能進行switchover。
DGMGRL> SHOW FAST_START FAILOVER;
從主庫switchover到備庫:
DGMGRL> switchover to dbsty;
從備庫switchover回切到主庫:
DGMGRL> switchover to dbpro;
?。?)手動failover切換測試
切換前檢查狀態(tài)是否正常, 如果備庫狀不正常,將不能進行failover。
DGMGRL> SHOW FAST_START FAILOVER;
從主庫手動failover到備庫:
DGMGRL> FAILOVER TO dbsty;
5結論
本文主要介紹了Oracle11g的DataGuard以及Broker管理工具的基本概念以及功能,最后結合實際業(yè)務,給出了在Linux平臺上搭建DG以及DR環(huán)境的實際案例,經過生產運行的實際測試,證明利用DG搭建的高可用架構以及容災環(huán)境可以滿足實際業(yè)務需求。
參考文獻
?。?] RICH K.Oracle DataGuard concepts and administrator 11g release 2 (11.2) E25608-03,2012[EB/OL].(2012xx)http://docs.oracle.com/cd/E11882_01/server.112/e41134/toc.htm.
?。?] RICH K.Oracle DataGuard broker 11g release 2 (11.2) E17023-07,2012[EB/OL].(2012xx)http://docs.oracle.com/cd/E11882_01/server.112/e40771/toc.htm.