蔡小祥 李曉華
(華中科技大學(xué)同濟醫(yī)學(xué)院附屬同濟醫(yī)院 武漢430030)
?
Oracle STREAMS數(shù)據(jù)同步復(fù)制技術(shù)應(yīng)用
蔡小祥 李曉華
(華中科技大學(xué)同濟醫(yī)學(xué)院附屬同濟醫(yī)院 武漢430030)
簡要介紹Oracle STREAMS技術(shù)原理和同步過程,以華中科技大學(xué)同濟醫(yī)學(xué)院附屬同濟醫(yī)院為例,闡述HLR綜合數(shù)據(jù)庫的構(gòu)建及Oracle STREAMS同步實現(xiàn)過程,總結(jié)其實施與維護經(jīng)驗,HLR數(shù)據(jù)庫既提供綜合查詢和報表功能,又能滿足災(zāi)難備份的要求。
日志挖掘;STREAMS;多對一復(fù)制; 高級隊列
選擇和集成Oracle公司的DATAGUARD,STREAMS,Recovery MANAGER(RMAN)等工具產(chǎn)品,構(gòu)建基于Oracle數(shù)據(jù)庫的高可用架構(gòu),可減少和消除Oracle數(shù)據(jù)庫在計劃內(nèi)和計劃外停機的影響[1]。醫(yī)院信息系統(tǒng)(HIS)、檢驗信息系統(tǒng)(LIS)、放射信息信息(RIS)是華中科技大學(xué)同濟醫(yī)學(xué)院附屬同濟醫(yī)院重要的Oracle數(shù)據(jù)庫信息系統(tǒng),配置Physical Standby災(zāi)難備份DATAGUARD,設(shè)置最高可用保護模式[2]。但數(shù)據(jù)庫在大的統(tǒng)計查詢、月末報表的訪問時性能有些慢。為解決數(shù)據(jù)庫性能問題并進一步提高信息系統(tǒng)安全等級[3],先將HIS、LIS、RIS源數(shù)據(jù)庫整合到一個HLR目標(biāo)數(shù)據(jù)庫,利用STREAMS同步源數(shù)據(jù)庫與HLR目標(biāo)數(shù)據(jù)庫數(shù)據(jù),既提供綜合查詢和報表功能,又能滿足災(zāi)難發(fā)生時充當(dāng)應(yīng)急數(shù)據(jù)庫服務(wù)器使用,保障業(yè)務(wù)的不間斷[4]。
STREAMS作為Oracle數(shù)據(jù)庫組件之一,使用Oracle LOGMINER技術(shù)挖掘源數(shù)據(jù)庫日志,還原成LCR ,使用數(shù)據(jù)庫SGA分配內(nèi)存,建立STREAM POOL,占用數(shù)據(jù)庫資源,是Oracle高級隊列(Oracle Advanced Queue)技術(shù)的一種擴展應(yīng)用。Oracle STREAMS數(shù)據(jù)庫提供包和存儲過程配置、同步復(fù)制數(shù)據(jù),數(shù)據(jù)源和目標(biāo)端配置隊列Queue;在數(shù)據(jù)庫源端,配置捕獲、傳輸進程、數(shù)據(jù)庫鏈接,利用日志挖掘技術(shù)把日志內(nèi)容還原成邏輯變更記錄(Logical Change Record, LCR),一個LCR對應(yīng)一個原子的行變更,數(shù)據(jù)庫源端上的一個數(shù)據(jù)庫操作語言語句對應(yīng)若干個LCR記錄,這些LCR保存到數(shù)據(jù)庫源端本地發(fā)送隊列中,傳輸進程把這些記錄通過網(wǎng)絡(luò)數(shù)據(jù)庫鏈接發(fā)送到目標(biāo)數(shù)據(jù)庫的接收隊列。在目標(biāo)數(shù)據(jù)庫一端,配置應(yīng)用進程,應(yīng)用引擎按SCN順序執(zhí)行LCR,分別實現(xiàn)對數(shù)據(jù)庫級、Schema級、Table級的數(shù)據(jù)同步[5]。實現(xiàn)的基本過程,見圖1 。
圖1 Oracle STREAMS同步實現(xiàn)過程
3.1 主要數(shù)據(jù)庫應(yīng)用現(xiàn)狀和改進目標(biāo)
華中科技大學(xué)同濟醫(yī)學(xué)院附屬同濟醫(yī)院HIS、LIS、RIS服務(wù)器系統(tǒng)是Linux5.6,數(shù)據(jù)庫是Oracle10.2.5,用EMC存儲陳列存儲數(shù)據(jù)文件。HIS 數(shù)據(jù)庫有45個用戶模式,數(shù)據(jù)文件大小460 G,每天產(chǎn)生8 G日志文件和600 M數(shù)據(jù)文件; LIS數(shù)據(jù)庫有XHSYSTEM、DBO、MIS 用戶模式,數(shù)據(jù)文件大小是274 G,每天產(chǎn)生3 G日志文件和200 M數(shù)據(jù)文件;RIS數(shù)據(jù)庫有TJRIS和TJPACS用戶模式,數(shù)據(jù)文件大小是166 G,每天產(chǎn)生80 M數(shù)據(jù)文件和2.5 G日志文件;LIS、RIS使用HIS的基本數(shù)據(jù)字典,3個數(shù)據(jù)庫沒有相同的用戶模式,在數(shù)據(jù)庫訪問高峰時性能有些慢。整合HIS、LIS、RIS源數(shù)據(jù)庫到HLR 目標(biāo)數(shù)據(jù)庫,HLR 包含HIS、LIS、RIS數(shù)據(jù)庫的全部用戶對象和數(shù)據(jù)。用HLR替代HIS、LIS、RIS數(shù)據(jù)庫的實時查詢和報表功能;HLR目標(biāo)數(shù)據(jù)庫也作為HIS、LIS、RIS數(shù)據(jù)庫的災(zāi)難備份服務(wù)庫。
3.2 數(shù)據(jù)庫來源端到目標(biāo)數(shù)據(jù)庫的整合
HLR數(shù)據(jù)庫服務(wù)器配置3 T的EMC存儲,安裝Linux5.6和Oracle10.2.5,HIS數(shù)據(jù)庫使用恢復(fù)管理器工具復(fù)制數(shù)據(jù)庫文件到HLR服務(wù)器安裝數(shù)據(jù)衛(wèi)士數(shù)據(jù)庫[6],失效備援轉(zhuǎn)換為目標(biāo)主數(shù)據(jù)庫,數(shù)據(jù)庫名為HLR;使用Oracle的導(dǎo)入/導(dǎo)出工具,導(dǎo)出LIS數(shù)據(jù)庫的XHSYSTEM、DBO、MIS用戶對象數(shù)據(jù)并導(dǎo)入到HLR相應(yīng)的XHSYSTEM、DBO、MIS用戶模式下;導(dǎo)出RIS 數(shù)據(jù)庫放射信息和影像用戶對象數(shù)據(jù)并導(dǎo)入到HLR相應(yīng)的TJRIS和TJPACS用戶模式,同時實例化這些用戶信息,保持SCN的連續(xù)性。在HIS、LIS、RIS、HLR數(shù)據(jù)庫創(chuàng)建專用用戶DUPADM、專用用戶表空間TSP_DUPADM、數(shù)據(jù)文件DUPADM.dbf。對HIS、LIS、RIS源數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)庫鏈接、隊列、捕獲、傳輸進程,在HLR目標(biāo)數(shù)據(jù)庫創(chuàng)建與HIS、LIS、RIS源數(shù)據(jù)庫相對應(yīng)的數(shù)據(jù)庫鏈接、隊列、應(yīng)用進程。HIS數(shù)據(jù)庫按全庫級別,LIS、RIS 按用戶級別與HLR數(shù)據(jù)庫保持同步,見圖2。
圖2 Oracle STREAMS多對一單向復(fù)制
4.1 概述
參考Oracle 10GR2 STREAM官方文檔,使用STREAMS軟件包,配置HIS、LIS、RIS源數(shù)據(jù)庫到HLR目標(biāo)數(shù)據(jù)庫的同步。由于篇幅限制,本文只簡述RIS源數(shù)據(jù)庫到HLR目標(biāo)數(shù)據(jù)庫同步過程。
4.2 設(shè)定數(shù)據(jù)庫初始化參數(shù)和連接字符串
修改RIS、HLR數(shù)據(jù)庫的INIT.ORA文件的參數(shù),JOB_QUEUE_PROCESSES=10,AQ_TM_PROCESSES=10,STREAMS_POOL_SIZE =300M, GLOBAL_NAMES=TRUE。添加RIS、HLR數(shù)據(jù)庫TNSNAMES.ORA文件連接本地和目標(biāo)數(shù)據(jù)庫連接串。
4.3 使用sys用戶連接完成同步配置
對RIS數(shù)據(jù)庫設(shè)置歸檔模式,啟用追加日志,全局?jǐn)?shù)據(jù)庫名為RIS。修改HLR的全局?jǐn)?shù)據(jù)庫名為HLR。在RIS和HLR數(shù)據(jù)庫創(chuàng)建DUPADM用戶、表空間TSP_DUPADM、數(shù)據(jù)文件DUPADM.dbf。授權(quán)DUPADM用戶CONNECT、RESOURCE、AQ_ADMINISTRATOR_ROLE、DBA、SELECT_CATALOG_ROLE權(quán)限和STREAMS 的授權(quán)權(quán)限。LOGMINER系統(tǒng)表空間轉(zhuǎn)移到TSP_DUPADM表空間。
4.4 使用DUPADM用戶連接完成同步配置
創(chuàng)建RIS對HLR數(shù)據(jù)庫鏈接HLR、HLR對RIS數(shù)據(jù)庫鏈接RIS。在RIS上創(chuàng)建隊列RIS_QUEUE,在HLR 上創(chuàng)建隊列RHLR_QUEUE,在RIS上執(zhí)行包過程創(chuàng)建CAPTURE進程CAPTURE_RIS,設(shè)置捕獲TJPACS、TJPACS用戶模式規(guī)則,創(chuàng)建傳播進程RIS_TO_HLR,設(shè)置隊列傳輸TJPACS、TJPACS用戶模式數(shù)據(jù)到目標(biāo)數(shù)據(jù)庫HLR規(guī)則。在HLR上創(chuàng)建應(yīng)用進程APPLY_RIS,設(shè)置TJRIS和TJPACS用戶模式的應(yīng)用規(guī)則。
4.5 初始化HLR數(shù)據(jù)并啟動同步進程
在RIS數(shù)據(jù)庫環(huán)境EXP導(dǎo)出TJPACS、TJPACS模式對象數(shù)據(jù),在HLR數(shù)據(jù)庫環(huán)境IMP導(dǎo)入TJRIS、TJPACS模式對象數(shù)據(jù),在HLR數(shù)據(jù)庫設(shè)置與RIS數(shù)據(jù)庫相同SCN,以保持HLR數(shù)據(jù)庫數(shù)據(jù)和RIS數(shù)據(jù)庫一致。啟動捕獲、傳播、應(yīng)用進程。
5.1 目標(biāo)數(shù)據(jù)庫建立和設(shè)置
用戶模式imp前,先在HLR數(shù)據(jù)庫創(chuàng)建必要的源數(shù)據(jù)庫用戶、角色,能正確導(dǎo)入對象的授權(quán),使HIS、LIS、RIS應(yīng)用程序直接訪問HLR數(shù)據(jù)庫。STREAMS從HIS、LIS、RIS到HLR單向同步,目標(biāo)HLR數(shù)據(jù)庫不開歸檔日志,很大程度提高HLR數(shù)據(jù)庫的應(yīng)用效率,又節(jié)約歸檔日志存儲空間。
5.2 STREAMS復(fù)制沖突解決
STREAMS配置完成后,應(yīng)用進程由目標(biāo)數(shù)據(jù)庫與源數(shù)據(jù)庫的數(shù)據(jù)沖突導(dǎo)致應(yīng)用終止,使STREAMS不能同步。在數(shù)據(jù)庫同步開始時,要保證目標(biāo)HLR數(shù)據(jù)庫與源數(shù)據(jù)庫同步對象SCN連續(xù)一致;目標(biāo)HLR數(shù)據(jù)庫雖是打開讀寫狀態(tài),HLR數(shù)據(jù)庫用于查詢和報表等只讀操作,保持目標(biāo)HLR數(shù)據(jù)庫與源數(shù)據(jù)庫同步對象的內(nèi)容一致,保證STREAMS的穩(wěn)定運行;STREAMS提供了數(shù)據(jù)操作語言的更新操作沖突句柄供用戶自設(shè)置參數(shù)調(diào)用,數(shù)據(jù)操作語言的刪除、插入操作沖突句柄用戶自定義并新增用戶過程解決。對一些常見的數(shù)據(jù)庫表復(fù)制定義了沖突句柄,逐漸完善解決過程,防止應(yīng)用進程終止。
5.3 STREAM日常維護
HLR目標(biāo)數(shù)據(jù)庫建立后,定期查看HLR目標(biāo)數(shù)據(jù)庫的DBA_APPLY狀態(tài),源數(shù)據(jù)庫的DBA_CAPTURE、DBA_PROPAGATION狀態(tài),以了解應(yīng)用、捕獲、傳輸進程的運行狀況。在實際運行中,應(yīng)用進程由于復(fù)制沖突導(dǎo)致終止的較常見,通過應(yīng)用的錯誤信息找出沖突的原因,消除沖突后再執(zhí)行DBMS_APPLY_ADM.EXECUTE_ERROR過程產(chǎn)生的修改,重新激活應(yīng)用進程。對特定數(shù)據(jù)庫表常發(fā)生復(fù)制沖突,定義操作沖突句柄,避免應(yīng)用進程的停止。使用PowerBuilder工具開發(fā)圖形化的STREAMS維護軟件,查詢STREAMS相關(guān)系統(tǒng)表和動態(tài)視圖,調(diào)用STREAMS提供的軟件包過程和用戶自定義過程,監(jiān)控整個復(fù)制數(shù)據(jù)同步的過程和狀態(tài),在用戶干預(yù)下對報錯信息進行處理。
STREAMS作為免費的Oracle數(shù)據(jù)庫組件,配置較為靈活,它挖掘源數(shù)據(jù)庫日志的SQL代碼并在目標(biāo)端數(shù)據(jù)庫對這些SQL代碼應(yīng)用以同步數(shù)據(jù),對操作系統(tǒng)和數(shù)據(jù)庫平臺的支持較多,應(yīng)用較為廣泛,功能十分強大。利用STREAM建立的HLR數(shù)據(jù)庫在實時同步的同時允許對實時數(shù)據(jù)進行查詢、報表生成,可用于測試、備份等。HLR數(shù)據(jù)庫可以較大地提升數(shù)據(jù)庫的可用性和安全性。STREAMS維護較數(shù)據(jù)衛(wèi)士復(fù)雜,且對部分?jǐn)?shù)據(jù)類型和加密過的數(shù)據(jù)不支持。Physical Standby使用介質(zhì)恢復(fù)技術(shù)在數(shù)據(jù)塊級別恢復(fù),效率高,邏輯結(jié)構(gòu)和物理結(jié)構(gòu)同主數(shù)據(jù)庫保持一致。Oracle STREAMS作為Oracle高可用方案對數(shù)據(jù)衛(wèi)士進行補充。
1 http://www.oracle.com/technetwork/datarase/features/availability/index.html[EB/OL].[2014-05-30].
2 李民,曹陽.基于Oracle Data Guard構(gòu)建醫(yī)院信息系統(tǒng)的容災(zāi)備份方案[J].醫(yī)療衛(wèi)生裝備,2012,33(8);45-47.
3 林濟南,王虹.醫(yī)院信息系統(tǒng)容災(zāi)方案的設(shè)計與實現(xiàn)[J].中國醫(yī)療設(shè)備,2013,(9):47-49.
4 周芃,劉道踐.使用Rman實現(xiàn)克隆復(fù)制ORACLE數(shù)據(jù)庫[J].中國醫(yī)學(xué)裝備,2012,(3):21-23.
5 談永奇,蘇瑩.基于ORACLE 的數(shù)據(jù)同步技術(shù)在HIS中應(yīng)用與研究[J].中國數(shù)字醫(yī)學(xué),2010,5(5):68-70.
6 潘傳迪.基于DataGuard和RMAN的Oracle數(shù)據(jù)庫容災(zāi)方案[J].醫(yī)院管理論壇,2014,(1):51-54.
Application of Oracle STREAMS Data Synchronous Replication Technology
CAIXiao-xiang,LIXiao-hua,
TongjiHospital,TongjiMedicalCollege,HuazhongUniversityofScienceandTechnology,Wuhan430030,China
The paper briefly introduces the technical principle and synchronous process of Oracle STREAMS, taking Tongji Hospital, Tongji Medical College, Huazhong University of Science and Technology as an example, it elaborates HLR comprehensive database construction and Oracle STREAMS synchronous realization process, summarizes its implementation and maintenance experiences. HLR database can not only provide comprehensive query and report function, but also satisfy the requirements of disaster backup.
Log miner; STREAMS; Many to one copy; Advanced queuing
2014-09-18
蔡小祥,工程師,發(fā)表論文2篇;通訊作者:李曉華。
R-058
A 〔DOI〕10.3969/j.issn.1673-6036.2015.02.009