一种查询建表数据实时同步方法和装置制造方法及图纸

技术编号:39142784 阅读:12 留言:0更新日期:2023-10-23 14:55
本发明专利技术涉及数据库同步技术领域,提供了一种查询建表数据实时同步方法和装置。查询建表数据实时同步方法包括:源端从日志流中捕获解析到数据库系统表的增量操作以及同步表的插入操作,识别为查询建表操作;源端捕获解析到查询建表操作的提交操作后,根据已缓存的系统表操作,逆向还原出同步表字典信息,生成同步表的离线字典文件;源端将查询建表操作转换为同步表的全量同步操作,在目标端完成全量同步;源端捕获解析同步表的增量操作,根据离线字典文件和增量操作生成增量同步消息,将增量同步消息发送目标端,并由目标端进行执行,完成增量同步。本发明专利技术通过将查询建表操作直接转换成表全量同步操作,避免了缓存大量插入操作数据。数据。数据。

【技术实现步骤摘要】
一种查询建表数据实时同步方法和装置


[0001]本专利技术涉及数据库同步
,特别是涉及一种查询建表数据实时同步方法和装置。

技术介绍

[0002]目前,在基于日志解析的异构数据库数据实时同步中,同步DDL(Data Definition Language,数据定义语言)操作时,主要有两种技术手段,一种是基于数据库的事件触发器,捕获DDL同步事件,然后基于捕获的同步事件进行解析分析完成同步;另一种是无触发器模式,基于数据库系统表的操作解析,进行DDL操作逆向还原来完成同步。无触发器模式不需要在源端数据库系统建立事件触发器,对源端数据库系统无侵入性,因此得到更广泛应用。
[0003]查询建表操作是一类较为特殊的DDL同步操作,因为其在进行建表操作后,会进行表数据的插入操作,既包含有DDL操作又包含DML(Data Manipulation Language,数据操纵语言)操作。目前Oracle源端数据库基于无触发器模式同步查询建表操作时,按照日志流的顺序,数据库中系统表的操作是在同步表的插入操作之后进行,因此在进行同步时,捕获到插入操作后,不能通过系统表的增量操作获取表字典信息,其中,系统表如sys.col$、sys.tab$等,所以此时不能将插入操作同步到目标端,只能缓存在内存或本地磁盘,待插入操作解析完成后,继续捕获解析系统表操作,得到表字典,然后读取缓存的插入操作数据,完成建表及插入操作同步。上述Oracle源端同步查询建表的方法中,由于需要将同步表插入操作全部进行缓存,当同步表数据量较大时,源端需要缓存大量的插入操作数据,会造成内存或磁盘资源紧张问题,如何避免缓存大量的插入操作数据,是目前数据实时同步中亟需解决的一个技术问题。
[0004]鉴于此,克服该现有技术所存在的缺陷是本
亟待解决的问题。

技术实现思路

