现在的数据库同步系统大多数采用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.toberp.com/