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