基于通用数据库访问引擎的数据变化捕获方法_第1页
基于通用数据库访问引擎的数据变化捕获方法_第2页
基于通用数据库访问引擎的数据变化捕获方法_第3页
基于通用数据库访问引擎的数据变化捕获方法_第4页
基于通用数据库访问引擎的数据变化捕获方法_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于通用数据库访问引擎的数据变化捕获方法      2,3,4.总参第六十一研究所;北京; 100039;) 摘要:本文给出了能够适应三层结构的,跨平台通用数据库访问引擎的设计方案,能够对异构数据库进行数据变化捕获。关键词: 通用数据库访问引擎;跨平台;数据变化捕获  1引言目前,数据集成已经成为企业获取信息的重要方法之一。它包括数据抽取、数据转换、数据加载三个过程。在数据抽取过程中采用基于发布/订阅机制的消息代理模式,不仅实现了数据的可靠异步传输,而且降低了源数据端和目的数据端的耦合度,增强集成的灵活性1。数据变化捕获是数

2、据抽取过程的重要阶段。但是,在文1中并未对这个数据抽取的重要过程进行论述,本文在第二节常用数据变化捕获方式中介绍了现有的成熟数据变化捕获的技术(日志方法、触发器方法)。本文在第三节中,针对常用的数据捕获方式只能应用于特定的数据库,无法针对异构的数据库执行数据变化捕获的缺陷,提出一种基于数据库通用访问引擎的数据变化捕获方式。这种方式屏蔽了多个数据源之间的物理分布的差异,屏蔽了多个数据源的数据库种类差异,能够实现分布、异构数据库的数据变化捕获。2常用数据变化捕获方式2.1被动的数据变化捕获方式被动数据变化捕获方式,指的是通过外部监控应用程序对数据库日志扫描,当收到捕获数据命令或者到达特定时间间隔,

3、数据库的数据变化被外部应用程序所捕获。目前,主要采用的是日志分析的方法。被动数据库捕获方式的核心是对数据库日志扫描。数据库为了保持数据的一致性,数据库遵循先写日志规则:(1)在事务提交日志<T  commit>记录输出到硬盘前,与事务T有关的所有日志记录必须已经输出到硬盘中。(2)在内存中的数据块输出到硬盘前,所有与该数据块中数据有关的日志记录必须已经输出到硬盘中。2因此,日志记录了数据库的所有的操作。通过对日志的扫描,分析日志记录信息,能够得到数据的变化。在Oracle数据库中,日志记录的信息包括:数据库的更改历史、更改类型(INSERT、UPDATE、DELETE等)

4、、更改对应的系统改变号(SCN)、以及执行这些操作的用户信息等,在分析日志时,将重构等价的SQL语句和UNDO语句(分别记录在V$LOGMNR_CONTENTS视图的SQL_REDO和SQL_UNDO中)日志信息的真正目的是为数据的备份与恢复服务的,利用归档日志文件的信息可以进行数据的增量备份,如果我们将数据库的整体数据信息和增量数据分别提取出来,将整体数据信息以数据段的形式或其它形式向各个订阅者进行分发,将增量数据信息通过消息代理向订阅者进行分发,正好可以实现数据的集成。日志解析,捕获数据变化过程如图1。图中的SCN号是Oracle在日志文件中记录的系统改变号(System Changed

5、Number),系统对每一次改变都设置一个编号。 日志分析方法存在以下优点:一是对具体的数据库对象没有任何改动。二是从日志文件中获取变化数据,对数据库及其数据访问的影响很小。三是应用范围广泛,对于大多数数据库均可采用。由于数据库日志先写原则是所有数据库都必须遵循的原则,不仅仅限于Oracle数据库,还可以用在Access、SQL Server、DB2等数据库。图1 Oracle日志扫描,捕获数据变化过程 日志分析方法存在以下缺点:一是实现复杂。由于从数据库视图中得到的信息是变化数据行的SQL语句,不管是采用对SQL语句进行解析,还是采用通过重新检索获取变化数据的方法,在包含横切、纵切

