蔡小祥 李曉華
(華中科技大學同濟醫(yī)學院附屬同濟醫(yī)院 武漢430030)
?
Oracle STREAMS數據同步復制技術應用
蔡小祥 李曉華
(華中科技大學同濟醫(yī)學院附屬同濟醫(yī)院 武漢430030)
簡要介紹Oracle STREAMS技術原理和同步過程,以華中科技大學同濟醫(yī)學院附屬同濟醫(yī)院為例,闡述HLR綜合數據庫的構建及Oracle STREAMS同步實現過程,總結其實施與維護經驗,HLR數據庫既提供綜合查詢和報表功能,又能滿足災難備份的要求。
日志挖掘;STREAMS;多對一復制; 高級隊列
選擇和集成Oracle公司的DATAGUARD,STREAMS,Recovery MANAGER(RMAN)等工具產品,構建基于Oracle數據庫的高可用架構,可減少和消除Oracle數據庫在計劃內和計劃外停機的影響[1]。醫(yī)院信息系統(tǒng)(HIS)、檢驗信息系統(tǒng)(LIS)、放射信息信息(RIS)是華中科技大學同濟醫(yī)學院附屬同濟醫(yī)院重要的Oracle數據庫信息系統(tǒng),配置Physical Standby災難備份DATAGUARD,設置最高可用保護模式[2]。但數據庫在大的統(tǒng)計查詢、月末報表的訪問時性能有些慢。為解決數據庫性能問題并進一步提高信息系統(tǒng)安全等級[3],先將HIS、LIS、RIS源數據庫整合到一個HLR目標數據庫,利用STREAMS同步源數據庫與HLR目標數據庫數據,既提供綜合查詢和報表功能,又能滿足災難發(fā)生時充當應急數據庫服務器使用,保障業(yè)務的不間斷[4]。
STREAMS作為Oracle數據庫組件之一,使用Oracle LOGMINER技術挖掘源數據庫日志,還原成LCR ,使用數據庫SGA分配內存,建立STREAM POOL,占用數據庫資源,是Oracle高級隊列(Oracle Advanced Queue)技術的一種擴展應用。Oracle STREAMS數據庫提供包和存儲過程配置、同步復制數據,數據源和目標端配置隊列Queue;在數據庫源端,配置捕獲、傳輸進程、數據庫鏈接,利用日志挖掘技術把日志內容還原成邏輯變更記錄(Logical Change Record, LCR),一個LCR對應一個原子的行變更,數據庫源端上的一個數據庫操作語言語句對應若干個LCR記錄,這些LCR保存到數據庫源端本地發(fā)送隊列中,傳輸進程把這些記錄通過網絡數據庫鏈接發(fā)送到目標數據庫的接收隊列。在目標數據庫一端,配置應用進程,應用引擎按SCN順序執(zhí)行LCR,分別實現對數據庫級、Schema級、Table級的數據同步[5]。實現的基本過程,見圖1 。

圖1 Oracle STREAMS同步實現過程
3.1 主要數據庫應用現狀和改進目標
華中科技大學同濟醫(yī)學院附屬同濟醫(yī)院HIS、LIS、RIS服務器系統(tǒng)是Linux5.6,數據庫是Oracle10.2.5,用EMC存儲陳列存儲數據文件。HIS 數據庫有45個用戶模式,數據文件大小460 G,每天產生8 G日志文件和600 M數據文件; LIS數據庫有XHSYSTEM、DBO、MIS 用戶模式,數據文件大小是274 G,每天產生3 G日志文件和200 M數據文件;RIS數據庫有TJRIS和TJPACS用戶模式,數據文件大小是166 G,每天產生80 M數據文件和2.5 G日志文件;LIS、RIS使用HIS的基本數據字典,3個數據庫沒有相同的用戶模式,在數據庫訪問高峰時性能有些慢。整合HIS、LIS、RIS源數據庫到HLR 目標數據庫,HLR 包含HIS、LIS、RIS數據庫的全部用戶對象和數據。用HLR替代HIS、LIS、RIS數據庫的實時查詢和報表功能;HLR目標數據庫也作為HIS、LIS、RIS數據庫的災難備份服務庫。
3.2 數據庫來源端到目標數據庫的整合
HLR數據庫服務器配置3 T的EMC存儲,安裝Linux5.6和Oracle10.2.5,HIS數據庫使用恢復管理器工具復制數據庫文件到HLR服務器安裝數據衛(wèi)士數據庫[6],失效備援轉換為目標主數據庫,數據庫名為HLR;使用Oracle的導入/導出工具,導出LIS數據庫的XHSYSTEM、DBO、MIS用戶對象數據并導入到HLR相應的XHSYSTEM、DBO、MIS用戶模式下;導出RIS 數據庫放射信息和影像用戶對象數據并導入到HLR相應的TJRIS和TJPACS用戶模式,同時實例化這些用戶信息,保持SCN的連續(xù)性。在HIS、LIS、RIS、HLR數據庫創(chuàng)建專用用戶DUPADM、專用用戶表空間TSP_DUPADM、數據文件DUPADM.dbf。對HIS、LIS、RIS源數據庫創(chuàng)建數據庫鏈接、隊列、捕獲、傳輸進程,在HLR目標數據庫創(chuàng)建與HIS、LIS、RIS源數據庫相對應的數據庫鏈接、隊列、應用進程。HIS數據庫按全庫級別,LIS、RIS 按用戶級別與HLR數據庫保持同步,見圖2。

