本发明专利技术涉及数据库技术领域,提供了一种基于日志解析的数据库添加列同步方法和装置。方法包括使用默认值常量表达式EXP_NEW作为目的端数据库中添加列的定义表达式,然后把添加列操作发送到目标端同步服务执行;当捕获取该添加列的提交日志时,判断目的端的定义表达式EXP_NEW和源端数据库中添加列的定义表达式EXP_OLD是否等价,如果等价则完成该事务同步,否则,使用表达式EXP_OLD构造一个修改列默认值的操作发送到目标库执行,完成该事务同步。本发明专利技术基本上可以保证源和目的数据库几乎在同一时刻对表进行添加列的操作。
A synchronization method and device for adding columns in database based on log parsing
【技术实现步骤摘要】
一种基于日志解析的数据库添加列同步方法和装置
本专利技术涉及数据库
,特别是涉及一种基于日志解析的数据库添加列同步方法和装置。
技术介绍
在基于日志解析架构的数据库实时同步系统(支持异构)中,表修改的添加列操作同步往往会拖慢同步的性能。主要是在实际的应用系统中有些表的数据量过于庞大,如果在这种记录数很大的表上对表结构进行修改,比如删除某个列,会造成数据库对表的重构,由于这些表记录数庞大,数据库在重构时会消耗大量的时间并且产生大量的数据库日志。传统的同步方法源端日志解析服务需要捕获到源端数据库表修改操作的提交日志以后再开始解析并同步该表修改操作,并在捕获到该操作提交日志之前,该操作产生的大量日志都要进行收集并缓存,缓存操作会产生大量的IO从而影响源端数据库的性能,并且表修改操作发送到目的端,目的端的数据库在执行该修改操作时,也同样需要消耗大量的时间才能完成,期间数据同步服务在同步该表的后续操作时,只能等待目的端数据库完成表修改以后才能进行,造成很大的同步延时。例如对源端数据库拥有1亿行记录的A表添加1个列,该操作大约需要在源端数据库执行花费约60分钟,该操作同步到目的库也同样至少要花费60分钟才能完成,那么就会造成数据同步至少延迟60分钟。在搭建主备同步的环境中,目的端数据库往往是用作查询库来分担主库的压力,表在添加列时,如何缩短大表修改操作同步延时并且减少同步对目的端数据库上应用程序的影响就成为业界亟待解决的技术问题。
技术实现思路
本专利技术要解决的技术问题是在搭建主备同步的环境中,目的端数据库往往是用作查询库来分担主库的压力,表在添加列时,长时间的同步延时将影响到应用的查询功能,如何缩短大表修改操作同步延时并且减少同步对目的端数据库上应用程序的影响就成为业界亟待解决的技术问题。本专利技术进一步要解决的问题是例如采用系统时间作为添加列情况下,可能发生的直接通过表达式生成目的端数据库添加表默认值方式,会产生目的端数据库添加列中插入数据与源端数据库添加列不一致的问题。本专利技术采用如下技术方案:第一方面,本专利技术提供了一种基于日志解析的数据库添加列同步方法,包括:源端数据库的同步系统判断日志中待同步的操作为DDL事务,则根据该事务号收集后续属于所述DDL事务的日志;当收集到上述DDL事务相关的用户表INSERT操作日志时,则判断DDL事务中否为添加列的操作,如果是,则提取INSERT操作中新列的值构造出默认值常量表达式为EXP_NEW;使用默认值常量表达式EXP_NEW作为目的端数据库中添加列的定义表达式,然后把添加列操作发送到目标端同步服务执行;源端数据库同步系统继续捕获日志,直到捕获到所述DDL事务的提交日志;则根据前面收集的系统表操作日志还原出原始的添加列操作,并提取出源端数据库中添加列的定义表达式为EXP_OLD;当捕获取该添加列的提交日志时,判断目的端的定义表达式EXP_NEW和源端数据库中添加列的定义表达式EXP_OLD是否等价,如果等价则完成该事务同步,否则,使用表达式EXP_OLD构造一个修改列默认值的操作发送到目标库执行,完成该事务同步。优选的,所述源端数据库的同步系统判断日志中待同步的操作为DDL事务,则根据该事务号收集后续属于所述DDL事务的日志,还包括:当首先收集到对应所述DDL事务的日志内容不是用户表INSERT操作,而是提交日志时,判断DDL事务为添加列的操作,则使用EXP_OLD表达式作为默认值向目的端同步系统发送添加列操作。优选的,目的端数据库的同步系统在接收到源端数据库的同步系统的添加列操作后,直接在目的端数据库上对该表执行添加列操作,完成所述DDL事务同步。优选的,目的端数据库在所述DDL前,若接收到查询请求,所述方法还包括:所述目的端数据库的原表被锁定,从而处于不可被访问状态;其中,在完成所述DDL事物同步后,通过所述替换原表的新建表完成所述查询请求。优选的,所述源端数据库同步系统继续捕获日志,还包括:当捕获到该添加列的回滚日志时,由于目标端已经执行了添加列的操作,所以要构造删除列的操作发送到目标端执行,完成该事务同步。优选的,所述当收集到对应所述DDL事务的日志内容为用户表INSERT操作时,判断DDL事务是否为添加列的操作,具体包括:针对DDL事务,源端数据库会生成系统表的日志和对应普通表的日志;在收集完系统表的日志以后,通过系统表日志反推所述DDL事务所属操作;其中,收集完系统表的日志的条件是:产生DDL事务的提交或回滚消息,和/或,对应所述DDL事务的普通表的日志产生。优选的,所述数据库包括Oracle和/或达梦数据库。优选的,在所述方法中在源端数据库及目的端数据库部署同步系统,源端数据库同步系统从源端数据库读取日志,而目标端数据库同步系统则是负责把源端发过来的同步操作应用到目的端数据库。第二方面,本专利技术还提供了一种基于日志解析的数据库添加列同步装置,用于实现第一方面所述的基于日志解析的数据库添加列同步方法,所述装置包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述处理器执行,用于执行第一方面所述的基于日志解析的数据库添加列同步方法。第三方面,本专利技术还提供了一种非易失性计算机存储介质,所述计算机存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行,用于完成第一方面所述的基于日志解析的数据库添加列同步方法。本专利技术通过捕捉对应DDL事物的用户表操作日志,作为触发目的端进行添加列操作的依据,进一步的在捕获到事务的提交日志或者回滚日志,对添加列操作进行修正,从而基本上可以保证源和目的数据库几乎在同一时刻对表进行添加列的操作,,这样缩短了添加列操作同步造成的延时从而减轻了添加列操作同步对目的端应用的影响。进一步的,本专利技术解决了特定情况下源端数据库中添加列的定义表达式EXP_OLD和实际生成的常量表达式EXP_NEW,在目的端数据库适用时候会产生不匹配的问题,并通过使用默认值常量表达式EXP_NEW作为目的端数据库中添加列的定义表达式,然后把添加列操作发送到目标端同步服务执行,保证了目的端数据库在执行添加列操作时候,添加列中的数据能够与源端数据库的添加列中数据内容一致,而通过最后校对来修改添加列的定义。【附图说明】为了更清楚地说明本专利技术实施例的技术方案,下面将对本专利技术实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本专利技术实施例提供的一种基于日志解析的数据库添加列同步方法流程示意图;图2是本专利技术实施例提供的情况更复杂的一种基于日志解析的数据库添加列同步方法流程示意图;图3是本专利技术实施本文档来自技高网...
【技术保护点】
1.一种基于日志解析的数据库添加列同步方法,其特征在于,包括:/n源端数据库的同步系统判断日志中待同步的操作为DDL事务,则根据该事务号收集后续属于所述DDL事务的日志;/n当收集到上述DDL事务相关的用户表INSERT操作日志时,则判断DDL事务中否为添加列的操作,如果是,则提取INSERT操作中新列的值构造出默认值常量表达式为EXP_NEW;/n使用默认值常量表达式EXP_NEW作为目的端数据库中添加列的定义表达式,然后把添加列操作发送到目标端同步服务执行;/n源端数据库同步系统继续捕获日志,直到捕获到所述DDL事务的提交日志;则根据前面收集的系统表操作日志还原出原始的添加列操作,并提取出源端数据库中添加列的定义表达式为EXP_OLD;/n当捕获取该添加列的提交日志时,判断目的端的定义表达式EXP_NEW和源端数据库中添加列的定义表达式EXP_OLD是否等价,如果等价则完成该事务同步,否则,使用表达式EXP_OLD构造一个修改列默认值的操作发送到目标库执行,完成该事务同步。/n
【技术特征摘要】
1.一种基于日志解析的数据库添加列同步方法,其特征在于,包括:
源端数据库的同步系统判断日志中待同步的操作为DDL事务,则根据该事务号收集后续属于所述DDL事务的日志;
当收集到上述DDL事务相关的用户表INSERT操作日志时,则判断DDL事务中否为添加列的操作,如果是,则提取INSERT操作中新列的值构造出默认值常量表达式为EXP_NEW;
使用默认值常量表达式EXP_NEW作为目的端数据库中添加列的定义表达式,然后把添加列操作发送到目标端同步服务执行;
源端数据库同步系统继续捕获日志,直到捕获到所述DDL事务的提交日志;则根据前面收集的系统表操作日志还原出原始的添加列操作,并提取出源端数据库中添加列的定义表达式为EXP_OLD;
当捕获取该添加列的提交日志时,判断目的端的定义表达式EXP_NEW和源端数据库中添加列的定义表达式EXP_OLD是否等价,如果等价则完成该事务同步,否则,使用表达式EXP_OLD构造一个修改列默认值的操作发送到目标库执行,完成该事务同步。
2.根据权利要求1所述的基于日志解析的数据库添加列同步方法,其特征在于,所述源端数据库的同步系统判断日志中待同步的操作为DDL事务,则根据该事务号收集后续属于所述DDL事务的日志,还包括:
当首先收集到对应所述DDL事务的日志内容不是用户表INSERT操作,而是提交日志时,判断DDL事务为添加列的操作,则使用EXP_OLD表达式作为默认值向目的端同步系统发送添加列操作。
3.根据权利要求2所述的基于日志解析的数据库添加列同步方法,其特征在于,目的端数据库的同步系统在接收到源端数据库的同步系统的添加列操作后,直接在目的端数据库上对该表执行添加列操作,完成所述DDL事务同步。
4.根据权利要求2所述的基于日志解析的数据库添加列同步方法,其特征在于,目的端数据库在所述DD...
【专利技术属性】
技术研发人员:付铨,孙峰,彭青松,余院兰,
申请(专利权)人:武汉达梦数据库有限公司,
类型:发明
国别省市:湖北;42
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。