免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1294 | 回复: 0

异构数据库复制技术的研究与实现(上) [复制链接]

论坛徽章:
0
发表于 2005-09-28 17:18 |显示全部楼层

异构数据库复制技术的研究与实现(上)
1 引言网络技术的飞速发展和广泛应用,特别是因特网的普及,大大方便了企业的跨地域发展。同时,为了适应不断增长的商业竞争环境,许多企业通过不断重组和分散经营来提高效率,形成了分散、异构的环境特点。同时这些组织在地域上虽然分散,但在管理上相对集中,往往既要有各部门的局部控制和分散管理,也要有整个组织的全局控制和高层次的协同管理。这种协同管理要求各部门之间的信息既能灵活交流和共享,又能统一管理和使用。
当前,分布式数据库技术已经成熟,并且因计算机成本的下降以及通信费用的降低而得到了广泛的应用。然而,分布式数据库系统既要提供局部自治又要实现全局控制,带来了很大的挑战性。为此,引入数据库复制机制,数据库复制依赖于分布式数据库技术但又可以提供分布式数据库所不具备的功能,特别是由于在存取数据时有可选的数据副本,因此可以改进系统的性能和保护应用的可用性。通过使用数据库的复制技术可以实现集中和自治相结合的控制机制,并可大大提高整个分布式数据库系统的可靠性和响应速度。
现有的异构数据库复制方案优势突出,比如在运行性能和整体性方面都有着明显的优势,而且产商大多提供了一些辅助工具可以协助用户更好地完成复制任务等;但同时问题也存在:数据库产商提供的复制方案依赖于产商自己的DBMS核心关系紧密的实现技术,不一定适用于其它DBMS,也就是说复制方案不是完全异构的。
为解决完全异构问题,本文提出一种新的复制技术:“基于SQL重现法”复制技术,“基于SQL重现法”复制技术的核心思想就是为源数据库中的复制对象(源表或视图)创建变更轨迹表,当源表发生变化时,变更轨迹表中记录了变更情况,再通过事后从变更轨迹表中获取SQL语句,将源表中的数据复制到目标表中。这种方法可以获得复制对象的净变化,运行和传输效率很高,而且易于管理,弥补了解决复制冲突的不足。这种方法适合于除同步复制之外的各种复制形式。
本文将从工作原理、设计思维、实施过程以及技术特点等几个方面介绍“基于SQL重现法”复制技术。
数据库复制就是通过将源数据库中指定的数据复制到目标数据库中,以保持源数据库与目标数据库中指定数据的同步。它应该由哪些部分组成,关于这一点目前还没有很统一的看法。
本文这样描述数据库复制的流程:在源数据库获得复制对象的变化情况,然后把它们从源数据库传送到目标数据库,并修改那里的副本。
根据以上描述本文把整个复制流程分为两个功能相对独立的处理步骤:变化捕获(Change Capture)与数据分发(Data Distribute),把它们称为组成数据库复制的两个主要环节。
本文后面的内容都将围绕这两个环节进行阐述。
2 工作原理(1)变化捕获
变化捕获是捕获源表的变化序列的过程。“基于SQL重现法”数据复制技术捕获变化的核心思想是为多个相关源表(极端的情况可能是一张源表或整个数据库的所有表,在这里称为一个“源集”)创建一个变更轨迹表,其中包含发生变更的序列号、变更时间以及还原后的SQL语句等信息,当源表发生变化时,就立刻在变更轨迹表中记录下源表的变化情况,此时变更轨迹表相当于基于日志法中的“日志”,变更时间相当于基于时间戳法中的“时间戳”,但是由于这个过程不是由数据库引擎本身实现的,因而需要依靠触发器来实现。也就是说,需要为每个源表建立触发器,当源表发生修改、插入和删除操作时,触发器被启动,通过调用存储过程,将源表发生的操作还原为SQL语句,向该源表对应的变更轨迹表中插入变更时间和还原后的SQL语句,工作原理如下图所示。

图1 “基于SQL重现的数据复制”变化捕获工作原理

(2)数据分发
数据分发是指将源表的变化信息实施到相应的目标表中的过程。针对“基于SQL重现法”复制技术捕获变化的方法,数据分发是指根据变更轨迹表中的序号,按顺序从变更轨迹表中获取对应的SQL语句,然后通过实施程序在目标服务器上执行此SQL语句,将源表发生的变化应用于目标表,执行成功后删除变更轨迹表中对应序号的记录。数据分发工作原理如图2所示。
图2 “基于SQL重现的数据复制”数据分发工作原理
  
3 实施过程
实施过程如图3所示。包括捕捉程序与实施程序两个部分。
图3 “基于SQL重现的数据复制”实施过程

(1)捕捉程序
捕捉程序就是捕捉源数据库发生的更改的程序。
在建立复制环境之后,需要利用捕捉程序去捕捉源数据库发生的更改,且将更改临时存放于变更轨迹表中。
“基于SQL重现法”捕捉数据的机制是依靠触发器来实现。具体捕捉步骤如图4所示,当源表发生修改、插入和删除操作时,触发器被启动,调用相应的存储过程,将源表发生的操作还原为SQL语句(比如,源表为tb_Employee,它所对应的目标表为TGtb_Employee,向源表tb_Employee中插入一条记录,如insert into tb_Employee values(?,?,?,?),那么还原后的SQL语句可能为insert into TGtb_Employee values(?,?,?,?),这里用的是可能这个词,是因为目标表不一定包含源表的所有列,有可能只是其中的几列,如果只选择源表的几列数据,那么还原后的SQL语句就只包含这几列数据),向该源表对应的变更轨迹表中插入变更时间和还原后的SQL语句。

图4 捕捉过程

存储过程处理过程如图5所示。
图5 存储过程工作流程
Figure 5 Work Flow of Stored Procedure
(2)实施程序
实施程序就是定期运行,将变更轨迹表中的数据实施到目标数据库中的程序。
因为基于异步的复制本身是需要一个外界的实施过程来进行数据分发的,所以,需要一个单独的服务器,也就是“实施服务器”来做这个工作。
实施程序负责分发数据,“基于SQL重现法”数据复制技术的数据分发采用“拉式”模型,即复制过程由目标服务器启动,向源服务器请求变更数据。实施程序采用JAVA语言开发,与源数据库、目标数据库之间通过JDBC连接。捕捉程序将源表发生的更改临时存放于变更轨迹表中,到复制时间实施程序通过JDBC连接源数据库,从变更轨迹表中读出源数据库的更改,然后通过JDBC连接目标数据库,将更改实施于目标数据库。
实施程序通常运行在目标服务器上,但它也可以运行在可以连接到源和目标服务器的网络上的任一服务器上。多个实施程序实例可以运行在相同或不同的服务器上。
实施程序通过全更新或差别更新拷贝从源表拷贝数据到目标表中。
(1)在初始化过程中,实施程序进行全更新拷贝,此时,实施程序执行以下任务:
1)删除目标表中的所有行
2)从源表中读取所有行
3)拷贝这些行到目标表中
(2)在进行差别更新拷贝时,实施程序只拷贝更改的数据到目标表中。此时实施程序执行以下任务,如图6所示:
图6 实施程序工作流程
Figure 6 Work Flow of Apply Program

其中,(1)(2)(3)分别代表:
(1)    实施程序提取变更数据;
(2)    将变更数据应用于目标表;
(3)    删除对应变更轨迹表中的信息。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/8454/showart_49810.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP