基于Oracle CDC技术实现的变更数据抽取方法 【技术领域】
本发明涉及一种基于Oracle CDC技术实现的变更数据抽取方法。
背景技术
在构建数据仓库的ETL过程中,变更数据的抽取是一个非常关键的环节.对变更数据抽取的解决方案,一般需要达到以下两点要求:
1.准确性,能够将业务表的变更数据按一定的频率准确的取到数据仓库中。
2.性能,不能对业务数据库、业务表造成太大的压力,不能影响现有业务系统的性能。
目前实现数据同步最常用的三种方式:
1.时间戳同步
使用业务表中某一字段做为判断新旧数据的依据,该字段可以是时间类型,也可以是int型。使用该种方式存在以下问题:
无法捕获对时间戳以前数据的delete和update操作,在数据准确性上受到了一定的限制,而实际业务中delete和update的操作还比较普遍;
要求业务系统的表必须有一个可以标识新旧数据的列,而某些表没有设置这种列。
2.全表扫描
使用数据仓库中的当前表与业务系统表进行对比,取得变化了的数据,使用全表扫描存在以下问题:
需要将业务系统中表全部转输,造成很高的网络负载;
需要对两版本的表进行全表扫描,性能代价非常高;
无法反映数据的历史状态,如无法捕捉库存的历史变化记录。
3.触发器
在要抽取的表上建立需要的触发器,一般要建立插入、修改、删除三个触发器,每当源表中的数据发生变化,就被相应的触发器将变化的数据写入一个临时表,抽取线程从临时表中抽取数据,临时表中抽取过的数据被标记或删除。触发器方式的优点是数据抽取的性能较高,缺点是要求业务表建立触发器,对业务系统有一定的影响。
【发明内容】
本发明的目的就是针对上述的不足,提供了一种基于Oracle CDC技术实现的变更数据抽取方法。
本发明提供的基于Oracle CDC技术实现的变更数据抽取方法,包括如下步骤:
1)解析xml文件信息,获取配置信息;这些信息包括原表,快照表,目的表,字段等。用于后续程序中建表和发送目标等。
2)利用配置信息中username,tableDescriptions信息,使用oracle中的dbms_cdc_publish来创建一个变更表,用于捕获源表变更记录;可以使用标准SQL语句来创建这一个存储过程,通过这创建变更表,用来监控源表的变更,把源表中得每一次变更记录到变更表中。
3)利用dbms_cdc_publish创建订阅用户,且激活订阅用户;可以使用标准SQL语句来创建这一个存储过程,订阅用户是用来订阅变更变化的,当变更表中有数据变更信息后,订阅用户就能收到这个变更信息。
4)通过dbms_cdc_publish创建一个订阅窗口和订阅视图,以视图的形式来获取一个时间段的变更数据;可以使用标准SQL语句来创建这一个存储过程,订阅窗口和视图表示这一个时间段内订阅的变更表信息有哪些变化,并把这些变化数据通过程序提取出来。
5)当获取到变更数据以后,将变更数据转化成一个DataObject对象;获取数据库数据信息,将每一行数据进行解析,并打包放入DataObject对象中。进入等待发送队列中。
6)将Do对象发送到目标服务,当目标服务处理完成返回结果后进入第7)步。
7)数据传送成功后删除订阅视图与窗口,表示这一次变更数据抽取过程完毕;可以使用标准SQL语句来创建这一个存储过程。删除这一次订阅视图与窗口后。表示这一个时间段内的同步完成。
实现上述的方法的装置,包括:
一解析单元,用于解析xml配置文件信息,获取配置信息;
一变更表创建单元,用于利用配置信息中数据库连接权限以及数据库表单描述信息,使用oracle中的dbms_cdc_publish来创建一个变更表;
一订阅用户创建单元,用于使用dbms_cdc_publish创建订阅用户,并且激活订阅;
一订阅视图创建单元,用于创建一个订阅窗口和订阅视图,以视图的形式来获取一个时间段的变更数据;
一数据获取单元,用于将变更数据转化成一个DataObject对象;
一传送与判断单元,用于将Do对象发送到目标服务;
一删除订阅单元,用于在数据传送成功后删除订阅视图与窗口。
本发明具有如下优点:
1.无需编程,现有编程人员可以将时间花费在更有价值的项目上。公司可以利用遗留系统并跨所有支持的平台整合数据,无需对现有环境进行更改。可以轻松地适应计算环境中未来的变更,以使您的投资能适应未来。
2.高性能通信,支持高效的数据传输,包括大对象二进制(LOB)文件,如多媒体音频和视频数据。
3.确保信息直接在源和目标系统之间最有效、最快速的路径中流动。
【附图说明】
图1是本发明实施例的总流程图;
图2是本发明实施例的循环处理数据子流程图。
【具体实施方式】
一种基于Oracle CDC技术实现的变更数据抽取方法,具体来说是这样的:
CDCSource作为现有技术直接面对用户,提供一个完整的UI页面,按照提示配置属性,打包后成功部署到服务器上。在UI页面中,选择CDCSource构件,可以通过界面连接属性,直接添加配置数据库地址,用户名,密码,源表名,快照表名,目的表名,以及所要监控变更的字段列表等信息,这是容易实现的。
如图1所示,本方法开始于步骤101,解析xbean.xml文件信息,获取配置信息;这些信息包括原表,快照表,目地表,字段等。用于后续程序中建表和发送目标等。
然后进入步骤102,获取用户handle,subhandle是ORACLE中订阅ID,当一个源表被发布后,订阅用户创建订阅时生成一个subhandle,用来记录订阅信息。
再进入步骤103,返回Number类型数据,如果返回失败,则返回步骤102;如果成功,则进入下一步骤。
步骤104,利用dbms_cdc_publish创建订阅用户,然后进入步骤105激活订阅用户;使用标准SQL语句来创建这一个存储过程。订阅用户是用来订阅变更变化的。当变更表中有数据变更信息后,订阅用户就能收到这个变更信息。
然后进入步骤106,循环处理数据子流程,流程结束。
如图2所示,循环处理子流程是这样的:
首先开始于步骤201,创建订阅用户。
然后进入步骤202通过dbms_cdc_publish创建一个订阅视图,以视图的形式来获取一个时间段的变更数据;使用标准SQL语句来创建这一个存储过程。订阅窗口和视图表示这一个时间段内订阅的变更表信息有哪些变化,并把这些变化数据通过程序提取出来。
再进入步骤203,获取到变更数据,将变更数据转化成一个DataObject对象;获取数据库数据信息,将每一行数据进行解析,并打包放入DataObject对象中。进入等待发送队列中。
然后进入步骤204,将Do对象发送到目标服务。
进入步骤205,判断目标服务返回值,如果失败,进入步骤2051处理异常,然后返回步骤204;如果成功,进入下一步。
最后进入步骤206和207,数据传送成功后删除订阅视图与窗口,表示这一次变更数据抽取过程完毕。使用标准SQL语句来创建这一个存储过程。删除这一次订阅视图与窗口后。表示这一个时间段内的同步完成。
然后返回步骤201,开始下一循环。