[0005]针对现有技术的以上缺陷或改进需求,本专利技术提供了一种查询建表数据实时同步方法和装置,其目的在于,从日志流中捕获查询建表操作后,不再缓存插入操作,而是将其转换为直接的同步表全量同步操作,实现查询建表数据实时同步,以解决查询建表数据实时同步占用过多内存或磁盘资源的问题。
[0006]本专利技术采用如下技术方案:
[0007]第一方面,本专利技术提供了一种查询建表数据实时同步方法,包括:
[0008]源端从日志流中捕获解析到查询建表操作的插入操作后,继续捕获解析所述查询建表操作相应的系统表操作,缓存所述系统表操作;
[0009]源端捕获解析到查询建表操作的提交操作后,根据已缓存的系统表操作,逆向还原出同步表表结构的字典信息,根据所述字典信息生成同步表的离线字典文件;
[0010]源端从数据库抽取所述同步表的全量同步信息,将所述全量同步信息发送至目标端,以便于所述目标端根据所述全量同步信息生成相应的同步表;
[0011]源端捕获解析所述同步表的增量操作,根据所述离线字典文件和所述增量操作生成增量同步消息,将所述增量同步消息发送目标端,以便于所述增量同步消息更新相应的同步表。
[0012]进一步地,所述源端从日志流中捕获解析到查询建表操作的插入操作前,若源端从日志流中捕获到系统表操作后继续捕获到同步表的插入操作,则识别所述系统表操作和所述插入操作为查询建表操作,且在解析到第一个所述插入操作后,设置所述第一标记,用于在内存中记录是否已识别查询建表操作;其中,所述系统表操作为所述查询建表操作所对应的系统表的增量操作;
[0013]源端继续解析后续的插入操作,若所述插入操作对应的第一标记已设置,则丢弃所述插入操作。
[0014]进一步地,设置发送开始标记,用于通知目标端此时源端已开始发送所述全量同步信息;设置发送结束标记,用于通知目标端此时源端已完成发送所述全量同步信息;
[0015]所述源端从数据库抽取所述同步表的全量同步信息,将所述全量同步信息发送至目标端,以便于所述目标端根据所述全量同步信息生成相应的同步表包括:
[0016]生成所述离线字典文件后,将所述发送开始标记发送至目标端;
[0017]将所述发送开始标记发送至目标端后,从数据库抽取所述全量同步信息;
[0018]设置起始SCN,所述起始SCN的值为从数据库抽取所述全量同步信息前的SCN值,以便于目标端判断是否丢弃所述增量同步消息,将所述起始SCN发送目标端;
[0019]从数据库抽取所述全量同步信息后,将所述全量同步信息发送至目标端;
[0020]将所述全量同步信息发送至目标端后,将所述发送结束标记发送至目标端。
[0021]进一步地,所述源端捕获解析所述同步表的增量操作,根据所述离线字典文件和所述增量操作生成增量同步消息,将所述增量同步消息发送目标端包括:
[0022]捕获解析所述增量操作,判断所述增量操作的操作类型;
[0023]若所述增量操作为DDL操作,则根据所述增量操作更新所述离线字典文件,根据所述增量操作生成增量同步消息;
[0024]若所述增量操作为DML操作,则根据所述离线字典文件和所述增量操作生成增量同步消息;
[0025]将所述增量同步消息发送目标端,以便于所述目标端根据所述增量同步消息更新所述同步表;
[0026]捕获解析到所述增量操作对应的提交操作后,设置提交SCN,所述提交SCN的值为所述提交操作对应的SCN值,根据所述提交操作和所述提交SCN生成提交消息,将所述提交消息发送目标端。
[0027]进一步地,所述查询建表数据实时同步方法还包括:
[0028]源端初次启动时,在本地创建DDL事务目录;
[0029]识别所述系统表操作和所述插入操作为查询建表操作后,在所述DDL事务目录下创建相应的DDL事务文件,用于保存未完成同步的查询建表操作;
[0030]将所述查询建表操作的事务ID写入所述DDL事务文件;
[0031]在所述DDL事务文件中设置第二标记,用于在本地记录是否已识别查询建表操作;
[0032]源端重启或故障恢复时,扫描所述DDL事务目录,若读取到相应事务ID的DDL事务
文件后,读取到相应第二标记,则在内存中设置所述第一标记;加载相应事务ID的查询建表操作至内存,继续完成查询建表数据实时同步;
[0033]将所述全量同步信息发送至目标端后,删除对应的DDL事务文件。
[0034]第二方面,本专利技术还提供了一种查询建表数据实时同步方法,包括:
[0035]目标端接收来自于源端的同步表的全量同步信息,根据所述全量同步信息生成相应的SQL语句,执行所述SQL语句,得到相应的同步表;其中,所述全量同步信息为源端从数据库中抽取得到的;
[0036]目标端接收来自于源端的增量同步消息,根据所述增量同步消息生成相应的SQL语句,执行所述SQL语句,更新所述同步表;其中,所述增量同步消息为源端根据离线字典文件和增量操作生成的。
[0037]进一步地,目标端创建全量同步分本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种查询建表数据实时同步方法,其特征在于,所述查询建表数据实时同步方法包括:源端从日志流中捕获解析到查询建表操作的插入操作后,继续捕获解析所述查询建表操作相应的系统表操作,缓存所述系统表操作;源端捕获解析到查询建表操作的提交操作后,根据已缓存的系统表操作,逆向还原出同步表表结构的字典信息,根据所述字典信息生成同步表的离线字典文件;源端从数据库抽取所述同步表的全量同步信息,将所述全量同步信息发送至目标端,以便于所述目标端根据所述全量同步信息生成相应的同步表;源端捕获解析所述同步表的增量操作,根据所述离线字典文件和所述增量操作生成增量同步消息,将所述增量同步消息发送目标端,以便于所述增量同步消息更新相应的同步表。2.根据权利要求1所述的查询建表数据实时同步方法,其特征在于,所述源端从日志流中捕获解析到查询建表操作的插入操作前,若源端从日志流中捕获到系统表操作后继续捕获到同步表的插入操作,则识别所述系统表操作和所述插入操作为查询建表操作,且在解析到第一个所述插入操作后,设置所述第一标记,用于在内存中记录是否已识别查询建表操作;其中,所述系统表操作为所述查询建表操作所对应的系统表的增量操作;源端继续解析后续的插入操作,若所述插入操作对应的第一标记已设置,则丢弃所述插入操作。3.根据权利要求1所述的查询建表数据实时同步方法,其特征在于,设置发送开始标记,用于通知目标端此时源端已开始发送所述全量同步信息;设置发送结束标记,用于通知目标端此时源端已完成发送所述全量同步信息;所述源端从数据库抽取所述同步表的全量同步信息,将所述全量同步信息发送至目标端,以便于所述目标端根据所述全量同步信息生成相应的同步表包括:生成所述离线字典文件后,将所述发送开始标记发送至目标端;将所述发送开始标记发送至目标端后,从数据库抽取所述全量同步信息;设置起始SCN,所述起始SCN的值为从数据库抽取所述全量同步信息前的SCN值,以便于目标端判断是否丢弃所述增量同步消息,将所述起始SCN发送目标端;从数据库抽取所述全量同步信息后,将所述全量同步信息发送至目标端;将所述全量同步信息发送至目标端后,将所述发送结束标记发送至目标端。4.根据权利要求3所述的查询建表数据实时同步方法,其特征在于,所述源端捕获解析所述同步表的增量操作,根据所述离线字典文件和所述增量操作生成增量同步消息,将所述增量同步消息发送目标端包括:捕获解析所述增量操作,判断所述增量操作的操作类型;若所述增量操作为DDL操作,则根据所述增量操作更新所述离线字典文件,根据所述增量操作生成增量同步消息;若所述增量操作为DML操作,则根据所述离线字典文件和所述增量操作生成增量同步消息;将所述增量同步消息发送目标端,以便于所述目标端根据所述增量同步消息更新所述同步表;
捕获解析到所述增量操作对应的提交操作后,设置提交SCN,所述提交SCN的值为所述提交操作对应的SCN值,根据所述提交操作和所述提交SCN生成提交消息,将所述提交消息发送目标端。5.根据权利要求2所述的查询建表数据实时同步方法,其特征在于,所述查询建表数据实时同步方法还包括:源端初次启动时,在本地创建DDL事务目录;识别所述系统表操作和所述插入操作为查询建表操作后,在所述DDL事务目录下创建相应的DDL事务文件,用于保存未完成同步的查询建表操作;将所述查询建表操作的事务ID写入所述DDL事务文件;在所述DDL事务文件中设置第二标记,用于在本地记录是否已识别查询建表操作;...

【专利技术属性】
技术研发人员:皮宇孙峰赵家威刘启春
申请(专利权)人:武汉达梦数据库股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1