现在的位置: 首页 > 数据库 > 正文

数据库的复制技术在企业数据共享的深层应用

2017年01月11日 数据库 ⁄ 共 6542字 ⁄ 字号 评论关闭
程序员最喜欢的衬衫
 

  今天,越来越多的企业意识到:信息技术是企业发展、技术升级的敲门砖,怎样管理和应用信息将决定企业的成败。然而,更多的企业在长期的信息化工作中积累了大量数据,由于实施数据管理系统的阶段性、技术性以及其它经济和人为因素的影响,导致这些系统采用的技术以及数据库各不相同,因此产生了数据重复录入、重复建设相同功能、数据利用率不高等弊端。例如:人力资源管理系统中设置了人员管理模块,存储人员的详细信息,但是在档案管理系统、财务管理系统、办公自动化管理系统中同样需要人员信息,因此,在所有系统中都要设置人员管理功能,录入人员信息,这种情况不仅造成了功能和数据的冗余,数据一致性也无法保证。

  随着生存环境的不断变化,企业在把握机遇的同时也面临着许多挑战。网络的发展使企业逐渐从一个孤立节点发展成为不断与网络交换信息和进行商务事务的实体,现在的企业比以往任何时候都需要将各个数据管理系统的数据进行共享,因此,数据的发布和交换逐渐成为亟待解决的问题。

  一、数据库的复制技术

   数据库的复制是在数据库之间对数据和数据库对象进行复制和分发并进行同步以确保其一致性的一组技术。在分布式数据库(Microsoft SQL Server 2000)环境下,实现SqlServer数据库之间的数据共享。
  1、 名词解释
  发布(publication)
  是一个数据库中的一个或多个项目的集合。
  发布服务器(Publisher)
  使数据可复制到其它服务器、检测已更改数据和维护有关站点上所有发布的信息的服务器。
  分发(distribute)
  从发布服务器将事务或数据的快照移动到订阅服务器,在订阅服务器上将它们应用于订阅数据库中的目的表。
  分发服务器(Distributor)
  作为分发数据库宿主并存储历史数据和/或事务以及元数据的服务器。
  订阅(subscribe)
  向发布服务器请求数据。
  订阅服务器(Subscriber)
  接收已发布数据的复本的服务器。
  初始快照 (initial snapshot)
  包括复制所需的架构和数据、约束、扩展属性、索引、触发器以及系统表的文件。当执行复制时将初始快照传输到订阅服务器。
  同步 (synchronization)
  复制中在发布服务器上和订阅服务器上维护相同的架构和数据的进程。

  二、复制的类型

  SQL Server提供3种复制类型:快照复制、事务复制和合并复制。

  快照复制
  快照复制是完全按照数据和数据库对象出现时的状态对其进行复制和分发的过程。快照复制不要求对更改进行连续的监视,因为对发布数据所做的更改不会增量地传播到订阅服务器。订阅服务器用数据集的完全刷新而不是单独的事务来进行更新。因为快照复制一次复制整个数据集,所以将数据修改传播到订阅服务器的时间要更长一些。复制快照发布的频率通常低于其它发布类型。