6、的视图数据处理上都会比较复杂。在多个来源数据写入同一个目的表时,主键的处理上也比较复杂。二是实时性不强。日志分析方法通过分析归档日志捕获到的数据变化与数据的实际变化存在时间上的延迟。三是日志文件格式不统一,且大多数数据库日志文件格式未公开。目前只有少数数据库厂商的合作伙伴能够得到日志文件格式,多数开发者只能利用数据库厂商提供的程序包来分析日志(如Oracle的LogMiner),限制了捕获的效率。2.2主动的数据库捕获方式主动的数据库捕获方式大多采用对具体数据库对象建立触发器或类似触发器的机制,在数据改变的同时主动地、实时地向外界反映数据的变化。目前,主要的实现手段是触发器。触发器是编译好的、

7、存储在数据库中的过程。编写触发器使用的语言是PL/SQL。编写和编译触发器的方式和编写存储过程是一样的3。使用触发器方式,主要工作在初始化阶段,也就是创建捕获触发器的过程。触发器建立后,捕获工作是由数据库自动调用这些触发器来完成的。由于每个表上的触发器要完成的功能一致,所以可以通过使用统一模板的方式创建。在数据库相应数据表上针对插入、删除和修改操作建立三种不同的触发器插入触发器、修改触发器和删除触发器。每种触发器完成的功能如下:(1)插入触发器能够判断新记录是否满足记录过滤条件,满足条件的抽取指定字段的数据。(2)修改触发器能够判断新旧记录是否满足记录过滤条件。新旧都满足,则记录修改前后指定字

8、段的数据;旧记录不满足而新记录满足,则只记录修改后指定字段的数据;旧记录满足而新记录不满足,记录删除标志。(3)删除触发器能够判断旧记录是否满足记录过滤条件,满足的记录删除标志,不满足的不记录。触发器方法具有以下优点:可以在第一时间捕获数据的变化,实时性强。利用触发器的性质保证数据的一致性和完整性。存在的主要缺点:一是对建立在该数据表上的应用程序影响很大。数据的每一次修改除在数据库日志中记录之外,还会额外地执行捕获过程,建立了多个触发器对数据库效率会有影响。二是触发器的维护比较复杂。由于数据的订阅是一个动态的过程,而触发器是一组静态的PL/SQL过程,所以在数据被订阅、或数据结构修改时,需要创

9、建或修改原有的PL/SQL过程。三是引起触发器之间的冲突,同名的历史数据库触发器将会被覆盖,其结果直接影响到其它应用程序的执行。四是应用范围不广泛。触发器并不是所有的数据库系统都支持,只能限于一些采用触发机制的数据库系统中。上述两种数据捕获方式跨平台能力弱,与数据库类型捆绑密切。如果某大企业遗留的信息系统是由多种数据库构建的,那么在这种情况下就必须实现多个数据捕获的模块,重复性的劳动较多。3基于通用数据库访问引擎的数据捕获方式通用数据库访问引擎是建立在数据库层和应用层之间的中间件,它能够支持多数据库厂商,不同版本之间的移植,屏蔽底层数据库管理系统之间的差异。利用通用数据库访问引擎,不仅可以实现

10、数据库访问的跨平台与跨开发语言,也可以在不影响数据库的物理结构和逻辑结构前提下捕获到即将入库的数据变化。跨平台与跨开发语言的通用访问引擎GDAE在其功能中重点加入了数据捕获的能力,实现了比较完善的引擎作用。3.1体系结构通用数据库访问引擎GDAE (General Database Access Engine)作为三层的体系结构,由通用数据库访问对象GDAO(General Database Access Object)和通用数据库访问接口GDAI(General Database Access Interface)以及中间业务层三层组成4。其中GDAO位于GDAE的底层,它完全封装了对数据库

11、的访问,用于实际完成对数据库的所有访问操作。图2 通用数据库访问引擎的体系结构GDAO设计的基本思想是对于几种常用的Oracle、SQL Server、MY SQL、DM等特定数据库厂商、特定版本的数据库,采用最直接的数据库调用级接口实现的通用数据库访问对象来实现数据库访问(如GDAO_ORL、GDAO_SQLS分别是针对Oracle、SQL Server实现的数据库访问对象)。GDAI位于最上层,它是一个简洁的、统一的数据库访问的通用调用接口。该接口使得后台数据库的差异、数据库连接方式等细节对于上层开发人员是完全透明的。这样GDAI既保证了数据库访问效率,又兼顾了通用性。中间业务层主要包括:

