現(xiàn)在的數(shù)據(jù)庫同步系統(tǒng)大多數(shù)采用C/S結(jié)構(gòu),一般采用數(shù)據(jù)交換模式,技術(shù)瓶頸在于無法突破局域網(wǎng)的限制,這種模式在多點并發(fā)交換時數(shù)據(jù)的邏輯處理及沖突難以避免,另一種模式是進行點到點的數(shù)據(jù)維護,這樣的維護數(shù)據(jù)準(zhǔn)確率較低,且?guī)磔^高的成本,整個供應(yīng)鏈的低效率也導(dǎo)致需求不能被滿足。在目前分布式數(shù)據(jù)庫環(huán)境被廣泛使用的情況下,迫切需要一種支持分布式環(huán)境的數(shù)據(jù)同步技術(shù),實現(xiàn)將一個節(jié)點的數(shù)據(jù)變更轉(zhuǎn)移到其它節(jié)點上去,從而保證分布式環(huán)境中各節(jié)點上數(shù)據(jù)的一致同步。
現(xiàn)行的數(shù)據(jù)同步基本利用數(shù)據(jù)庫本身的同步工具,數(shù)據(jù)庫自帶的同步工具局限性比較大,對不同數(shù)據(jù)庫之間的同步支持程度有限,費用較高,更重要的是也難以進行二次開發(fā)。另外一些軟件開發(fā)商在外網(wǎng)直接與數(shù)據(jù)庫相連實現(xiàn)同步,但是這種方式會暴露數(shù)據(jù)庫IP,不利于數(shù)據(jù)庫的安全。還有一些軟件開發(fā)商利用中間件實現(xiàn)數(shù)據(jù)庫的同步,但是這種中間件往往只能運用于某種領(lǐng)域,不利于軟件性能的擴展。
本文研究及應(yīng)用工作主要是對武漢開目的PDM的異地數(shù)據(jù)庫同步進行研究,解決了武漢開目的PDM用戶在企業(yè)擴大后主公司和分公司的異構(gòu)數(shù)據(jù)庫同步的安全、效率問題。此工具的基本工作過程是,當(dāng)在武漢開目的PDM啟動數(shù)據(jù)庫同步功能的時候,相應(yīng)的異地數(shù)據(jù)庫的數(shù)據(jù)就會被更新。
1 異地數(shù)據(jù)庫同步系統(tǒng)開發(fā)流程和總體設(shè)計
1.1 異地數(shù)據(jù)庫同步系統(tǒng)基本結(jié)構(gòu)和結(jié)構(gòu)圖
異地數(shù)據(jù)庫同步系統(tǒng)的開發(fā)與傳統(tǒng)的C/S結(jié)構(gòu)和B/S結(jié)構(gòu)不同,其采用的是混合C/S和B/S的結(jié)構(gòu),不僅實現(xiàn)了瘦客戶端,而且沒有B/S結(jié)構(gòu)顯著的缺點,本設(shè)計主要是采用C#語言完成,將其編譯成相應(yīng)的DLL類庫,EXE程序,和WCF服務(wù)程序,并在四臺計算機上進行測試,結(jié)構(gòu)圖如圖1所示。
圖1 異地數(shù)據(jù)庫同步系統(tǒng)結(jié)構(gòu)圖
其中主公司客戶端為主公司的PDM,當(dāng)PDM在進行一系列的操作后,會產(chǎn)生SQL語句,然后開啟PDM的同步功能時,調(diào)用本系統(tǒng)的“客戶端可調(diào)用DLL模塊”或者“客戶端的可調(diào)用控制臺應(yīng)用程序模塊”,即可進行對“服務(wù)器ⅡS上部署的WCF模塊”進行調(diào)用,該模塊即可完成分公司的數(shù)據(jù)庫的同步。
1.2 .NET基本開發(fā)流程
微軟發(fā)布的.NET框架可以很好的支持WCF服務(wù),并且可以較輕松地完成編碼,而且該工具編寫的程序?qū)τ趦?nèi)存的管理更加得心應(yīng)手,不會出現(xiàn)內(nèi)存泄露等一直困擾著程序員和用戶的麻煩,開發(fā)流程大體分為以下七個步驟:
(1)在本機上安裝微軟的vs2010以及安裝.NET3.5框架。(2)設(shè)計PDM與同步系統(tǒng)的結(jié)合點,目前提供一個封裝好的類庫,還提供了一個編譯完成的EXE文件,都可以通過武漢開目的二次開發(fā)語言DPL編寫腳本進行調(diào)用。(3)按照上述結(jié)構(gòu)圖在.NEI3.5環(huán)境下,用C#編寫完所需要的代碼。(4)對程序進行編譯和配置,其中比較有難點的是WCF的服務(wù),ⅡS上面的WCF的部署。(5)仿真部署。(6)對配置文件的配置,需要配置的文件有IP.ini,dpconfig.ini,Web.config,三種共六個文件。(7)日志處理,每一次同步都在兩處寫入日志,例如在主公司客戶端執(zhí)行同步時候,首先是在分公司服務(wù)端寫入日志,然后在主公司客戶端寫入日志。
2 系統(tǒng)的主要功能模塊
2.1 服務(wù)器ⅡS上部署的WCF模塊。在異地數(shù)據(jù)庫同步系統(tǒng)中,因為要實現(xiàn)瘦客戶端,所以主要代碼需要在服務(wù)器上執(zhí)行,也就是需要架設(shè)WCF服務(wù),WCF模塊主要是實現(xiàn)客戶端的服務(wù)請求,然后發(fā)送命令在服務(wù)器上執(zhí)行代碼。舉例WcfServicel的主要代碼,首先是在vs2010上面建立WCF服務(wù)應(yīng)用程序,然后在解決方案的WcfServicel下的IServicel.cs內(nèi)提供服務(wù)契約,開放接口,主要代碼是:
//這個接口主要是用于客戶端服務(wù)器調(diào)用的
[OperationContract]
string DeaIWcf(string parm);
//這個接口主要是用于主公司客戶端程序調(diào)用的
[OperationContract]
string UpdateData(string parm);
其中參數(shù)parm是傳人的SQL語句;
然后在WcfServicel下的Servicel.svc.cs內(nèi)實現(xiàn)該接口,偽代碼如下:
(1)連接異地WCF服務(wù)。
(2)調(diào)用服務(wù)的SQL處理接口。
(3)提供被異地調(diào)用的WCF接口,接口可以完成連接數(shù)據(jù)庫,執(zhí)行SQL語句,任意一條SQL語句執(zhí)行失敗則回滾,寫日志的功能。
2.2 客戶端的可調(diào)用DLL模塊。該模塊是winforml中的ClassLibraryl.dll和IP.ini,這是用.NEI3.5的C#編寫并封裝的,在實際應(yīng)用時可以提供程序運行接口,并與PDM集成,調(diào)用服務(wù)器上的WCF服務(wù),實現(xiàn)功能如下:
(1)得到本地WCF服務(wù)器的IP地址。
(2)連接本地WCF服務(wù),并調(diào)用其接口實現(xiàn)調(diào)用異地WCF服務(wù)接口的功能。
封裝DLL時,直接用代碼連接ⅡS上面的DLL服務(wù)。
2.3 客戶端的可調(diào)用控制臺應(yīng)用程序模塊。該模塊的代碼與“客戶端運行界面模塊”的代碼基本相同,區(qū)別在于該模塊被編譯成控制臺應(yīng)用程序,更方便調(diào)用。
2.4 基于MD5算法的登陸密碼驗證模塊。該模塊主要是為了數(shù)據(jù)庫連接字符串的保密性而設(shè)計,首先用加密工具將密碼用MD5算法進行運算,然后連接數(shù)據(jù)庫,查找數(shù)據(jù)庫中輸入用戶名所對應(yīng)的MD5運算過后的密碼,如果相同才可以進入同步界面。
2.5 瀏覽器上可視化同步操作模塊。該模塊實現(xiàn)在瀏覽器進行可視化同步操作功能,以及提供查看日志功能。
2.6 主要模塊之間的關(guān)系。各個模塊之間的主要關(guān)系如圖2所示。
圖2 各個模塊之間的關(guān)系圖
這五個模塊按照從左到右的順序依次運行,最后實現(xiàn)本地PDM數(shù)據(jù)庫到異地PDM數(shù)據(jù)庫的同步。
3 異地數(shù)據(jù)庫同步系統(tǒng)的部署與實現(xiàn)
3.1 部署需要的機器以及環(huán)境
需要四臺機器分別充當(dāng)主公司服務(wù)器,主公司客戶端,分公司服務(wù)器,分公司客戶端。在模擬演示時,也可以讓一臺機器充當(dāng)4個角色。安裝有.NET13.5框架;安裝ⅡS6.0;需要SQL或者ORACLE數(shù)據(jù)庫。
3.2 WCF服務(wù)的部署以及客戶端程序的配置
3.2.1 WCF服務(wù)的部署與測試
具體步驟如下:
(1)啟動ⅡS6.0程序。
(2)創(chuàng)建PDM服務(wù)(即:WcfServicel)的虛擬目錄。
(3)PDM服務(wù)的開始。
(4)測試服務(wù),確保服務(wù)已經(jīng)啟動。
3.2.2 Ⅱs中WcfServicel中的配置
(1)在\WcfServicel\bin\config\中的dpconfig.ini的配置
數(shù)據(jù)庫連接配置:
在服務(wù)端的\bin\config\目錄的dpcornfig.ini文件內(nèi)配置,其內(nèi)容如下
######
[DATABASE_單元測試0]
DebugPrompt=|64|128|512
NAME=DPCODEAPP
DSN=NEW=Oracle
in OraClient10g_home2;DSN=YLORACLE;
SERVER=YLORACLE
OPEN=DSN=CODEDISTRI;UID=pdm50sp2;
PWD=123;DBTYPE=O
######
[DATABASE_單元測試S]
NAME=S_dpTest
DSN=NEW=SQL;DSN=S_dpTest;SERVER=192.168.40.18\sq108
OPEN=DSN=S_dpTest;DATABASE=pdm501;UID=sa;PWD=sa123;DBTYPE=S
[DATABASE]
DebugPrompt=164|128|512
NAME=DPCODEAPP
DSN=NEW=Oracle
in OraClientlOg_home2;DSN=YLORACLE;SERVER=YLORACLE
OPEN=DSN=CODEDISTRI;UID=pdm50sp2;PWD=123;DBTYPE=0
(2)dpconfig.ini的配置的說明
其中[DATABASE_單元測試O]和[DATABASE_單元測試S]下的內(nèi)容為配置格式,程序運行時候,讀取的是[DATABASE]下面的內(nèi)容,所以,在服務(wù)端配置數(shù)據(jù)庫的連接字符串的時候,請在[DATABASE]下面配置。
[DATABASE]
NAME=配置庫引用名
DSN=文件全路徑名//其中可包含一個%s作為變動部分由kmdp_GetFilePath()傳入的參數(shù)設(shè)定
//T_DATABASE中的DATABASE.DSN如果未配置SERVER=項或配置SERVER=*,則表示該應(yīng)用庫與配置庫同SERVER
OPEN=文件全路徑名//其中可包含一個%s作為變動部分由kmdp_GetFilePath()傳入的參數(shù)設(shè)定
//數(shù)據(jù)庫類型(A:Access,D:Db2,E=Excel,P:OpenBase,S:Sql Server,M:DM,O:Oracle,V:Vfp,Y:Sybase)
DebugPrompt=信息提示開關(guān)(多個開關(guān)用|組合)
0=清除先前設(shè)置的開關(guān)項,否則本次開關(guān)項將與先前的疊加
1=錯誤提示(缺省含此開關(guān),除非使用開關(guān)0)
2=警告提示
4=主要結(jié)果提示,8=中間結(jié)果提示
16=運行路線提示,32=SQL語句和公式提示
64=信息存盤至WorkDirectory目錄下的errorOutFile.Txt,128=立即存盤
256=應(yīng)用提示,512=合法性檢查,1024=啟用信息選擇框
2048=關(guān)閉瀏覽器,4096=跳過慢速語句,8192=出現(xiàn)錯誤和警告時存盤
16384=特殊信息
典型用例:
不提示錯誤,只信息寫盤:DebugPrompt=0|64|128
與先前開關(guān)疊加(包括默認開關(guān)1):DebugPrompt=64|128
FilePath=文件全路徑名//其中可包含一個%s作為變動部分由kmdp_GetFilePath()傳入的參數(shù)設(shè)定
IsAlias=?//O:表和字段使用原名,1:使用別名
3.2.3 客戶端程序中的部署和配置
部署工程文件夾中的winforml和winform2客戶端程序,以winforml(即主公司的客戶端)的部署為例(winform2的部署和配置相同),winforml的截圖如圖3所示。
圖3 winforml初始化時的截圖
其中IP.ini內(nèi)輸入WcfServicel(即主公司ns服務(wù)器的IP),如212.212.212.212.(故部署winform2時,IP.ini內(nèi)需要填寫分公司的ns服務(wù)器的IP,如233.233.233.233),IP.ini的配置如圖4所示。
圖4 IP.ini的截圖
然后將winforml放在主公司的服務(wù)端即可,點擊“讀入數(shù)據(jù)”以后的截圖如圖5所示。
圖5 winforml點擊讀入數(shù)據(jù)后的截圖
其讀取的內(nèi)容來自于SQL.txt,SQL.txt的截圖如圖6所示。
圖6 SQL.txt的截圖
winforml的截圖中的ClassLibraryl.dll是用C#封裝好的類庫,可以單獨把封裝好的ClassLibraryl.dll的內(nèi)容拿出來用,函數(shù)接口即SQL.txt的內(nèi)容,是為與PDM集成準(zhǔn)備的。也可以用到其它產(chǎn)品的異地數(shù)據(jù)庫的同步中。
3.3 異地數(shù)據(jù)庫同步系統(tǒng)與PDM的集成
本系統(tǒng)提供了兩種方式與PDM集成,分別是PDM調(diào)用這個ClassLibrary2.dll啟動服務(wù)和PDM調(diào)用Conl.exe(Con2.exe)來實現(xiàn)集成,調(diào)用的方式就是在SQL.txt內(nèi)寫入SQL命令然后啟動Conl.exe(Con2.exe)即可。
3.4 實驗結(jié)果展示
在主公司客戶端SQL.txt輸入命令如圖7所示。
圖7 SQL.txt中輸入的SQL命令
在分公司數(shù)據(jù)庫服務(wù)器上的查詢命令為:
select*from PDM_QUALIFY;
select*from PDM_MAIL;
select*from PDM_MAIJ_LOG
查詢結(jié)果如圖8所示。
圖8 實驗結(jié)果
4 結(jié)語
本系統(tǒng)利用.NET框架下面的C#編程,在微軟的XP系統(tǒng)中進行了仿真測試,本系統(tǒng)為PDM提供了一個Web Service接口,為C/S結(jié)構(gòu)下的PDM設(shè)計實現(xiàn)了B/S結(jié)構(gòu)和C/S結(jié)構(gòu)的混合結(jié)構(gòu),非常具有特色,能夠很好的解決PDM異地數(shù)據(jù)庫的同步,而且能夠有效的解決異地數(shù)據(jù)庫同步的效率和安全問題,方便了公司的二次開發(fā)。
核心關(guān)注:拓步ERP系統(tǒng)平臺是覆蓋了眾多的業(yè)務(wù)領(lǐng)域、行業(yè)應(yīng)用,蘊涵了豐富的ERP管理思想,集成了ERP軟件業(yè)務(wù)管理理念,功能涉及供應(yīng)鏈、成本、制造、CRM、HR等眾多業(yè)務(wù)領(lǐng)域的管理,全面涵蓋了企業(yè)關(guān)注ERP管理系統(tǒng)的核心領(lǐng)域,是眾多中小企業(yè)信息化建設(shè)首選的ERP管理軟件信賴品牌。
轉(zhuǎn)載請注明出處:拓步ERP資訊網(wǎng)http://www.ezxoed.cn/
本文標(biāo)題:基于PDM的異地數(shù)據(jù)庫同步系統(tǒng)的設(shè)計與實現(xiàn)
本文網(wǎng)址:http://www.ezxoed.cn/html/solutions/1401937165.html