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) 删除对应变更轨迹表中的信息。
4技术特点
“基于SQL重现法”数据复制技术具有完全异构、DBMS无关性、通用性以及可靠性等特点,下面逐一介绍。
(1)完全异构
完全异构意味着复制能够在所有数据库至少是所有与RDB(关系数据库,Relational Database)兼容的数据库之间进行。“基于SQL重现法”数据复制技术通过JDBC连接各种数据库,只要能找到合适的JDBC,就可以做到所有数据库之间的复制。所以说,“基于SQL重现法”数据复制技术是完全异构的。
(2)DBMS无关性
目前的许多复制方案,特别是数据库产商提供的数据复制方案,都依赖于与产商自己的DBMS核心关系紧密的实现技术,而“基于SQL重现法”数据复制技术采用JAVA技术开发,使用JDBC接口连接各种数据库,JAVA本身是一种跨平台的技术,JDBC作为一种标准得到了和ODBC一样的尊重,各大数据库厂商都制作了符合JDBC标准的驱动,这样利用这些接口,就不用考虑太多底层的DBMS的特性,可以透明地操作各种DBMS。比如,连接各个数据库的类Databasemetadata,使用JAVA语言编写,通过JDBC连接各种数据库,对不同类型的数据库的连接、访问、执行过程、查询等等,对于应用来说都是一样的,所以可以做到DBMS无关。所以说“基于SQL重现法”数据复制技术是与DBMS无关的。
(3)通用性
“基于SQL重现法”数据复制技术,捕获的变化是以SQL语句形式出现的,可以给任何数据库做复制。如果不用SQL语句,就必须在实施程序里写对应的数据库DML操作,而这样一来,实施程序就必须知道是哪种数据库,因为不同的数据库的DML语句不尽相同。直接存储成DML的SQL的话,Trigger可以把这种差异封装起来,这样实施程序面对的是比较一致的界面,所以实施程序本身可以移植,而Trigger本身就是不可移植的对象,由它进行封装是有好处的,可以让实施程序面对一个一致的接口,从而实施程序可以有更好的可移植性。“基于SQL重现法”数据复制技术实施程序做的事情就是从源库读取SQL语句,在目标数据库执行此SQL语句。
(4)可靠性
“基于SQL重现法”数据复制技术只复制数据库中修改的数据,因此可以明显降低网络的负荷。“基于SQL重现法”数据复制技术将变化应用于目标库的动作与删除变更轨迹表中的内容的动作包裹在一个事务里,当网络或目标数据库出现故障时,变化应用于数据库的动作不会成功,整个事务回滚,变更轨迹表中的内容不会被删除,假定在网络或目标数据库出现故障时原有数据未受到破坏,而在故障恢复时,可以手工启动复制过程提交变更轨迹表中的内容;或者当到达复制时间时,重新提交变更轨迹表的内容。这种方式使得此复制技术具有很高的可靠性。
5 原型实现
为了验证“基于SQL重现法”复制技术的可行性及技术特点,作者开发了原型系统Replicator,本节将进行详细介绍。
(1)实验环境
实验环境如下:
DBMS:IBM DB2 8.1,ORACLE9i,SYBASE11.9
OS:RedHat 7.3,Windows 2000,NT
网络:局域网(TCP/IP 100Mbps)
硬件:PC机(PentiumIV 1.7G,512M RAM,80GHD),PC机(PentiumIV 2.0G,256M RAM,80GHD),PC机(PentiumIV 1.7G,512M RAM,80GHD)
(2)实验测试
原型实现后,对数据复制功能进行了测试。
具体运行环境如(1)所描述,并尽量把其它程序和进程关闭使其占用最小资源。测试结果如表1:
其中每条记录大小100字节,涉及了各种常见数据类型(字符、整数、浮点数、时间/日期、大对象等);其中约有50%的记录发生改变。
表1 测试结果
Table 1 Test Result
记录数
时间使用(S)
内存使用(M)(取运行过程中最大的内存损耗量)
1000
58
16
5000
295
16
10000
592
16
测试结果表明,随着记录数的增长,“基于SQL重现法”数据复制技术时间复杂度呈线性增长(即O(N),N为记录数),空间复杂度(主要为内存损耗)基本上保持常量(即O(1))。
由于时间及其它客观条件的限制,Replicator还存在一些不足,需要在以后提高和完善。主要有:
(1)多样性
尽管实验环境包含了主要的异构形式,它们具有很强的代表性,但两种环境所涉及的情况毕竟有限。
(2)效率问题
在每张源表上加trigger对已有应用势必带来一定的效率问题,并给数据库管理带来了工作量,如何控制trigger的数量以及变更轨迹表控制信息的内容是提高效率、简化管理的主要考虑的方向。
(3)实时性
目前“基于SQL重现法”数据复制技术采用的是事后读取控制信息进行复制的方法,因而不能实现实时复制,这对实际应用带来了局限性。
参考文献
1 者敬著. 开放式异构数据库复制框架的研究与实现 中国期刊网 2002.4
2 王婉非,张志浩 分布式数据库系统的复制机制及应用 计算机工程与科学 2003
3 吉增瑞 分布式数据库系统一致性方法 计算机工程与科学 2002
4 林怀忠 数据复制与一致性 2002
5 葛卫民 基于ORACLE高级复制的分布式数据库系统应用研究 数据库与信息处理 2003
7 郭思媚 数据复制技术在管理信息系统中的应用 计算机辅助工程 2000.3