《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 利用OCI封裝類實現Oracle與國產數據庫間的應用程序移植
利用OCI封裝類實現Oracle與國產數據庫間的應用程序移植
2016年微型機與應用第08期
李培軍,畢于慧,田仲,張權,董瑋
(61139部隊信息中心,北京 100091)
摘要: 利用國產數據庫(達夢和神通)與Oracle數據庫訪問接口OCI的兼容性,設計了OCI訪問接口封裝類,以VC++為平臺實現了應用程序由Oracle向國產數據庫的移植。對移植后的查詢性能進行了比較,結果表明,國產數據庫的數據查詢性能優于Oracle,作為國家自主知識產權,國產數據庫在安全性和后續服務上比Oracle更有優勢,對于建立我國自主可控的信息產業體系有一定借鑒意義。
Abstract:
Key words :

  李培軍,畢于慧,田仲,張權,董瑋

  (61139部隊信息中心,北京 100091)

       摘要: 利用國產數據庫(達夢和神通)與Oracle數據庫訪問接口OCI的兼容性,設計了OCI訪問接口封裝類,以VC++為平臺實現了應用程序由Oracle向國產數據庫的移植。對移植后的查詢性能進行了比較,結果表明,國產數據庫的數據查詢性能優于Oracle,作為國家自主知識產權,國產數據庫在安全性和后續服務上比Oracle更有優勢,對于建立我國自主可控的信息產業體系有一定借鑒意義。

  關鍵詞OCI封裝;國產數據庫;移植

0引言

  為提高信息安全,發展自主可控信息系統是我國信息化建設中的重要任務,采用國產數據庫構建應用系統正成為趨勢。目前,很多政府部門和企業都在嘗試將應用遷移到國產數據庫上。本文針對基于Oracle數據庫的應用程序,利用國產數據庫與Oracle數據庫訪問接口OCI的兼容性,研究了如何利用OCI進行面向對象的封裝,構建通用的數據庫訪問類,為用戶提供統一的數據庫訪問接口,使程序員更方便地實現數據應用由Oracle數據庫向國產數據庫的移植。

1OCI簡介

  OCI(Oracle Call Interface)是Oracle公司開發的一個應用程序開發工具。它提供了一組可對Oracle數據庫進行存取的接口子例程,通過在第三代語言中進行調用可達到存取Oracle數據庫的目的[1]。作為一種數據庫訪問方法,它比ODBC、ADO等訪問接口更為靈活,訪問和執行速度也更快。

2OCI封裝類的設計與實現

  2.1OCI類的設計

  進行OCI封裝類時的設計思想如下[23]:

  (1)對外隱藏復雜的OCI函數調用,只提供鏈接、查詢、斷開等直觀的數據庫訪問方法。

  (2)使用OCI調用會涉及許多句柄,把各類句柄作為類成員進行管理。

  (3)提供統一友好的接口供應用程序調用。

  2.2OCI類的實現

001.jpg

  使用OCI方法實現Oracle數據庫應用鏈接流程如圖1所示,本文將其過程進行封裝,將OCI底層函數封裝到一個類里,該類包含3個函數:Connect()、Query()和DisConnect(),其中,Connect()實現數據庫的鏈接,Query()函數實現數據的查詢。針對大字段,可構建專門的查詢語句QueryBLOB()。

  (1)Connect()函數

  Connect()函數主要包括OCI環境初始化、錯誤檢查、分配事務句柄等。

  OCIEnvInit(&envhp,(ub4)OCI_DEFAULT,(size_t)0,(dvoid**)0);

  OCIHandleAlloc((dvoid*)envhp,(dvoid**)&errhp,(ub4)OCI_HTYPE_ERROR,(size_t)0,(dvoid**)0);

  OCIAttrSet( (dvoid*)svchp,(ub4)OCI_HTYPE_SVCCTX,(dvoid*)srvhp,(ub4)0,(ub4)OCI_ATTR_SERVER,errhp);圖1OCI的流程和對應封裝函數status = OCISessionBegin(svchp,errhp,usrhp,OCI_CRED_RDBMS,OCI_DEFAULT);

  OCIAttrSet((dvoid*)svchp,(ub4)OCI_HTYPE_SVCCTX,(dvoid*)usrhp,(ub4)0,(ub4)OCI_ATTR_SESSION,errhp);

  OCIHandleAlloc( (dvoid *)envhp,(dvoid **)&txnhp,OCI_HTYPE_TRANS,0,0);

  (2)Query()函數

  open();

  prepare(query);

  allocateCursor();

  (3)DisConnect()函數

  該函數包括結束會話、釋放句柄和相應資源。

  OCISessionEnd( svchp,errhp,usrhp,(ub4)OCI_DEFAULT );

  OCIServerDetach(srvhp,errhp,(ub4)OCI_DEFAULT);

  OCIHandleFree((dvoid*)txnhp,(ub4)OCI_HTYPE_TRANS);