12、捕获数据组件、发送数据组件、连接池组件、网络连接组件等。网络连接组件负责将用户的数据库访问请求安全、准确地传递给数据库服务器,并将返回的结果安全、准确地传递给用户。它由客户端和服务端组成,通过TCP/IP协议连接,实现网络通信。连接池组件是数据访问引擎的一个必须组件,它的存在使得访问数据库的效率大大地提高了。提供一套高效的连接分配、使用策略(其中策略是可以让应用系统管理员配置的,比如允许维护的最大连接数和活动的最佳连接数等),最终目标是实现连接的高效、安全的复用。捕获数据组件是完成数据捕获的主要模块,实现数据库的数据捕获。3.2工作流程客户应用程序,调用访问引擎接口对引擎服务端进行远程调用,引

13、擎服务器端通过网络连接组件服务器端,接收客户端提供的访问请求,根据连接池组件的情况,调用通用数据库访问对象,执行对数据库的操作。在数据库操作得到反馈之前,数据捕获组件可以以不同的策略保存更新的数据。一是将更新的数据以文件形式保存在硬盘中。二是将更新数据直接保存在内存中,不将数据写入硬盘。采用不同的策略是根据外部应用不同需求,当外部应用需要得到稳定的一致的更新数据,就将数据以文件形式保存在硬盘中。当外部应用需要得到实时的更新数据,数据就不需要保存在硬盘中。当数据库操作执行完毕(即事务提交)之后,数据捕获组件根据得到的反馈信息执行操作。如果数据库事务提交成功,更新的数据会根据预先配置的条件,当外部

14、应用需要得到实时的信息,更新数据立即发送到目的端。当外部应用需要得到稳定的一致的更新数据,可以向外部应用发送消息,提示外部应用访问更新数据文件。如果事务提交失败,数据捕获组件可以删除更新数据文件中的最新数据,以保持数据的一致性。并且,不发送内存中的数据。访问引擎运行期间可能存在的几种数据不一致的情况。一是数据库已经成功地提交,数据捕获组件已将更新数据写入硬盘,但反馈消息还未被数据捕获组件接收到。此时主机发生系统故障,内存中的数据全部丢失。这种情况下,数据捕获组件,通过读取更新数据文件,将文件中最新纪录的数据加载到内存中,将数据发送。二是数据库未能成功提交,数据捕获组件已将更新数据写入硬盘,主机

15、发生故障。这时,数据捕获组件将更新数据文件中的最新的数据删除。以保证更新数据文件的数据与数据库中的数据的一致性。基于通用数据引擎的数据捕获方式的优点:一是能够支持分布式的异构的数据库。二是不改变数据库的结构,不会对基于数据库的其他的应用产生影响。三是可以给外部应用提供不同功能接口,适应不同外部应用的需要。如果外部应用对实时性要求很强,数据捕获组件仅仅将更新数据保存在内存中。如果外部应用对数据精确性要求很强,丢失数据。数据捕获组件将更新数据以文件形式保存在硬盘中,方便外部应用调用。可能存在的缺点:一是如果访问者绕过访问引擎,将不能捕捉到数据变化。二是如果数据捕获组件执行硬盘读写数据更新记录的方式

16、保持数据一致性,可能对效率产生影响。4结束语  本文介绍了三种数据捕获方式:被动数据捕获方式、主动数据捕获方式、基于通用数据库引擎捕获方式。对于具有同种类型的源数据源,基于联机日志或者快照日志是动态捕获数据库变化的最为理想的方式,一旦成功解析联机日志文件,那么我们可以在对数据库影响最小的情况下,获得最高的数据捕获效率。而快照日志是退而求其次的方法。不是每个数据库都支持这种方式,但就Oracle 来说,这种方法也是比较可取的一种方式,在Oracle 9I中也已经提供相应的存储过程对其进行支持。但日志格式的解析式问题实现的难点。触发器方式实时性较强,对于特定数据库实现简单。但是,改变了数据库的结构,对数据库的效率由影响,并且并不是每个数据库都支持触发器的方式。通用访问引擎方式能够很好的解决数据源分布于不同分布、不同种类的问题,不改变实际的数据库的物理和逻辑上的结构。但是最大问题是不能保证所有对数据库的访问都会经过通用数据库访问引擎,如在oracle中利用提供的工具直接执行数据更新操作,将无法捕获到数据变化。本文对三种数据变化捕获方式进行了比较,分析了其优缺点。由于影响数据库效率的因素很多,本文没有对三种捕获方式

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论