快照复制提供的选项允许筛选已发布的数据,允许订阅服务器修改复制的数据并将更改传播到发布服务器,然后传播到其它订阅服务器,并允许在发布时转换数据。

  快照复制应用于下列情况:
  · 数据主要是静态数据,不经常更改。
  · 一个时期内允许有已过时的数据复本。
  · 复制小批量数据。
  · 站点经常脱接,并且可接受高滞后时间(数据在一个站点上更新到其在另一个站点上更新之间的时间量)。

  事务复制
  事务复制将数据的初始快照传播到订阅服务器,然后,当发布服务器上发生数据修改时,捕获个别的事务并传播到订阅服务器。

  SQL Server 2000 监视 INSERT、UPDATE 和 DELETE 语句,以及对存储过程执行和索引视图的更改(注意SQL Server7不提供)。SQL Server 2000 存储影响已复制的对象的事务,然后连续或按一定的调度间隔将这些更改传播到订阅服务器。保留事务边界。例如,如果在事务中更新 100 行,则带有所有100个数据修改的整个事务将被接受和传播到订阅服务器。当所有改动传播完毕后,全部订阅服务器的值将与发布服务器的值相同。

  事务复制提供的选项允许筛选已发布数据、允许订阅服务器中的用户修改复制的数据并将这些更改传播到发布服务器或其它订阅服务器,并允许在发布时转换数据。

  事务复制通常在下列情况下使用:
  · 希望将数据修改传播到订阅服务器,通常在更新发生的几秒内进行。
  · 订阅服务器通常连接到发布服务器。
  · 应用程序不能承受订阅服务器接收更改时的高延迟,因此不适宜远程的数据订阅。

  合并复制
  合并复制使订阅服务器自主工作,并且过一段时间后将多个订阅服务器的数据修改合并为一个统一的结果。首先在订阅服务器上应用初始快照,然后 SQL Server 2000在发布服务器和订阅服务器上跟踪对已发布数据的更改。数据在调度时间或请求时在服务器之间进行同步。由于在多个服务器上独立地进行更新(不提交协议),发布服务器或多个订阅服务器可能更新同一数据。于是,合并更新时就可能出现冲突。

  合并复制包含默认或自定义冲突解决选项,可在配置合并复制时加以定义。当冲突发生时,合并代理程序唤醒调用冲突解决程序,决定接受和向其它站点传播哪些数据。

  合并复制可用的选项包括:水平和垂直筛选已发布的数据,包含联接筛选和动态筛选,使用可选同步方,优化同步以改善合并性能,验证已复制的数据以确保同步,以及使用可连接的订阅数据库。

  合并复制适用于下列情况:
  · 多个订阅服务器需要在不同时刻更新数据并将这些更改传播到发布服务器和其它订阅服务器。
  · 订阅服务器需要接收数据、脱机更改数据、然后将更改同步到发布服务器和其它订阅服务器。

   2、复制包括以下几个过程:
  1)、配置复制
  配置发布服务器和分发服务器;根据数据、数据的子集和/或数据库对象创建发布;决定需要使用的复制类型、订阅服务器要订阅发布的数据库类型、要发布的数据和数据库对象、快照文件存储的位置、初始化快照进行同步的时间以及发布要使用的选项。
  创建发布后,可以在发布服务器或订阅服务器上创建强制和/或请求订阅并配置复制调度和选项。

   2)、生成和应用初始快照
  快照代理程序准备包含架构、数据和数据库对象的快照文件,将文件存储在快照文件夹中,并在分发服务器上的分发数据库中记录同步作业。分发代理程序将快照从分发数据库移动到订阅服务器上的目的表,并应用复制所需的脚本、架构和数据。

   3)、同步和传播数据更改
  选择的复制类型和选项决定着数据同步的方式和将数据更改传播到发布服务器和其它订阅服务器的方式。同步处理数据是指在初始快照已经应用于订阅服务器之后,数据在发布服务器和订阅服务器之间传播的过程。

   对于快照复制,同步处理数据意味着在订阅服务器上重新应用快照,以便订阅数据库上的架构和数据与发布数据库保持一致。对于事务复制,对数据进行同步处理意味着数据插入、更新、删除和其它修改在发布服务器和订阅服务器之间分发。对于合并复制,同步处理意味着合并在多个站点进行的数据修改、检测和解决冲突(如果有的话)并将数据最终汇聚为所有站点上相同的数据值。

  三、复制技术在我公司的实施应用

  1、 我公司在数据集成中遇到的问题
  我公司的信息化工作有将近20年的历史,管理系统所运用的技术也在不断升级,近几年引进及自身开发的管理系统基本上都应用了微软公司的SqlServer数据库。随着管理系统的完善,信息孤岛问题日趋严重,数据重复录入,各部门专人维护数据、管理数据的传递,不仅造成重复劳动,数据的准确性和及时性也很难保证。为改变这种局面,公司提出了建设集成系统的目标,解决信息孤岛问题,利用技术手段使各管理系统的数据高效集成,最终建立起企业的数字化模型,为经营决策提供基础数据保证。
  2、 选择事务复制
  由于我公司目前的应用系统基本上均采用微软公司的SqlServer作为后台数据库,每个管理系统后台均运行一个独立的数据库,因此在寻找数据共享解决方案时,首先是从数据库本身提供的技术入手,查阅SqlServer技术资料后,定位到数据复制这一功能,通过发布及订阅操作,数据可在分布式的不同的数据库之间传递,正好满足我们做数据共享的要求。
  实施数据复制技术,首先解决的问题是人员基本信息在各管理系统中的共享。我公司人事管理系统由人力资源部进行日常管理,人力资源部定期(每月一次)在公司局域网网站上发布在职员工的基本信息,供大家查阅、复制使用,对新增人员则必须手持人力资源部的表格到各个管理系统的管理员处进行登记,才可被授权访问使用各系统提供的功能,如:档案查询、网站查询、知识获取、教育培训等。离职和退休员工也必须手持人力资源部的表格到各个管理系统的管理员处进行系统销号。而对于职工部门变更、职务变迁,则需要各系统管理员与局域网公布的人员信息进行核对,再做授权变更。
  采用数据复制技术后,可实现:人事管理系统人员信息的实时更新和发布,各管理系统订阅到更新的数据后,根据业务逻辑和本系统的数据结构进行数据处理,更新本系统的人员信息,进行授权变更。
  由于我公司的管理系统较多,为了方便共享数据的扩充,建立中间数据库,专门用于共享数据的存储,如:人员的基本信息、项目的基本信息等,便于系统之间交换和传递。发布数据库发布数据表,中间库进行订阅,然后中间库再将数据表发布到各个管理系统。
  选择事务复制方式。通过事务复制,首先将人事数据库的人员表以快照的方式发布到中间数据库,中间数据库同样以快照的方式发布到各个管理系统。然后,当人力资源部维护人员信息后,系统捕获人员信息的变化,传播到中间库,中间库依次传播到各个管理系统。这样的连续传播也只是几秒钟,大大提高了信息的及时性(原来是1个月),而我公司局域网的稳定运行,也保证了这一传播的稳定性。
  发布过程的数据流如下图:
  

  3、 数据复制的具体配置及应用
  1)、配置前的准备工作
   设置快照文件的存储位置
  快照文件包含数据库表的结构和所有数据。在目标数据库(中间库)订阅源数据库(人事数据库)的数据信息(人员表和部门表)时,通过启动代理程序的操作,发布服务器将人员表和部门表的表结构和数据生成快照文件(每张表生成4个文件:*.bcp、*idx、*dri和调度应用程序),传递至设置的存储位置,订阅服务器从该位置取得信息,在目标数据库中生成表结构和数据,完成初始化工作。快照文件只是瞬间存在,初始完成后,文件自动删除。

   确定发布的数据表
  本例将发布人员基本信息表(A02)和部门信息表(DepartCode02),要求发布的数据表均应有主键字段。
