异构数据库复制技术的研究与实现
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重现的数据复制”数据分发工作原理