圖2 Oracle STREAMS多對一單向復制
4.1 概述
參考Oracle 10GR2 STREAM官方文檔,使用STREAMS軟件包,配置HIS、LIS、RIS源數據庫到HLR目標數據庫的同步。由于篇幅限制,本文只簡述RIS源數據庫到HLR目標數據庫同步過程。
4.2 設定數據庫初始化參數和連接字符串
修改RIS、HLR數據庫的INIT.ORA文件的參數,JOB_QUEUE_PROCESSES=10,AQ_TM_PROCESSES=10,STREAMS_POOL_SIZE =300M, GLOBAL_NAMES=TRUE。添加RIS、HLR數據庫TNSNAMES.ORA文件連接本地和目標數據庫連接串。
4.3 使用sys用戶連接完成同步配置
對RIS數據庫設置歸檔模式,啟用追加日志,全局數據庫名為RIS。修改HLR的全局數據庫名為HLR。在RIS和HLR數據庫創(chuàng)建DUPADM用戶、表空間TSP_DUPADM、數據文件DUPADM.dbf。授權DUPADM用戶CONNECT、RESOURCE、AQ_ADMINISTRATOR_ROLE、DBA、SELECT_CATALOG_ROLE權限和STREAMS 的授權權限。LOGMINER系統(tǒng)表空間轉移到TSP_DUPADM表空間。
4.4 使用DUPADM用戶連接完成同步配置
創(chuàng)建RIS對HLR數據庫鏈接HLR、HLR對RIS數據庫鏈接RIS。在RIS上創(chuàng)建隊列RIS_QUEUE,在HLR 上創(chuàng)建隊列RHLR_QUEUE,在RIS上執(zhí)行包過程創(chuàng)建CAPTURE進程CAPTURE_RIS,設置捕獲TJPACS、TJPACS用戶模式規(guī)則,創(chuàng)建傳播進程RIS_TO_HLR,設置隊列傳輸TJPACS、TJPACS用戶模式數據到目標數據庫HLR規(guī)則。在HLR上創(chuàng)建應用進程APPLY_RIS,設置TJRIS和TJPACS用戶模式的應用規(guī)則。
4.5 初始化HLR數據并啟動同步進程
在RIS數據庫環(huán)境EXP導出TJPACS、TJPACS模式對象數據,在HLR數據庫環(huán)境IMP導入TJRIS、TJPACS模式對象數據,在HLR數據庫設置與RIS數據庫相同SCN,以保持HLR數據庫數據和RIS數據庫一致。啟動捕獲、傳播、應用進程。
5.1 目標數據庫建立和設置
用戶模式imp前,先在HLR數據庫創(chuàng)建必要的源數據庫用戶、角色,能正確導入對象的授權,使HIS、LIS、RIS應用程序直接訪問HLR數據庫。STREAMS從HIS、LIS、RIS到HLR單向同步,目標HLR數據庫不開歸檔日志,很大程度提高HLR數據庫的應用效率,又節(jié)約歸檔日志存儲空間。
5.2 STREAMS復制沖突解決
STREAMS配置完成后,應用進程由目標數據庫與源數據庫的數據沖突導致應用終止,使STREAMS不能同步。在數據庫同步開始時,要保證目標HLR數據庫與源數據庫同步對象SCN連續(xù)一致;目標HLR數據庫雖是打開讀寫狀態(tài),HLR數據庫用于查詢和報表等只讀操作,保持目標HLR數據庫與源數據庫同步對象的內容一致,保證STREAMS的穩(wěn)定運行;STREAMS提供了數據操作語言的更新操作沖突句柄供用戶自設置參數調用,數據操作語言的刪除、插入操作沖突句柄用戶自定義并新增用戶過程解決。對一些常見的數據庫表復制定義了沖突句柄,逐漸完善解決過程,防止應用進程終止。
5.3 STREAM日常維護
HLR目標數據庫建立后,定期查看HLR目標數據庫的DBA_APPLY狀態(tài),源數據庫的DBA_CAPTURE、DBA_PROPAGATION狀態(tài),以了解應用、捕獲、傳輸進程的運行狀況。在實際運行中,應用進程由于復制沖突導致終止的較常見,通過應用的錯誤信息找出沖突的原因,消除沖突后再執(zhí)行DBMS_APPLY_ADM.EXECUTE_ERROR過程產生的修改,重新激活應用進程。對特定數據庫表常發(fā)生復制沖突,定義操作沖突句柄,避免應用進程的停止。使用PowerBuilder工具開發(fā)圖形化的STREAMS維護軟件,查詢STREAMS相關系統(tǒng)表和動態(tài)視圖,調用STREAMS提供的軟件包過程和用戶自定義過程,監(jiān)控整個復制數據同步的過程和狀態(tài),在用戶干預下對報錯信息進行處理。
STREAMS作為免費的Oracle數據庫組件,配置較為靈活,它挖掘源數據庫日志的SQL代碼并在目標端數據庫對這些SQL代碼應用以同步數據,對操作系統(tǒng)和數據庫平臺的支持較多,應用較為廣泛,功能十分強大。利用STREAM建立的HLR數據庫在實時同步的同時允許對實時數據進行查詢、報表生成,可用于測試、備份等。HLR數據庫可以較大地提升數據庫的可用性和安全性。STREAMS維護較數據衛(wèi)士復雜,且對部分數據類型和加密過的數據不支持。Physical Standby使用介質恢復技術在數據塊級別恢復,效率高,邏輯結構和物理結構同主數據庫保持一致。Oracle STREAMS作為Oracle高可用方案對數據衛(wèi)士進行補充。
1 http://www.oracle.com/technetwork/datarase/features/availability/index.html[EB/OL].[2014-05-30].
2 李民,曹陽.基于Oracle Data Guard構建醫(yī)院信息系統(tǒng)的容災備份方案[J].醫(yī)療衛(wèi)生裝備,2012,33(8);45-47.
3 林濟南,王虹.醫(yī)院信息系統(tǒng)容災方案的設計與實現[J].中國醫(yī)療設備,2013,(9):47-49.
4 周芃,劉道踐.使用Rman實現克隆復制ORACLE數據庫[J].中國醫(yī)學裝備,2012,(3):21-23.
5 談永奇,蘇瑩.基于ORACLE 的數據同步技術在HIS中應用與研究[J].中國數字醫(yī)學,2010,5(5):68-70.
6 潘傳迪.基于DataGuard和RMAN的Oracle數據庫容災方案[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