2)、配置发布服务器
  本例的发布、订阅服务器为baisl。人事数据库为:A-rs,中间数据库为:A-datatrans。
在SQL Server控制台,选择“工具”菜单的“复制”操作,配置发布、订阅服务器和分发,系统要求选择分发服务器(缺省为baisl),设定快照文件夹的位置

  快照文件夹可使用缺省的位置(上图所示),也可另行设定(在配置前准备的快照文件位置)。定义配置,包括指定分发数据库、分发数据库文件的存放位置、分发数据库日志文件的存放位置,可使用缺省的设置(分发数据库为distribution):

  完成发布服务器配置。

  成功配置发布服务器后,新增加distribution数据库,并在控制台根目录窗口增加“复制监视器”。

3)、创建和管理发布
在SQL Server控制台,选择“工具”菜单的“复制”操作,创建和管理发布。

创建发布,选择发布类型“事务发布”。

指定订阅服务器的类型:可以是SQL Server的数据库,也可以是Oracle等异构数据库。
在下列操作中指定待发布的数据库对象,在本例中是A02和DEPTCODE02表(两个表均有主键)。

输入发布的名称及描述,进行筛选表列

设置调度,根据业务需求制订数据同步发生的频率计划。

4)、配置订阅

4、编写Trigger程序,在订阅数据库中实现发布数据表和业务数据表之间的数据互动
在订阅数据库成功订阅到发布的数据表后,编写Trigger程序处理事务发布传递的数据,插入相应的业务数据表中。Trigger程序一般分三类情况编写:记录的增加、修改、删除,但具体情况仍需和业务程序的处理紧密相关。人事管理软件在:人员增加、人员信息修改、退休、离职、部门间调动等多种情况下的程序处理,发现这些操作对应的数据库操作均为Update,通过对标记字段的处理,正确编写UpdateTrriger,实现了A-datatrans.A02表和A-datatrans.sysperson表之间的数据传递,原程序如下:
CREATE trigger triggerUpdate on A02 for Update
As
save transaction MyName
declare @name char(20),@yh char(16),@departno char(20),@deltag int
set @yh = (select A0190 from inserted)
set @name=(select A0101  from inserted)
set @departno = (select A01105 from inserted)
---------------------人事库做删除操作---------------------------------------------------------
if @deltag =1
begin
if (SELECT COUNT(*)  AS Expr1 FROM sysperson  WHERE (c_id =@yh) )>0
begin
delete from sysperson where c_id=@yh
end
end
-------------------增加人员的情况----------------------------------------------------------------
if  ( (SELECT COUNT(*)  AS Expr1 FROM sysperson  WHERE (c_id =@yh) )=0 ) and (@deltag=0)
begin
insert into sysperson  (c_id,c_password,c_name,c_department)
values (@yh,@yh,@name,@departno)
end
------------修改人员信息的情况------------------------------------------------------------------
if  ( (SELECT COUNT(*) AS Expr1 FROM sysperson  WHERE (c_id =@yh))>0 ) and (@deltag=0)
begin
update sysperson set c_department =@departno, c_zw=@gwname where c_id = @yh
end
程序说明:@deltag=1人员删除;@deltag=0 人员添加和信息修改

5、配置过程中遇到的问题

1)快照文件夹的授权
若用户需要指定另外的快照文件存储位置,发布服务器的系统用户需能有文件夹的写操作权;订阅服务器的系统用户需能有文件夹的读操作权。笔者曾在两个域森林服务器(分别为发布服务器和订阅服务器,均使用Windows 2000 Advance Server)之间做发布和订阅,指定非缺省的快照文件存储位置,未成功。Windows 2003 Server 系统提供了跨森林的域信任和资源的管理,因此,若在多森林的环境中,系统升级到2003 Server,可以解决快照文件的顺利传递。
2)Sql Server2000版本可发布表和视图对象,Sql Server 7只能够发布表对象
3)设置中间库,实现企业内部各管理系统之间数据的传递和互通

四、结束语
复制技术的配置过程简单,轻松实现各系统之间的数据共享,应是企业数据集成的首选方案。但是此技术基于数据库的基本操作,如果在复杂业务逻辑操作多表的情况下,此技术的实现将变得很复杂,在这种情况下,仍需编写接口程序或者借助流程工具,实施系统之间数据的共享和传递。

 

抱歉!评论已关闭.