劉鼎
摘要:目的:設(shè)計(jì)一種能連接醫(yī)院信息系統(tǒng)中不同數(shù)據(jù)庫(kù)的分布式異構(gòu)數(shù)據(jù)庫(kù)。方法:采用NET服務(wù)、透明網(wǎng)關(guān)及普通連接技術(shù)使網(wǎng)絡(luò)上的各數(shù)據(jù)庫(kù)集成為統(tǒng)一的數(shù)據(jù)應(yīng)用平臺(tái)。結(jié)果:采用該方案能很好地實(shí)現(xiàn)同時(shí)對(duì)多個(gè)異構(gòu)的數(shù)據(jù)庫(kù)系統(tǒng)進(jìn)行透明訪問(wèn)。
關(guān)鍵詞:透明網(wǎng)關(guān);普通連接;異構(gòu)數(shù)據(jù)庫(kù);分布式數(shù)據(jù)庫(kù)
中圖分類號(hào):TP311.13 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2017)07-0089-02
1 問(wèn)題的提出
目前醫(yī)院信息系統(tǒng)已滲透到醫(yī)療的每一個(gè)環(huán)節(jié)中。同時(shí)也帶來(lái)挑戰(zhàn),具體表現(xiàn)如下[1]:
(1)不同廠商開(kāi)發(fā)的信息系統(tǒng)并存,這些子系統(tǒng)的數(shù)據(jù)庫(kù)一般是分布在不同服務(wù)器上,如檢驗(yàn)系統(tǒng),手術(shù)麻醉系統(tǒng),采供血系統(tǒng)等。(2)數(shù)據(jù)共享困難,如同一工作人員存在不同工作帳號(hào)密碼;信息的嚴(yán)重滯后,如新增加的診療、價(jià)表項(xiàng)目,在輔助系統(tǒng)中要過(guò)半天甚至幾天才能使用。再如,醫(yī)院的在院人數(shù)一個(gè)變化非??斓膭?dòng)態(tài)數(shù)字,盡管算法相同,不同的系統(tǒng)在計(jì)算同一個(gè)時(shí)間點(diǎn)的在院人數(shù)也可能有很大的差別。(3)選取一種技術(shù),使得這些數(shù)據(jù)庫(kù)連接起來(lái),讓這些分布在不同數(shù)據(jù)庫(kù)平臺(tái)的數(shù)據(jù)實(shí)現(xiàn)共享。分布式異構(gòu)數(shù)據(jù)庫(kù)的集成,各大數(shù)據(jù)庫(kù)者有具體的技術(shù)實(shí)現(xiàn),例如,SQLSERVER提供了LINKED SERVER技術(shù),它通過(guò)ODBC實(shí)現(xiàn)與其它數(shù)據(jù)庫(kù)的互聯(lián);DB2中的INFORMATION INTEGRATOR軟件,能幫助客戶將數(shù)據(jù)庫(kù)進(jìn)行集成。ORACLE提供了異構(gòu)服務(wù)(HETEROGENEOUS SERVICES)集成不同的數(shù)據(jù)庫(kù),使得客戶能即時(shí)訪問(wèn),管理和分析存儲(chǔ)于醫(yī)院數(shù)據(jù)庫(kù)的各類數(shù)據(jù)。
2 數(shù)據(jù)庫(kù)集成為分布式數(shù)據(jù)庫(kù)之路
如何把同構(gòu)異構(gòu)數(shù)據(jù)庫(kù)集成為分布式數(shù)據(jù)庫(kù)。ORACLE提供了一種名為分布式處理(DISTRIBUTED PROCESSING)的技術(shù)。同構(gòu)數(shù)據(jù)庫(kù)連接,可以直接利用ORACLE自帶的NET服務(wù)和DATABASE LINKS技術(shù)就可能現(xiàn)實(shí)連接。通過(guò)異構(gòu)服務(wù)器技術(shù),異構(gòu)數(shù)據(jù)庫(kù)用戶連接一個(gè)承擔(dān)著連接,協(xié)同別的數(shù)據(jù)庫(kù)任務(wù)ORACLE數(shù)據(jù)庫(kù)??蛻舳诉B接的這個(gè)數(shù)據(jù)庫(kù)稱為本地?cái)?shù)據(jù)庫(kù)(LOCAL DATABASE)。除此以外,其它集成數(shù)據(jù)庫(kù)稱為遠(yuǎn)程數(shù)據(jù)庫(kù)(REMOTE DATABASE)。通過(guò)在本地?cái)?shù)據(jù)庫(kù)建立DATABASE LINKS技術(shù),終端能訪問(wèn)任何一臺(tái)遠(yuǎn)程數(shù)據(jù)庫(kù),其查詢進(jìn)程負(fù)責(zé)事務(wù)和連接的管理,事務(wù)引擎負(fù)責(zé)事務(wù)的協(xié)同。在客戶端眼里,非ORACLE數(shù)據(jù)庫(kù)就像遠(yuǎn)程O(píng)RACLE一樣,它能理解ORACLE的SQL和數(shù)據(jù)字典。ORACLE服務(wù)中的異構(gòu)服務(wù)組件是實(shí)現(xiàn)非ORACLE異構(gòu)數(shù)據(jù)庫(kù)的訪問(wèn)。大多情況下,在異構(gòu)服務(wù)組件工作對(duì)客戶端來(lái)說(shuō)是完全透明的,客戶端可以用ORACLE一樣的SQL,甚至是PLSQL來(lái)查詢非ORACLE數(shù)據(jù)庫(kù)。以下是解決這些分布式,異構(gòu)數(shù)據(jù)庫(kù)兩個(gè)方法:普通連接技術(shù)和透明網(wǎng)關(guān)[2]。
普通連接(GENERIC CONNECTIVITY)技術(shù)是一種使用ODBC或者OLEDB驅(qū)動(dòng)程序訪問(wèn)任何ODBC或OLEDB兼容的非ORACLE系統(tǒng)的通用解決方案。它滿足了對(duì)許多ORACLE沒(méi)有網(wǎng)關(guān)解決方案的數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)訪問(wèn)需求。這種特性使用ODBC和OLEDB的業(yè)界標(biāo)準(zhǔn)實(shí)現(xiàn)了透明連通性。ORACLE普通連接使訪問(wèn)像MYSQL,F(xiàn)OXPRO,ACCESS等數(shù)據(jù)庫(kù)成為可能。
透明網(wǎng)關(guān)(TRANSPARENT GATEWAYS)是一種非ORACLE系統(tǒng)特別編碼,量身定制的解決方案。它們提供一種比普通連接擁有更多功能和更好性能的優(yōu)化方案,普通連接依賴于業(yè)界標(biāo)準(zhǔn),而透明網(wǎng)關(guān)使用它們的本地接口訪問(wèn)非ORACLE系統(tǒng)。ORACLE透明網(wǎng)關(guān)可以連接DB2,SYBASE,INFORMINX,SQLSERVER等數(shù)據(jù)庫(kù)。下面將結(jié)合某醫(yī)院環(huán)境。通過(guò)具體的例子來(lái)說(shuō)明ORACLE系統(tǒng)如何實(shí)現(xiàn)分布式數(shù)據(jù)庫(kù)的訪問(wèn)。
2.1 同構(gòu)數(shù)據(jù)庫(kù)連接示例(ORACLE與ORACLE實(shí)例的連接)
ORACLE數(shù)據(jù)庫(kù)與ORACLE數(shù)據(jù)庫(kù)間的之間的連接為同構(gòu)數(shù)據(jù)庫(kù)的連接,同構(gòu)數(shù)據(jù)庫(kù)間差異較小,所以連接比較簡(jiǎn)單,網(wǎng)絡(luò)配置方面只需本地?cái)?shù)據(jù)庫(kù)端的NET服務(wù)能連接到指定的ORACLE數(shù)據(jù)庫(kù)。
2.2 異構(gòu)構(gòu)數(shù)據(jù)庫(kù)普通連接示例(ORACLE與MYSQL實(shí)例的連接)
某醫(yī)院抗菌藥物等級(jí)設(shè)置是存放在合理醫(yī)療業(yè)務(wù)MYSQL數(shù)據(jù)庫(kù)的MLRK_ITEM_PROP_MASTER表中,在未有做集成之前,DDD值統(tǒng)計(jì)可實(shí)現(xiàn)的方式主要是通過(guò)PB,DELPHI編寫(xiě)的軟件或藥劑科手工統(tǒng)計(jì)。PB,DELPHI等第三代語(yǔ)言采用諸如FOR,LOOP循環(huán)語(yǔ)句分別從軍衛(wèi)數(shù)據(jù)庫(kù)及合理醫(yī)療業(yè)務(wù)數(shù)據(jù)庫(kù)查詢出來(lái)不同的數(shù)據(jù)集DATASET,再嵌套的二層循環(huán)對(duì)每行記錄依次分析其抗菌藥物等級(jí)并計(jì)算期DDD值。
通過(guò)ORACLE與MYSQL異構(gòu)數(shù)據(jù)庫(kù)的集成,并利用充分利用SQL語(yǔ)言的優(yōu)勢(shì),并利用ORACLE10G中的正則表達(dá)式優(yōu)勢(shì)(此特性是MYSQL及PB,DELPHI都沒(méi)有的)進(jìn)行分析,并對(duì)視圖的方法對(duì)DDD統(tǒng)計(jì)進(jìn)行展示。首先創(chuàng)建名為MYSQL的DATABASE LINK連接。
(1)安裝MYSQL-CONNECTOR-ODBC-3.51.28-WIN32.MSI的MYSQLODBC驅(qū)動(dòng),然后配置ODBC環(huán)境。(2)建立系統(tǒng)ODBC建立一個(gè)名為MYSQL數(shù)據(jù)源(不要在用戶ODBC建立)。(3)在ORACLE\PRODUCT\10.2.0\DB_1\HS\ADMIN下加入INITMEDICARE.ORA。(4)建立MYSQL的DATABASE LINK。然后創(chuàng)建在本地?cái)?shù)據(jù)庫(kù)上創(chuàng)建搞菌藥物等級(jí)視圖;最后利用上面MLRK_ANTIDRUG_LEVEL_V 視圖和本地?cái)?shù)據(jù)庫(kù)的正則表達(dá)式函數(shù)REGEXP_SUBSTR對(duì)抗菌藥物DDD值的計(jì)算并生成視圖。endprint
2.3 異構(gòu)構(gòu)數(shù)據(jù)庫(kù)透明網(wǎng)關(guān)示例(ORACLE與SQLSERVER實(shí)例的連接)
(1)安裝透明網(wǎng)關(guān)服務(wù)ORACLE。在ORACLE10G上,透明網(wǎng)關(guān)是一個(gè)單獨(dú)的組件,需要單獨(dú)下載安裝,這個(gè)安裝包約為20M。點(diǎn)擊SETUP.EXE,啟動(dòng)安裝界面,安裝ORACLE TRANSPARENT GATEWAY FOR MICROSOFT SQL SERVER。(2)配置透明網(wǎng)關(guān)參數(shù)文件。這里可以理解將SQLSERVER作為ORACLE的一個(gè)實(shí)例,這樣讓用戶訪問(wèn)SQLSERVER時(shí)就像訪問(wèn)ORACLE一樣。透明網(wǎng)關(guān)安裝完后,可以在$ORACLE_HOME下找到TG4MSQL目錄,該目錄的ADMIN文件夾下存在一個(gè)名為INITTA4MSQL.ORA的文件。文件名TG4MSQL就是SQLSERVERD在ORACLE的一個(gè)實(shí)例名。(3)在透明網(wǎng)關(guān)服務(wù)器上服務(wù)器上配置監(jiān)聽(tīng)。在$ORACLE_HOME下找到下找到NETWORK目錄,該目錄下ADMIN文件夾下會(huì)有一個(gè)LISTENER.ORA文件,編輯該文件,添加實(shí)例監(jiān)聽(tīng)。
3 結(jié)果
通過(guò)以上方法把與ORACLE數(shù)據(jù)庫(kù)同構(gòu)或異構(gòu)數(shù)據(jù)庫(kù)集成,給HIS系統(tǒng)帶來(lái)好處如下[3]:
3.1 發(fā)揮分布式數(shù)據(jù)庫(kù)功能
使醫(yī)院院的各種大大小的數(shù)據(jù)庫(kù)都可以認(rèn)為是ORALCE數(shù)據(jù)庫(kù)的一個(gè)實(shí)例,實(shí)現(xiàn)了ORACLE與SQLSERVER間跨實(shí)數(shù)據(jù)庫(kù)的INSERT,UPDATE,INSERT,CREATE TABLE等操作。通過(guò)此集成,客戶端能夠隨時(shí)隨地訪問(wèn)這些分布式系統(tǒng)而無(wú)需要知道數(shù)據(jù)存放的位置及存儲(chǔ)方式,充分發(fā)揮了分布式數(shù)據(jù)庫(kù)的功能。
3.2 裝備ORACLE的功能特性
在ORACLE10G版本中具備了REGEXP_LIKE, REGEXP_INSTR、REGEXP_SUBSTR以及 REGEXP _REPLACE正則表達(dá)功能。又例如ORACLE10G中的行合并函數(shù)WMSYS.WM_CONCAT,UTL_RAW.CAST_TO _VARCHAR2等這些都是相當(dāng)有用的函數(shù),這些功能在整合后的分布式數(shù)據(jù)庫(kù)中能夠很好使用。使不同的數(shù)據(jù)庫(kù)在保持自己功能同時(shí),也具備了ORACLE的功能特性。
3.3 加快數(shù)據(jù)庫(kù)開(kāi)發(fā),調(diào)試,維護(hù)
SQL為第四代高級(jí)的非過(guò)程化編程語(yǔ)言4GL,它允許用戶在高層數(shù)據(jù)結(jié)構(gòu)上工作。用戶只要知道做什么,而要求知道怎么做。它不要求用戶指定對(duì)數(shù)據(jù)的存放方法,也不需要用戶了解具體的數(shù)據(jù)存放方式,故此SQL語(yǔ)言已經(jīng)是有一定“智能化”。
4 結(jié)語(yǔ)
數(shù)據(jù)庫(kù)集成技術(shù)使HIS系統(tǒng)中的信息孤島找到橋梁。數(shù)據(jù)庫(kù)集成會(huì)經(jīng)常遇到不同字符集,數(shù)據(jù)類型轉(zhuǎn)換和SQL語(yǔ)言可能不兼容問(wèn)題。畢竟,數(shù)據(jù)庫(kù)集成涉及面非常廣,技術(shù)也非常多。但它也是一種注重實(shí)踐的技術(shù),只要我們?cè)诓粩嗍褂眠@些技術(shù)過(guò)程不斷總結(jié)經(jīng)驗(yàn),以上這些問(wèn)題都會(huì)迎刃而解。
參考文獻(xiàn)
[1]蘇淑文,翁敬農(nóng).ORACLE系統(tǒng)異構(gòu)數(shù)據(jù)庫(kù)環(huán)境下的信息集成[J].微機(jī)發(fā)展,2004,(10):1-3.
[2]郭東恩,沈燕.ORACLE透明網(wǎng)關(guān)核技術(shù)實(shí)現(xiàn)異構(gòu)數(shù)據(jù)庫(kù)互連[J].電腦開(kāi)發(fā)與應(yīng)用,2008,(9):58-63.
[3]張凱.醫(yī)院信息系統(tǒng)集成技術(shù)的研究與應(yīng)用[D].北京航空航天大學(xué),2003.endprint