CN102508835B - 基于日志管理包的增量数据实时同步装置和方法 - Google Patents
基于日志管理包的增量数据实时同步装置和方法 Download PDFInfo
- Publication number
- CN102508835B CN102508835B CN201110284583.1A CN201110284583A CN102508835B CN 102508835 B CN102508835 B CN 102508835B CN 201110284583 A CN201110284583 A CN 201110284583A CN 102508835 B CN102508835 B CN 102508835B
- Authority
- CN
- China
- Prior art keywords
- data
- data source
- affairs
- source
- manipulation statement
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种基于日志管理包的实时增量数据同步装置,包括:第一同步单元,将第一数据源中的初始数据复制到第二数据源中;第二同步单元,使用第一数据源的日志管理包获取在第一数据源执行的数据操作语句,将数据操作语句应用于第二数据源,以实现第一数据源和第二数据源之间的增量数据的实时同步,其中,日志管理包包含了对第一数据源的日志进行分析所需要的存储过程,从日志中获取数据操作信息,数据操作信息包括数据操作语句的标识、数据操作语句的操作对象和数据操作语句的所属事务,日志记录了对第一数据源进行的所有操作。本发明还提供了一种基于日志管理包的增量数据实时同步方法。实现不同数据源之间的实时增量数据同步。
Description
技术领域
本发明涉及数据集成技术领域,具体而言,涉及基于日志管理包的增量数据实时同步装置和方法。
背景技术
随着以计算机软/硬件为代表的科学技术的突飞猛进,以商业智能为代表的信息化技术也得到了迅猛发展。目前,管理和运营信息化已经是实现一个企业跨越式发展的关键战略之一,现代化的企业对自己的业务数据进行商业智能分析的要求越来越高;企业的高层管理者们也越来越清醒的认识到那些蕴藏在海量数据里的有价值信息对提高企业的科学决策和管理水平是多么重要,拍下脑袋就制定政策的时代将一去不复返!而在这个市场竞争越来越激烈的时代里,要想领先其他的企业一步制定出科学、精确的战略决策,这就要依赖具有完整商业智能(Business intelligence,简称为BI)解决方案的分布式***。
从***架构的角度来看一个完整的BI***一般主要分为两部分:位于底层的数据集成(Data Integration,简称DI)子***和基于集成起来的数据进行智能的数据挖掘、分析和展示的子***。其中,对分析至关重要的数据质量(包括准确性,一致性,实时性等)则由DI子***来保证。为了保证整个企业业务***运行的高效和稳定,在***架构时都会设计多个数据源分别承担不同的职责,例如:设置独立的OLTP数据源以应对交易型业务处理请求,同时部署一个或者多个OLAP数据源以应对智能的数据分析型请求;同时部署DI子***来保证从OLTP数据源到OLAP数据源之间数据同步更新。要实现多数据源之间的同步更新,目前主要有以下几种做法:
1.采用定时(如每天,每周或者每月)完全复制的技术:在指定的时间点把用户定义的数据库表里的数据从OLTP端复制到OLAP端。这种技术的缺点是:首先,它不能反应实时的数据,不符合新型商业智能的需求;其次,随着企业数据量越来越大,每次复制需要的时间也越来越长,最终会使得企业不堪重负。
2.采用特定数据库的特定技术,比如Oracle的物化视图/物化日志技术。这种复制技术只能限制在同种类型的数据库之间,对于目前商业智能在OLAP数据源造型倾向于开源数据源或者性能比传统的行式数据存储更优秀的列式数据存储来说无能为力。
3.使用数据库的触发器机制:这种技术对原***侵入性比较高,会对业务***的性能造成很大影响。
4.采用实时数据同步技术:以Oracle的GoldenGate为代表;采用直接对Oracle数据库管理***在运行时产生的日志进行分析而获得最新的数据更新并同步到远端的同构或者异构数据源。这种方法要求对数据库日志的存储结构有深入的了解(日志里存储的数据结构并未公开),实现难度极大;而且不具有通用性:一旦日志里的存储数据结构发生变化,则需要重新实现日志分析模块。
发明内容
本发明所要解决的技术问题在于,提供一种基于日志管理包的增量数据同步技术,可以在短时间内将发生在一端数据源上的事务(已经提交完成的事务)应用到目标端数据源上。
根据本发明的一个方面,提供了一种基于日志管理包的增量数据实时同步装置,包括:第一同步单元,将第一数据源中的初始数据复制到第二数据源中;第二同步单元,使用所述第一数据源的日志管理包获取在所述第一数据源执行的数据操作语句,将所述数据操作语句应用于所述第二数据源,以实现所述第一数据源和所述第二数据源之间的增量数据的实时同步,其中,所述日志管理包包含对日志进行分析所需的存储过程,从所述日志中获取数据操作信息,所述数据操作信息包括数据操作语句的标识、数据操作语句的操作对象和数据操作语句的所属事务,所述日志记录了对所述第一数据源进行的所有操作。利用日志管理包的存储过程可以对日志进行分析,并通过该日志管理包可以查看日志的分析结果,存储过程类似于一个函数或一个批处理文件,调用存储过程后可以返回结果。在进行增量数据同步之前,需进行基准同步,即第一同步单元做的工作,这是为了保证第一数据源和第二数据源之间数据的完全同步。
在上述技术方案,优选地,所述第二同步单元可以包括:提取模块,使用所述日志管理包从所述第一数据源提取出相应的数据操作语句并对所述数据操作语句进行处理后打包成多个事务,根据所述数据操作语句的标识对每个所述事务中的数据操作语句进行排序以及对多个所述事务进行排序;处理模块,将所述提取模块提取的所述事务中的数据操作语句进行过滤和转换处理后发送至应用模块;所述应用模块,将多个所述事务按顺序应用于所述第二数据源。根据日志管理包记录的日志分析结果可以还原出所有曾经应用于第一数据源中的数据操作语句,将属于同一事务的数据操作语句打包成一个事务(数据操作语句的集合),可以根据数据操作语句的标识确定每个数据操作语句的顺序,将每个事务中的数据操作语句按照顺序进行排列,各事务之间也要进行排序,最后将各事务按照顺序应用于第二数据源中。
在上述技术方案,优选地,还可以包括:更新单元,在所述应用模块将所述事务应用于所述第二数据源时,更新所述第二数据源的同步点记录表,所述同步点记录表为将所述第一数据源的增量数据同步至所述第二数据源的操作记录,一个操作记录作为一个同步点。同步点是为了下一轮的增量数据同步做一个记号,防止下一轮增量数据的重复或遗漏。
在上述技术方案,优选地,所述提取模块将所述分析结果中的最新数据操作语句的标识作为上限和将所述同步点记录表中的最新同步点作为下限,调用所述第一数据源的日志管理包提取出所述上限和所述下限之间的所有数据操作语句。由于应用于第一数据源的每个操作对应有顺序,因此,可以将同步点和最新的操作之间的所有操作挖掘出来,这样就可以得到在同步点之后应用于第一数据源的所有数据操作语句(每个操作对应的数据操作语句),然后把这些数据操作语句同样应用于第二数据源上,这样就实现了增量数据的同步。
在上述技术方案,优选地,所述第一数据源为OLTP数据源,所述第二数据源为OLAP数据源。第一数据源与第二数据源之间可以是异构的,第一数据源可以是行存数据库,第二数据源可以是列存数据库。
通过上述技术方案,可以实现一种增量数据实时同步装置,根据数据库***的日志实现增量数据的实时同步,具有实时、高效、简单易于实现的优点。提出的基于事务来保存同步点的做法保证了运行时实时增量数据同步的高可靠性。
根据本发明的又一方面,还提供了一种基于日志管理包的增量数据同步方法,包括:步骤802,将第一数据源中的初始数据复制到第二数据源中;步骤804,使用所述第一数据源的日志管理包获取在所述第一数据源执行的数据操作语句,将所述数据操作语句应用于所述第二数据源,以实现所述第一数据源和所述第二数据源之间的增量数据的实时同步,其中,所述日志管理包包含对日志进行分析和统计所需的存储过程,从所述日志的中获取数据操作信息,所述数据操作信息包括数据操作语句的标识、数据操作语句的操作对象和数据操作语句的所属事务,所述日志记录了对所述第一数据源进行的所有操作。利用日志管理包的存储过程可以对日志进行分析,并通过一个视图可以查看日志的分析结果,存储过程类似于一个函数或一个批处理文件,调用存储过程后可以返回结果或者将分析结果保存在特定的地方以供查询。在进行增量数据同步之前,需进行基准同步,即第一同步单元做的工作,这是为了保证第一数据源和第二数据源之间数据的完全同步。
在上述技术方案,优选地,所述步骤804还可以包括:步骤8042,使用所述日志管理包从所述第一数据源提取出相应的数据操作语句并对所述数据操作语句进行处理后打包成多个事务,根据所述数据操作语句的标识对每个所述事务中的数据操作语句进行排序以及对多个所述事务进行排序;步骤8044,将所述事务中的数据操作语句进行过滤和转换处理后发送至应用模块;步骤8046,将多个所述事务按顺序应用于所述第二数据源。根据日志管理包记录的日志分析结果可以还原出所有曾经应用于第一数据源中的数据操作语句,将属于同一事务的数据操作语句打包成一个事务(数据操作语句的集合),可以根据数据操作语句的标识确定每个数据操作语句的顺序,将每个事务中的数据操作语句按照顺序进行排列,各事务之间也要进行排序,最后将各事务按照顺序应用于第二数据源中。
在上述技术方案,优选地,在将所述事务应用于所述第二数据源时,更新所述第二数据源的同步点记录表,所述同步点记录表为将所述第一数据源的增量数据同步至所述第二数据源的操作记录,一个操作记录作为一个同步点。同步点是为了下一轮的增量数据同步做一个记号,防止下一轮增量数据的重复或遗漏。
在上述技术方案,优选地,在所述步骤8042中,将所述分析结果中的最新数据操作语句的标识作为上限和将所述同步点记录表中的最新同步点作为下限,调用所述第一数据源的日志管理包里的存储过程提取出所述上限和所述下限之间的所有数据操作语句。由于应用于第一数据源的每个操作对应有顺序,因此,可以将同步点和最新的操作之间的所有操作挖掘出来,这样就可以得到在同步点之后应用于第一数据源的所有数据操作语句(每个操作对应的数据操作语句),然后把这些数据操作语句同样应用于第二数据源上,这样就实现了增量数据的实时同步。
在上述技术方案,优选地,所述第一数据源为OLTP数据源,所述第二数据源为OLAP数据源。第一数据源与第二数据源之间可以是异构的,第一数据源可以是行存数据库,第二数据源可以是列存数据库。
通过上述技术方案,可以实现一种增量数据实时同步方法,根据数据库***的日志实现实时地增量同步的机制,具有实时、高效、简单易于实现的优点。提出的基于事务来保存同步点的做法保证了运行时实时增量同步的高可靠性。
附图说明
图1示出了根据本发明的实施例的增量数据同步装置的框图;
图2示出了根据本发明的实施例的运用增量数据同步装置的示意图;
图3示出了根据本发明的实施例的增量数据同步方法的流程图;
图4示出了根据本发明的实施例的数据操作语句的转换流程图;
图5示出了根据本发明的实施例的过滤无意义数据操作语句的流程图;
图6示出了根据本发明的实施例的在应用数据操作语句之前对数据操作语句进行转换处理的流程图;
图7示出了根据本发明的实施例的应用数据操作语句的流程图;以及
图8示出了根据本发明的实施例的增量数据同步方法的流程图。
具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明并不限于下面公开的具体实施例的限制。
下面是在说明书中出现的英文缩写所代表的含义:
BI:Business Intelligence,是商业智能的简称。
DI:Data Integration,是数据集成的简称。
OLTP数据源:企业级***里用来处理交易型业务的数据库管理***,代表性的有Oracle、SQL Server和DB2等行式存储数据库管理***。OLTP业务的要求是快速的增、删、改响应速度,同时还需要完成的事务管理机制来保证多操作的绝对一致性;对查询类响应的要求相对较低。
OLAP数据源:企业级***里用来处理查询/分析型业务的数据库管理***,代表性的数据库管理***有IQ、GBASE等列式存储***。OLAP业务对存储***的要求是必须有很快的数据查询分析功能而对数据修改和事务控制的要求相对要弱。为了性能的考虑,大型的企业在架构自己的分布式业务运营***时,一般都会将这两类业务分开处理;相应地数据源也会分开使用,跨数据源的数据同步则会使用工具或者手工定时来完成。
Sync-up Task:同步任务,在根据本发明的技术方案中,一个从OLTP数据源到OLAP数据源的实现数据同步服务的完整过程。它有以下的核心子模块组成:OLTP数据源基本的数据操作语句提取,基本的数据操作语句整理,数据操作语句应用。
Full Table Sync-up Module:表数据同步模块,简称FTSM。它的功能是根据同步任务的定义,把定义的表里的原有的数据从OLTP数据源完全复制到OLAP数据源。为了保证数据的一致性,在启动同步任务之前需要保证任务所定义的表里的数据不能有增加、删除和修改操作。
SQL Redo Info Extractor Module:OLTP数据源的基本数据操作语句提取模块,简称SEM。
SQL Redo Info Processing Module:对挖掘出来的基本数据操作语句进行处理的处理模块,简称SPM。
SQL Statement Applying Module:将处理好的基本数据操作语句进行应用的应用模块,简称SAM。
Oracle SCN:System Change Number,用来标识对数据库***中对象或者数据的每一次修改以及其先后顺序,其最大值为0xffff.ffffffff。
XID:是数据库里一个事务的标识,详见X/OPEN组织发布的XA规范。
图1示出了根据本发明的实施例的增量数据同步装置的框图。
如图1所示,根据本发明的实施例的基于日志管理包的增量数据同步装置100包括:第一同步单元102,将第一数据源中的初始数据复制到第二数据源中;第二同步单元104,使用所述第一数据源的日志管理包获取在所述第一数据源执行的数据操作语句,将所述数据操作语句应用于所述第二数据源,以实现所述第一数据源和所述第二数据源之间的增量数据的实时同步,其中,所述日志管理包包含对日志进行分析所需的存储过程,从所述日志的中获取数据操作信息,所述数据操作信息包括数据操作语句的标识、数据操作语句的操作对象和数据操作语句的所属事务,所述日志记录了对所述第一数据源进行的所有操作。利用日志管理包的存储过程可以对日志进行分析,并通过一个视图可以查看日志的分析结果,存储过程类似于一个函数或一个批处理文件,调用存储过程后可以返回结果或者将分析结果保存在特定的地方以供查看。在进行增量数据同步之前,需进行基准同步,即第一同步单元做的工作,这是为了保证第一数据源和第二数据源之间数据的完全同步。
在上述技术方案,优选地,所述第二同步单元104可以包括:提取模块1042,使用所述日志管理包从所述第一数据源提取出相应的数据操作语句并对所述数据操作语句进行处理后打包成多个事务,根据所述数据操作语句的标识对每个所述事务中的数据操作语句进行排序以及对多个所述事务进行排序;处理模块1044,将所述提取模块提取的所述事务中的数据操作语句进行过滤和转换处理后发送至应用模块;所述应用模块1046,将多个所述事务按顺序应用于所述第二数据源。根据日志管理包记录的日志分析结果可以还原出所有曾经应用于第一数据源中的数据操作语句,将属于同一事务的数据操作语句打包成一个事务(数据操作语句的集合),可以根据数据操作语句的标识确定每个数据操作语句的顺序,将每个事务中的数据操作语句按照顺序进行排列,各事务之间也要进行排序,最后将各事务按照顺序应用于第二数据源中。
在上述技术方案,优选地,还可以包括:更新单元106,在所述应用模块将所述事务应用于所述第二数据源时,更新所述第二数据源的同步点记录表,所述同步点记录表为将所述第一数据源的增量数据同步至所述第二数据源的操作记录,一个操作记录作为一个同步点。同步点是为了下一轮的增量数据同步做一个记号,防止下一轮增量数据的重复或遗漏。
在上述技术方案,优选地,所述提取模块将所述分析结果中的最新数据操作语句的标识作为上限和将所述同步点记录表中的最新同步点作为下限,调用所述第一数据源的日志管理包提取出所述上限和所述下限之间的所有数据操作语句。由于应用于第一数据源的每个操作对应有顺序,因此,可以将同步点和最新的操作之间的所有操作挖掘出来,这样就可以得到在同步点之后应用于第一数据源的所有数据操作语句(每个操作对应的数据操作语句),然后把这些数据操作语句同样应用于第二数据源上,这样就实现了增量数据的同步。
在上述技术方案,优选地,所述第一数据源为OLTP数据源,所述第二数据源为OLAP数据源。第一数据源与第二数据源之间可以是异构的,第一数据源可以是行存数据库,第二数据源可以是列存数据库。
通过上述技术方案,可以实现一种增量数据实时同步装置,根据数据库***的日志实现实时地增量数据的实时同步,具有实时、高效、简单易于实现的优点。提出的基于事务来保存同步点的做法保证了运行时实时增量同步的高可靠性。
下面各实施例中以OLTP数据源作为第一数据源并且以Oracle数据库作为OLTP数据源的示例,以OLAP数据源作为第二数据源说明本发明的技术方案。在此,应该理解,第一数据源和第二数据源可以是异构的,例如:
●第一数据源是Oracle,DB2或者SQL Server,第二数据源是Oracle,DB2,SQL Server,MySQL或者PostgreSQL等。
●第一数据源是行存数据库(如Oracle),第二数据源是列存数据库(如GBase,IQ等)。
图2示出了根据本发明的实施例的运用增量数据实时同步装置的示意图。
如图2所示,需要将OLTP数据源202的增量数据同步至OLAP数据源204中,首先,第一同步单元102(即表数据同步模块)在进行增量数据同步之前先进行基准同步,将OLTP数据源202中已有的数据完全复制到OLAP数据源204中;然后,在基准同步完成后即可启动增量同步任务。一轮增量同步的过程具体如下:
首先,提取模块1042根据同步任务定义的日志分析起始位置和挖掘深度,从OLTP数据源202(例如Oracle数据库)中挖掘出增量数据然后发送给处理模块1044。
处理模块1044对所收到的事务中的SQL操作做初步的过滤后,按事务打包并(根据OLAP数据源的要求)进行转换处理后传送给应用模块1046。
应用模块1046按事务顺序将收到的事务里的SQL操作(数据操作语句)应用到OLAP数据源。
下面结合图3、图4、图5和图6进一步详细说明图2中所示的示例。
进行数据同步的前提条件:
1.开启OLTP数据源的日志***:
为了实现对OLTP数据源的数据操作语句的实时提取,首先要求OLTP数据源(这里以Oracle数据库管理***为例介绍,以下简称Oracle)在运行时打开归档日志功能。实际上企业为了生产环境运营数据的可靠存储,都默认会打开数据库的归档日志功能。归档日志功能打开后,数据库***将在日志中记录对数据库对象进行的所有操作。
2.可以操作任何用户,任何表的高权限(主要是OLAP端):
为了保证数据的实时同步,在Oracle数据库(OLTP数据源端)上的用户要具有根据日志挖掘日志管理包的权限和创建一些临时表的权限(为了加快分析速度考虑)。在OLAP数据源端的用户则需要更高的权限(最好是***管理员权限)--从Oracle分析出来的操作都要应用到目的端,这些操作可能针对的是不同用户的不同对象。
而Oracle的日志管理包(sys.dbms_logmnr)是一个日志管理工具包,由对日志进行分析和统计所需要的一系列存储过程组成。日志管理包的主要功能包括设置增加(ADD_LOGFILE)日志文件、删除(REMOVE_LOGFILE)日志文件、开始(START_OGMNR)日志挖掘、停止(END_LOGMNR)日志挖掘等存储过程组成。
日志的分析结果会被统一存放,通过一个名字为V$LOGMNR_CONTENTS的视图可以查看。该视图中的一些关键字段如下表1所示(更详细的信息请参照官方文档):
表1
下面是日志管理包的使用举例:
●查询当前的SCN:
SQL>select max(cpods)from sys.x$kcccp;
MAX(CPODS)
----------------
2434009735
●在一个名字为TEST.EMPLOYEE的表里***一条记录:
●查询现在的SCN
SQL>select max(cpods)from sys.x$kcccp;
MAX(CPODS)
----------------
2434009974
●执行日志管理包的日志挖掘存储过程并查看:
begin
sys.dbms_logmnr.star_logmnr(startScn=>2434009735,endScn=>2434009974,Options=>3088);
end;
select t.xid,t.SQL_REDO from v$logmnr_contents t;
得到如下表2所示的数据:
表2
从上表2可以看出刚才执行的SQL操作对应的事务标识是“08002900F8050000”,接下来我们以事务为条件来获取该事务所对应的所有SQL语句:
select t.scn,t.RBASQN,t.RBABLK,t.RBABYTE,t.xid,t.SQL_REDO from v$logmnr_contents t where t.xid=′08002900F8050000′;
得到如下表3所示的数据:
表3
●调用日志管理包的停止日志挖掘存储过程停止查询:
begin
ys.dbms_logmnr.end_logmnr();
end;
至此,已经得到了曾经执行过的所有SQL语句,接下来只要做相应于OLAP数据源的转换并应用就可以实现增量同步的目标了。
确定一条SQL操作语句的标识的具体过程为:
通过对Oracle数据库进行深入的研究发现,仅仅通过SCN还不能完全标识在视图V$LOGMNR_CONTENTS中的一条记录--对于一些批量操作在该视图中会出现SCN一样的情况。为了能确定一个操作的真正顺序,V$LOGMNR_CONTENTS还有另外三个字段:RBASQN、RBABLK和RBABYTE,这三个字段可以确认一个操作发生时的真实写入顺序(精确到BYTE,这绝对不可能重复),先发生的操作必然先写入日志。根据本发明的技术方案将使用SCN、RBASQN、RBABLK和RBABYTE这四个字段来标识一条SQL操作语句,进行排序比较时将首先比较SCN,如果SCN相等则按顺序比较RBASQN、RBABLK和RBABYTE,以此类推来确定每条操作在事务里的正确顺序。对于Oracle的RAC环境还需要增加THREAD#来区分不同实例下的各自顺序,因与本发明的实现原理关系不大,在此不再赘述。
在实时更新启动前需要维持好数据基准,即第一同步单元102执行的同步过程。为了保证数据的绝对一致性,在做实时更新之前还需要将OLTP数据源里已经存在的数据完全同步到OLAP数据源端并且保证在实时更新模块(即第二同步单元104)启动之前不能对OLTP数据源做任何的修改操作。图1以及图2中的第一同步单元102就是为完成数据基准而设计的,一般情况下,可以通过三种方式实现:
1.成熟数据库厂商都会提供其他厂家的数据源到自己的数据同步机制,第一同步单元102只要利用这些机制实现就可以。
2.可以通过使用一些标准的协议自己实现,比如利用JDBC协议,将数据从OLTP数据源端复制到OLAP目的端。
3.根据用户的需要,也可以不实现这个第一同步单元102,在进行实时更新前通过手动同步来维持好数据基准。
维持一个绝对准确的数据基准是做好实时同步的前提,否则如果两个数据源的数据原先就不同步就算实时更新再好也没有用--两个数据源的数据永远是不一致的。
此外,为了保证运行的高可靠性,应用模块1046在每次把挖掘出的SQL操作应用到数据到OLAP数据源后都需要记录下一个点,这个点称作同步点。为了保证记录下来的同步点和将提取出的数据操作语句应用于OLAP数据源完成的位置绝对一致,需要在OLAP数据源里建立一个表,并把同步点更新操作和SQL操作应用绑定在一个事务里。同步点记录表的格式如下表4所示:
表4
因此,之所以提供数据源的标识是考虑到有可能需要从多个数据源同步到一个数据源的情况。应用模块1046在应用挖掘到的一个事务成功后,在事务提交前需要更新该表以为提取模块1042下一轮挖掘提供同步点信息。
图2中提到的增量同步任务实际上定义一系列的操作目标:实时数据增量同步的时间间隔;对象映射集合,要同步的每一个数据对象在Oracle上的名字和目的OLAP数据源上的名字。对象映射集合里的一个完整的元素定义:Usr1.Table1——>Usr2.Table2;本次日志挖掘的范围,也就是起始SCN到结束SCN的跨度。
同步任务使用提取模块1042模块进行数据提取,使用处理模块1044进行SQL操作转换(如用户名和表名的转换),使用应用模块1046将格式化好的数据应用到OLAP数据源。
下面结合图3、图4和图5详细说明增量数据同步的处理过程。
在程序初始化阶段,根据对数据源的定义首先要建立Oracle数据源到OLAP数据源的连接。在相关数据源的初始化成功后,主程序框架就可以加载用户定义的同步任务了,每一个任务启动后都将按照用户所定义的时间间隔去做增量同步,其详细处理流程如图3所示:
在步骤302,提取模块1042首先会获取Oracle当前运行的最新SCN;
在步骤304,从OLAP数据源里的同步点记录表获取已经更新完成的同步点(本轮挖掘的下限的SCN);
在步骤306,判断同步点是否存在,若判断结果为否,则进入步骤310,若判断结果为是,则进入步骤308。
在步骤310,如果OLAP数据源里的同步点记录表还没有旧的同步点则将当前最新的SCN记入OLAP数据源作为第一个同步点,为下一轮挖掘做好准备(这是基准同步完成后的第一次挖掘,本轮结束而且没有任何SQL操作输出);
在步骤308,判断同步点是否变换,若判断结果为否,则结束流程,如果判断结果为是,则进入步骤312;
在步骤312,如果得到了旧的SCN则根据定义的深度去计算出挖掘上限的SCN;
在步骤314,接着将上下限的SCN作为输入参数调用Oracle日志管理包的开始挖掘存储过程;
在步骤316,处理V$LOGMNR_CONTENTS中的每一条记录,遍历恢复出来的每一个操作并做基本的过滤并按事务打包;
在步骤318,接着对每个事务里的SQL语句进行排序;
在步骤320,将所有打包的事务排序(依据是事务里的每个提交操作的SCN);
在步骤322,最后将各个事务按顺序应用到OLAP数据源里;
在步骤324,调用日志管理包的停止日志挖掘存储过程,结束挖掘过程;
在步骤326,提交Oracle的事务,到此,一轮增量数据提取完成。
具体地,在上述步骤316中,对从V$LOGMNR_CONTENTS里获取的每一条SQL语句都要进行过滤和转换操作(SPM),详细的转换流程如图4和图5所示。
如图4所示,在步骤402,对于挖掘到的每一条操作进行处理时首先要过滤掉不需要应用在OLAP数据的操作(如数据库内部操作和被回滚的操作等);
在步骤404,然后根据需要对SQL操作进行转换;
在步骤406,根据V$LOGMNR_CONTENTS中的RS_ID和CSF合并跨行的操作;
在步骤408,最后根据V$LOGMNR_CONTENTS中的XID将SQL操作还原成事务。
受日志管理包的实现机制影响,可能挖掘到一些与上一***作重复的操作或者对增量同步没有意义的操作,需要进行过滤,其过滤的详细流程如图5所示:
在步骤502,忽略同步点之前的操作;
在步骤504,忽略Oracle***内部的SQL操作,例如一些内部的操作(如事务开始语句等)
在步骤506,忽略已经被回滚掉的所属事务(已经回滚掉的事务不需要在OLAP数据源上应用);
在步骤508,忽略针对临时表的操作;
在步骤510,忽略操作的对象不在同步任务定义范围内(相当于DI不关心的表),即忽略不属于本同步任务所定义的映射集合中对象的SQL操作。
针对同步任务的定义和OLAP数据源的特性,还需要对SQL操作进行如图6所示的转换过程。需注意的是,数据转换不是数据集成的关键功能,这里只是针对从OLTP数据源到OLAP数据源必须做的一些转换做了相应的描述:
在步骤602,根据同步任务的映射定义作对象名称的转换;
在步骤604,对不支持的数据类型在应用到OLAP数据源前要做相应的转换;
在步骤606,对不支持ORACLE函数(例如ROWTOHEX等)要实现相应的转换机制;
在步骤608,对LOB数据要做特殊的转换(因为每种数据源都为LOB数据做了独特的实现);
这些转换都需要在SQL操作应用到OLAP数据源之前进行,这样才能保证增量同步的顺利完成。
除了图中所示的这些过滤和转换基本流程,为了增量数据的完全可靠,在具体实现中还要对从Oracle挖掘出来的未完成的事务做持久化处理,这样就可以实现一个恢复机制,以保证在程序异常重新启动时仍然能够恢复回来,而不至于丢失数据。
处理模块1044对SQL语句进行处理后把SQL语句按事务(XID)分类打包,形成了事务集合,并进行了排序,这样应用模块1046可以在应用时按原来事务提交的先后顺序将这些操作语句应用到OLAP数据源中,同时应用模块1046在提交OLAP数据源事务之前还更新了同步点,这保证了在下一轮增量同步挖掘过程能根据确切的同步点去计算挖掘的范围,从而绝对保证OLTP数据源和OLAP数据源的数据一致性。
应用模块1046按照顺序将oracle已经提交的事务应用于OLAP数据源中,具体过程如下所示:
在步骤702,应用一个来自OLTP数据源的事务之前首先需要打开一个OLAP数据源的本地事务;
在步骤704,然后在该本地事务所属于的连接上按顺序去应用OLTP数据源的事务里所包含的所有的SQL操作;
在步骤706,在OLTP数据源的事务里包含的所有的操作都应用完成后,在提交OLAP数据源上的本地事务之前,需要先把应用过的SQL操作的最新同步点(本轮挖掘的上限SCN,也是下一轮儿挖掘的下限SCN,包括在日志中的位置信息)记录到OLAP数据源中;
在步骤708,最后提交OLAP数据源上的本地事务。这样,同步点的更新和所对应的增量操作同时被应用到OLAP数据源上,保证了数据的一致性。
在详细说明了根据本发明的技术方案之后,下面结合图8说明根据本发明的增量数据实时同步方法。
图8示出了根据本发明的实施例的增量数据实时同步方法的流程图。
如图8所示,根据本发明的实施例的基于日志管理包的增量数据同步方法,包括:步骤802,将第一数据源中的初始数据复制到第二数据源中;步骤804,使用第一数据源的日志管理包获取在第一数据源执行的数据操作语句,将数据操作语句应用于第二数据源,以实现第一数据源和第二数据源之间的增量数据的实时同步,其中,日志管理包包含对日志进行分析所需的存储过程,从日志中获取数据操作信息,数据操作信息包括数据操作语句的标识、数据操作语句的操作对象和数据操作语句的所属事务,日志记录了对第一数据源进行的所有操作。利用日志管理包的存储过程可以对日志进行分析,并通过该一视图可以查看日志的分析结果,存储过程类似于一个函数或一个批处理文件,调用存储过程后可以返回结果。在进行增量数据同步之前,需进行基准同步,即第一同步单元做的工作,这是为了保证第一数据源和第二数据源之间数据的完全同步。
在上述技术方案,优选地,所述步骤804还可以包括:步骤8042,使用所述日志管理包从所述第一数据源提取出相应的数据操作语句并对所述数据操作语句进行处理后打包成多个事务,根据所述数据操作语句的标识对每个所述事务中的数据操作语句进行排序以及对多个所述事务进行排序;步骤8044,将所述事务中的数据操作语句进行过滤和转换处理后发送至应用模块;步骤8046,将多个所述事务按顺序应用于所述第二数据源。根据日志管理包记录的日志分析结果可以还原出所有曾经应用于第一数据源中的数据操作语句,将属于同一事务的数据操作语句打包成一个事务(数据操作语句的集合),可以根据数据操作语句的标识确定每个数据操作语句的顺序,将每个事务中的数据操作语句按照顺序进行排列,各事务之间也要进行排序,最后将各事务按照顺序应用于第二数据源中。
在上述技术方案,优选地,在将所述事务应用于所述第二数据源时,更新所述第二数据源的同步点记录表,所述同步点记录表为将所述第一数据源的增量数据同步至所述第二数据源的操作记录,一个操作记录作为一个同步点。同步点是为了下一轮的增量数据同步做一个记号,防止下一轮增量数据的重复或遗漏。
在上述技术方案,优选地,在所述步骤8042中,将所述分析结果的最新数据操作语句的标识作为上限和将所述同步点记录表中的最新同步点作为下限,调用所述第一数据源的日志管理包提取出所述上限和所述下限之间的所有数据操作语句。由于应用于第一数据源的每个操作对应有顺序,因此,可以将同步点和最新的操作之间的所有操作挖掘出来,这样就可以得到在同步点之后应用于第一数据源的所有数据操作语句(每个操作对应的数据操作语句),然后把这些数据操作语句同样应用于第二数据源上,这样就实现了增量数据的实时同步。
在上述技术方案,优选地,所述第一数据源为OLTP数据源,所述第二数据源为OLAP数据源。第一数据源与第二数据源之间可以是异构的,第一数据源可以是行存数据库,第二数据源可以是列存数据库。
通过上述技术方案,可以实现一种增量数据同步方法,根据数据库***的日志实现实时地增量同步的机制,具有实时、高效、简单易于实现的优点。提出的基于事务来保存同步点的做法保证了运行时实时增量同步的高可靠性。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (4)
1.一种基于日志管理包的增量数据实时同步装置,其特征在于,包括:
第一同步单元,将第一数据源中的初始数据复制到第二数据源中;
第二同步单元,使用所述第一数据源的日志管理包获取在所述第一数据源执行的数据操作语句,将所述数据操作语句应用于所述第二数据源,以实现所述第一数据源和所述第二数据源之间的增量数据的实时同步,其中,所述日志管理包包含对日志进行分析所需的存储过程,从所述日志中获取数据操作信息,所述数据操作信息包括数据操作语句的标识、数据操作语句的操作对象和数据操作语句的所属事务,所述日志记录了对所述第一数据源进行的所有操作;
所述第二同步单元包括:
提取模块,使用所述日志管理包从所述第一数据源提取出相应的数据操作语句并对所述数据操作语句进行处理后打包成多个事务,根据所述数据操作语句的标识对每个所述事务中的数据操作语句进行排序以及对多个所述事务进行排序;
处理模块,将所述提取模块提取的所述事务中的数据操作语句进行过滤和转换处理后发送至应用模块;
所述应用模块,将多个所述事务按顺序应用于所述第二数据源;
更新单元,在所述应用模块将所述事务应用于所述第二数据源时,更新所述第二数据源的同步点记录表,所述同步点记录表为将所述第一数据源的增量数据同步至所述第二数据源的操作记录,一个操作记录作为一个同步点;
所述提取模块将所述分析结果中的最新数据操作语句的标识作为上限和将所述同步点记录表中的最新同步点作为下限,调用所述第一数据源的日志管理包提取出所述上限和所述下限之间的所有数据操作语句。
2.根据权利要求1所述的基于日志管理包的增量数据实时同步装置,其特征在于,所述第一数据源为OLTP数据源,所述第二数据源为OLAP数据源。
3.一种基于日志管理包的增量数据实时同步方法,其特征在于,包括:
步骤802,将第一数据源中的初始数据复制到第二数据源中;
步骤804,使用所述第一数据源的日志管理包获取在所述第一数据源执行的数据操作语句,将所述数据操作语句应用于所述第二数据源,以实现所述第一数据源和所述第二数据源之间的增量数据的实时同步,其中,所述日志管理包包含对日志进行分析所需的存储过程,从所述日志中获取数据操作信息,所述数据操作信息包括数据操作语句的标识、数据操作语句的操作对象和数据操作语句的所属事务,所述日志记录了对所述第一数据源进行的所有操作;
所述步骤804还包括:
步骤8042,使用所述日志管理包从所述第一数据源提取出相应的数据操作语句并对所述数据操作语句进行处理后打包成多个事务,根据所述数据操作语句的标识对每个所述事务中的数据操作语句进行排序以及对多个所述事务进行排序;
步骤8044,将所述事务中的数据操作语句进行过滤和转换处理后发送至应用模块;
步骤8046,将多个所述事务按顺序应用于所述第二数据源;
在将所述事务应用于所述第二数据源时,更新所述第二数据源的同步点记录表,所述同步点记录表为将所述第一数据源的增量数据同步至所述第二数据源的操作记录,一个操作记录作为一个同步点;
在所述步骤8042中,将所述分析结果中的最新数据操作语句的标识作为上限和将所述同步点记录表中的最新同步点作为下限,调用所述第一数据源的日志管理包提取出所述上限和所述下限之间的所有数据操作语句。
4.根据权利要求3所述的基于日志管理包的增量数据实时同步方法,其特征在于,所述第一数据源为OLTP数据源,所述第二数据源为OLAP数据源。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110284583.1A CN102508835B (zh) | 2011-09-22 | 2011-09-22 | 基于日志管理包的增量数据实时同步装置和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110284583.1A CN102508835B (zh) | 2011-09-22 | 2011-09-22 | 基于日志管理包的增量数据实时同步装置和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102508835A CN102508835A (zh) | 2012-06-20 |
CN102508835B true CN102508835B (zh) | 2015-04-15 |
Family
ID=46220925
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110284583.1A Active CN102508835B (zh) | 2011-09-22 | 2011-09-22 | 基于日志管理包的增量数据实时同步装置和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102508835B (zh) |
Families Citing this family (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102495910B (zh) * | 2011-12-28 | 2013-09-18 | 畅捷通信息技术股份有限公司 | 实现异构***数据定时同步的装置和方法 |
CN103577468B (zh) * | 2012-08-03 | 2018-10-23 | ***股份有限公司 | 一种适用于oltp***的流量控制器和流量控制方法 |
CN102819608A (zh) * | 2012-08-22 | 2012-12-12 | 山东中创软件工程股份有限公司 | 一种基于Oracle数据库***的数据抽取方法及装置 |
CN103064976B (zh) * | 2013-01-14 | 2015-10-28 | 浙江水利水电学院 | 基于主动数据库技术的同异构dbms间数据交换方法 |
CN103617176B (zh) * | 2013-11-04 | 2017-03-15 | 广东电子工业研究院有限公司 | 一种实现多源异构数据资源自动同步的方法 |
CN103970854B (zh) * | 2014-05-05 | 2017-05-17 | 神华集团有限责任公司 | Sap ecc端与sap bw端之间增量凭证信息同步方法 |
CN104298760B (zh) * | 2014-10-23 | 2019-02-05 | 北京京东尚科信息技术有限公司 | 一种应用于数据仓库的数据处理方法和数据处理装置 |
CN106302559B (zh) * | 2015-05-11 | 2019-07-05 | 阿里巴巴集团控股有限公司 | 一种数据复制方法和设备 |
CN104933101B (zh) * | 2015-05-29 | 2018-05-29 | 南车株洲电力机车研究所有限公司 | 一种基于svn的配置审计信息自动统计方法 |
CN105183860B (zh) * | 2015-09-10 | 2018-10-19 | 北京京东尚科信息技术有限公司 | 数据同步方法和*** |
CN105550229B (zh) * | 2015-12-07 | 2019-05-03 | 北京奇虎科技有限公司 | 分布式存储***数据修复的方法和装置 |
CN107357791B (zh) * | 2016-05-10 | 2021-10-15 | 中兴通讯股份有限公司 | 一种数据共享方法及装置 |
CN106777026B (zh) * | 2016-12-08 | 2019-12-20 | 用友网络科技股份有限公司 | 支持微服务架构事务最终一致性的方法、装置及*** |
CN108733541A (zh) * | 2017-04-17 | 2018-11-02 | 伊姆西Ip控股有限责任公司 | 用于实时确定数据复制进度的方法和设备 |
CN107357920B (zh) * | 2017-07-21 | 2020-05-22 | 北京奇艺世纪科技有限公司 | 一种增量式的多副本数据同步方法及*** |
CN107748752B (zh) * | 2017-09-05 | 2021-07-06 | 新智云数据服务有限公司 | 一种数据处理方法及装置 |
CN110019140B (zh) * | 2017-12-29 | 2021-07-16 | 华为技术有限公司 | 数据迁移方法、装置、设备以及计算机可读存储介质 |
CN108932286B (zh) * | 2018-05-23 | 2022-04-22 | 北京奥星贝斯科技有限公司 | 一种数据查询方法及装置 |
CN109460318B (zh) * | 2018-10-26 | 2021-01-01 | 珠海市时杰信息科技有限公司 | 一种可回滚档案采集数据的导入方法、计算机装置及计算机可读存储介质 |
CN109614266B (zh) * | 2018-12-05 | 2021-07-02 | 北京和利时***工程有限公司 | 一种数据同步方法及装置 |
CN109828977A (zh) * | 2018-12-27 | 2019-05-31 | 东软集团股份有限公司 | 同步表单数据的方法、装置和存储介质及客户端、服务端 |
CN112231409B (zh) * | 2020-10-23 | 2024-04-26 | 北京人大金仓信息技术股份有限公司 | 数据库同步的初始化装载方法、装置、设备和存储介质 |
CN114003622B (zh) * | 2021-12-30 | 2022-04-08 | 天津南大通用数据技术股份有限公司 | 一种事务型数据库之间巨大事务增量同步方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1617600A (zh) * | 2003-11-10 | 2005-05-18 | 华为技术有限公司 | 一种归属位置寄存器的数据容灾方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101369283A (zh) * | 2008-09-25 | 2009-02-18 | 中兴通讯股份有限公司 | 一种内存数据库与物理数据库间的数据同步方法及*** |
CN102129478B (zh) * | 2011-04-26 | 2012-10-03 | 广州从兴电子开发有限公司 | 数据库同步方法及*** |
-
2011
- 2011-09-22 CN CN201110284583.1A patent/CN102508835B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1617600A (zh) * | 2003-11-10 | 2005-05-18 | 华为技术有限公司 | 一种归属位置寄存器的数据容灾方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102508835A (zh) | 2012-06-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102508835B (zh) | 基于日志管理包的增量数据实时同步装置和方法 | |
US8429121B2 (en) | Apparatus and method for creating a real time database replica | |
US20190317944A1 (en) | Methods and apparatus for integrated management of structured data from various sources and having various formats | |
CN107835983B (zh) | 使用一致的数据库快照在分布式数据库中进行备份和还原 | |
US8886596B2 (en) | Method for reorganizing or moving a database table | |
US20090083341A1 (en) | Ensuring that the archival data deleted in relational source table is already stored in relational target table | |
CN114036119A (zh) | 一种基于kettle和数据库日志的数据同步方法 | |
US7353231B1 (en) | Flip-flap mechanism for high availability, online analytical processing databases | |
CN110457333A (zh) | 数据实时更新方法、装置及计算机可读存储介质 | |
Zhou et al. | An ETL strategy for real-time data warehouse | |
CN112800060A (zh) | 数据处理方法、装置、计算机可读存储介质及电子设备 | |
CN107783863A (zh) | 一种海量文件快速合成备份方法 | |
CN115658391A (zh) | 基于QianBase MPP数据库的WAL机制的备份恢复方法 | |
Satyanarayanan et al. | Transparent logging as a technique for debugging complex distributed systems | |
Wrembel et al. | Managing and querying versions of multiversion data warehouse | |
JP3730556B2 (ja) | データベース管理システム | |
US6704735B1 (en) | Managing object life cycles using object-level cursor | |
CN109284276A (zh) | 一种基于大数据架构的数据库加速方法 | |
Silva et al. | Assisting Data Warehousing Populating Processes Design through Modelling using Coloured Petri Nets. | |
Busby et al. | The practical integration of manufacturing applications | |
Singh et al. | Relational database management systems | |
Gaonkar et al. | Optimized Model of Ledger Database Management to handle Vehicle Registration | |
Bono | Historical seismometry database project: A comprehensive relational database for historical seismic records | |
Thomas et al. | OCA/OCP: Oracle9i DBA Fundamentals I Study Guide: Exam 1Z0-031 | |
Haithcoat | Relational Database Management Systems, Database Design, and GIS |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C56 | Change in the name or address of the patentee |
Owner name: YONYOU NETWORK TECHNOLOGY CO., LTD. Free format text: FORMER NAME: UFIDA SOFTWARE CO., LTD. |
|
CP03 | Change of name, title or address |
Address after: 100094 Haidian District North Road, Beijing, No. 68 Patentee after: Yonyou Network Technology Co., Ltd. Address before: 100094 Beijing city Haidian District North Road No. 68, UFIDA Software Park Patentee before: UFIDA Software Co., Ltd. |