3使用OCI封裝類進行數據應用的移植

  3.1移植過程

  本文將上述的OCI封裝類用于實現基于Oracle數據庫的應用向國產數據庫移植。Oracle數據庫版本9.0以上,國產數據庫采用達夢7.1.3.165、神通數據庫7.0,達夢數據庫和神通數據庫分別提供了DM DCI和CNIL數據庫訪問接口[4-5],這兩個接口都與Oracle OCI接口兼容,所以在數據應用移植的過程中只需要將Oracle的oci.h、oci.lib替換為達夢的oci.h、 dmoci.lib或者神通的cnil.h、cnil.lib,同時將達夢或者神通安裝目錄下的include目錄包含即可編譯成功,無需修改代碼。表1中描述了不同數據庫在移植過程中所必需的文件。

  數據應用移植過程如圖2所示。采用遷移工具將數據從Oracle數據庫遷移到國產數據庫中,國產數據庫都提供了數據遷移工具,并支持多數據源;各類型數據庫通過不同的數據庫頭文件來實現底層函數的調用[67];SQL配置工具主要方便用戶在調整庫結構或優化查詢時修改SQL語句。

  通過圖2可以看出,將應用程序從Oracle數據庫移植到國產數據時,通過一個集中的OCI面向對象封裝類可實現不同類數據庫管理系統訪問接口,只需將對應的庫文件和頭文件進行替換并重新編譯程序即可完成,同時要將對應的動態庫與應用程序放在一起。

  3.2應用效果

  本文采用Visual C++ 6.0為開發平臺進行應用開發,對某單位的業務應用系統進行國產化移植,并分別在本地和通過網絡(百兆)客戶端,使用業務程序查詢業務庫中某一張表(21個字段,76 470條記錄),并對查詢結果進行比較,各類數據庫的查詢速度如表2所示。

002.jpg

  從查詢速度上看,神通數據庫優勢較為明顯;從網絡配置上,達夢和神通數據庫無需安裝數據庫客戶端,應用程序可直接訪問網絡數據庫(只需提供數據庫名和IP地址即可),較之于Oracle開發的應用,部署和升級更加方便。

4結論

  Oracle OCI一種相對高效的底層訪問方式,國產主流數據庫都針對OCI開發了基于數據庫底層的且兼容Oracle的訪問接口(如達夢的DCI和神通的CNIL),本文采用VC++構建了適應不同訪問接口的OCI封裝類[8-9],并成功應用于某單位基于數據庫的應用程序國產化改造,提高了從基于Oracle的OCI向國產數據庫的應用移植效率。另外,國產數據庫在安全性和后續服務上比Oracle更有優勢,是未來的發展趨勢。

參考文獻

  [1] 何雄.Oracle Spatial與OCI高級編程[M].北京:中國鐵道出版社,2006.

  [2] 莫晶,胡術,李娜娜,等.基于OCI的數據庫訪問接口的改進與實現[J].福建電腦,2009,25(1):12.

  [3] 龐維翰,陳有青.用OCI封裝類進行數據庫間應用系統的移植[J].計算機工程與應用,2005,41(29):177179.

  [4] 達夢數據庫(武漢)有限公司.達夢程序員手冊[Z].2014.

  [5] 天津神舟通用數據技術有限公司.神通程序員手冊[Z].2010.

  [6] POLI F, OVEREEM S, LAMMERS G J, et al. Narcolepsy as an adverse event following immunization: case definition and guidelines for data collection, analysis and presentation[J]. Vaccine, 2013, 31(6): 9941007.

  [7] POLI F, OVEREEM S, LAMMERS G J, et al. Narcolepsy as an adverse event following immunization: case definition and guidelines for data collection, analysis and presentation[J]. Vaccine, 2013, 31(6): 9941007.

  [8] 蔣楠,于紅業,葛利俊,等.Oracle內嵌表及應用[J].微型機與應用,2014,33(3):9192.

  [9] 陳旭飛,于鳳芹,欽道理,等.異構數據庫系統數據轉換方法設計與實現[J].微型機與應用,2015,34(8):9496,100.


此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 啪啪精品 | 99福利 | 久久福利一区二区 | 四虎免费永久网站入口 | 久久久一级| 色综合久久综合网 | 国产片欧美片亚洲片久久综合 | 国产精品永久免费自在线观看 | 国产精品欧美亚洲 | 六芒星免费观看视频在线看第二集 | 欧美aⅴ | 欧美地区一二三区 | 欧1州区2区3区4区产品 | 久久综合中文字幕一区二区 | 日本亚洲成人 | 五月婷婷丁香在线观看 | 视频一区 中文字幕 | 国产精品视频九九九 | 久久成人综合网 | 免费在线看h | 丁香六月婷婷综合 | 国产成人综合亚洲欧美在 | 国产精品视频视频久久 | 欧美老女人性视频 | 成人影院一区二区三区 | 日本在线日本中文字幕日本在线视频播放 | 久久99精品久久久久久久不卡 | 在线a久青草视频在线观看g | 国产羞羞羞视频在线观看 | 四虎永久在线观看 | 久久香蕉热 | 国产精品视频久久久久久 | 免费福利资源站在线视频 | 五月激情丁香 | 成人自拍视频网 | 99pao强力打造免费高清色 | 成人在线综合网 | 天天想你免费视频观看 | 免费观看男女羞羞的视频网站 | 四虎免费永久观看 | 国产精品九九视频 |