CN111221907B - 一种基于日志解析的数据库添加列同步方法和装置 - Google Patents

一种基于日志解析的数据库添加列同步方法和装置 Download PDF

Info

Publication number
CN111221907B
CN111221907B CN201911413264.9A CN201911413264A CN111221907B CN 111221907 B CN111221907 B CN 111221907B CN 201911413264 A CN201911413264 A CN 201911413264A CN 111221907 B CN111221907 B CN 111221907B
Authority
CN
China
Prior art keywords
database
log
column
synchronization
destination
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
Application number
CN201911413264.9A
Other languages
English (en)
Other versions
CN111221907A (zh
Inventor
孙峰
彭青松
余院兰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuhan Dream Database Co ltd
Original Assignee
Wuhan Dream Database Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Wuhan Dream Database Co Ltd filed Critical Wuhan Dream Database Co Ltd
Priority to CN201911413264.9A priority Critical patent/CN111221907B/zh
Publication of CN111221907A publication Critical patent/CN111221907A/zh
Application granted granted Critical
Publication of CN111221907B publication Critical patent/CN111221907B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • G06F16/275Synchronous replication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Computational Linguistics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及数据库技术领域,提供了一种基于日志解析的数据库添加列同步方法和装置。方法包括当收集到对应所述DDL事务的日志内容为用户表INSERT操作时,判断DDL事务为添加列的操作,根据添加列操作所属表的列信息,构造一个建表操作发送到目的端;构造一个查询插入操作发送到目标端同步服务执行,把目的端数据库相应原表中的数据复制到目的端数据库的新建表中;源端数据库同步系统继续捕获日志,直到捕获到提交日志时,所述源端数据库的同步系统通知目的端数据库的同步系统添加原表,完成所述DDL事务同步。本发明基本上可以保证源和目的数据库几乎在同一时刻对表进行添加列的操作。

Description

一种基于日志解析的数据库添加列同步方法和装置
【技术领域】
本发明涉及数据库技术领域,特别是涉及一种基于日志解析的数据库添加列同步方法和装置。
【背景技术】
在基于日志解析架构的数据库实时同步系统(支持异构)中,表修改的添加列操作同步往往会拖慢同步的性能。主要是在实际的应用系统中有些表的数据量过于庞大,如果在这种记录数很大的表上对表结构进行修改,比如添加某个列,会造成数据库对表的重构,由于这些表记录数庞大,数据库在重构时会消耗大量的时间并且产生大量的数据库日志。
传统的同步方法源端日志解析服务需要捕获到源端数据库表修改操作的提交日志以后再开始解析并同步该表修改操作,并在捕获到该操作提交日志之前,该操作产生的大量日志都要进行收集并缓存,缓存操作会产生大量的IO从而影响源端数据库的性能,并且表修改操作发送到目的端,目的端的数据库在执行该修改操作时,也同样需要消耗大量的时间才能完成,期间数据同步服务在同步该表的后续操作时,只能等待目的端数据库完成表修改以后才能进行,造成很大的同步延时。
例如对源端数据库拥有1亿行记录的A表添加1个列,该操作大约需要在源端数据库执行花费约60分钟,该操作同步到目的库也同样至少要花费60分钟才能完成,那么就会造成数据同步至少延迟60分钟。
在搭建主备同步的环境中,目的端数据库往往是用作查询库来分担主库的压力,表在添加列时,针对该表的查询操作将被阻塞,目的端数据库长时间的表修改操作会影响到应用的查询功能,如何缩短大表修改操作同步延时并且减少同步对目的端数据库上应用程序的影响就成为业界亟待解决的技术问题。
【发明内容】
本发明要解决的技术问题是在搭建主备同步的环境中,目的端数据库往往是用作查询库来分担主库的压力,表在添加列时,针对该表的查询操作将被阻塞,目的端数据库长时间的表修改操作会影响到应用的查询功能,如何缩短大表修改操作同步延时并且减少同步对目的端数据库上应用程序的影响就成为业界亟待解决的技术问题。
本发明进一步要解决的问题是例如采用系统时间作为添加列情况下,可能发生的直接通过表达式生成目的端数据库添加表默认值方式,会产生目的端数据库添加列中插入数据与源端数据库添加列不一致的问题。
本发明采用如下技术方案:
第一方面,本发明提供了一种基于日志解析的数据库添加列同步方法,包括:
源端数据库的同步系统判断日志中待同步的操作为DDL事务,则根据该事务号收集后续属于所述DDL事务的日志;
当收集到对应所述DDL事务的日志内容为用户表INSERT操作时,判断DDL事务为添加列的操作,根据添加列操作所属表的列信息,构造一个建表操作发送到目的端同步系统执行;其中,所述建表操作包括建立新建表的表名和原表名之间的映射关系,新建表的列信息参照对应原表完成添加列操作后的列信息设置;
源端数据库的同步系统提取用户表INSERT操作中新列的值构造出常量为EXP_NEW,并根据收集的系统表操作日志还原出原始的添加列操作,并提取出对应常量的公式表达式为EXP_OLD;
构造一个查询插入操作发送到目的端同步服务执行,把目的端数据库相应原表中的数据复制到目的端数据库的新建表中;其中,查询插入操作中添加列的列值为常量EXP_NEW,相应添加列的定义为EXP_OLD;
源端数据库同步系统继续捕获日志,直到捕获到所述DDL事务的提交日志时,所述源端数据库的同步系统通知目的端数据库的同步系统删除原表,并将新建表的表名更换为目的端数据库中原表的表名,完成所述DDL事务同步。
优选的,所述源端数据库的同步系统判断日志中待同步的操作为DDL事务,则根据该事务号收集后续属于所述DDL事务的日志,还包括:
当首先收集到对应所述DDL事务的日志内容不是用户表INSERT操作,而是提交日志时,判断DDL事务为添加列的操作,则向目的端同步系统发送添加列操作。
优选的,目的端数据库的同步系统在接收到源端数据库的同步系统的添加列操作后,直接在目的端数据库上对新建表执行添加列操作,完成所述DDL事务同步。
优选的,目的端数据库在所述DDL事务同步前,若接收到查询请求,所述方法还包括:
所述目的端数据库的原表被锁定,从而处于不可被访问状态;其中,在完成所述DDL事务同步后,通过所述替换原表的新建表完成所述查询请求。
优选的,所述源端数据库同步系统继续捕获日志,还包括:
当捕获到所述DDL事务的回滚日志时,所述源端数据库的同步系统构造删除目的端新建表的操作,并发送到目的端执行,完成所述DDL事务同步。
优选的,目的端在完成所述DDL事务同步前,若接收到查询请求,则方法还包括:
目的端数据库提供所述原表作为查询请求的被查询对象,其中,所述查询请求过程并不影响所述原表数据向新建表中复制的过程。
优选的,所述当收集到对应所述DDL事务的日志内容为用户表INSERT操作时,判断DDL事务是否为添加列的操作,具体包括:
针对DDL事务,源端数据库会生成系统表的日志,然后生成对应普通表的日志;
在收集完系统表的日志以后,通过系统表日志反推所述DDL事务所属操作;
其中,收集完系统表的日志的条件是:产生DDL事务的提交或回滚消息,和/或,对应所述DDL事务的普通表的日志产生。
优选的,所述数据库包括Oracle和/或达梦数据库。
优选的,在所述方法中在源端数据库及目的端数据库部署同步系统,源端数据库同步系统从源端数据库读取日志,而目的端数据库同步系统则是负责把源端发过来的同步操作应用到目的端数据库。
第二方面,本发明还提供了一种基于日志解析的数据库添加列同步装置,用于实现第一方面所述的基于日志解析的数据库添加列同步方法,所述装置包括:
至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述处理器执行,用于执行第一方面所述的基于日志解析的数据库添加列同步方法。
第三方面,本发明还提供了一种非易失性计算机存储介质,所述计算机存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行,用于完成第一方面所述的基于日志解析的数据库添加列同步方法。
本发明通过捕捉对应DDL事务的用户表操作日志,作为触发目的端进行新建表操作的依据,进一步的在捕获到事务的提交日志或者回滚日志,才进行目的端数据库的原表添加,以及所述新建表名替换成所述被删掉的原表,从而基本上可以保证源和目的数据库几乎在同一时刻对表进行添加列的操作,并且目的端在添加列时,采用的是保留原表创建新表的方式来进行,原表的查询操作不受添加列操作同步的影响,这样即缩短了添加列操作同步造成的延时又减轻了添加列操作同步对目的端应用的影响。
在本发明实现过程中,进一步将添加列的操作分为了源端数据库已经完成的添加的参数,在本发明中被描述为常量EXP_NEW,以及源端用于求取该常量EXP_NEW的公式表达式EXP_OLD,从而保证在目的端进行数据同步的时候,可以分常量EXP_NEW的添加和定义内容利用公式表达式EXP_OLD赋值的方式,避免了现有技术中直接在目的端采用公式表达式EXP_OLD计算添加列中各参数值可能造成的不可预知的错误问题。
【附图说明】
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种基于日志解析的数据库添加列同步方法流程示意图;
图2是本发明实施例提供的情况更复杂的一种基于日志解析的数据库添加列同步方法流程示意图;
图3是本发明实施例提供的情况还复杂的一种基于日志解析的数据库添加列同步方法流程示意图;
图4是本发明实施例提供的分析出DDL事务所属操作的方法流程图;
图5是本发明实施例提供的另一种基于日志解析的数据库添加列同步方法流程示意图;
图6是本发明实施例提供的在SQL场景中一种基于日志解析的数据库添加列同步方法流程示意图;
图7是本发明实施例提供的一种基于日志解析的数据库添加列同步装置结构示意图。
【具体实施方式】
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
在本发明的描述中,术语“内”、“外”、“纵向”、“横向”、“上”、“下”、“顶”、“底”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明而不是要求本发明必须以特定的方位构造和操作,因此不应当理解为对本发明的限制。
此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
实施例1:
本发明实施例1提供了一种基于日志解析的数据库添加列同步方法,述数据库包括Oracle和/或达梦数据库中,本发明实施例在源端数据库及目的端数据库部署同步系统,源端数据库同步系统从源端数据库读取日志,而目的端数据库同步系统则是负责把源端发过来的同步操作应用到目的端数据库。如图1所示,包括:
在步骤201中,源端数据库的同步系统判断日志中待同步的操作为DDL事务,则根据该事务号收集后续属于所述DDL事务的日志。
针对DDL事务,源端数据库会生成系统表的日志,然后生成对应普通表的日志;而在本发明实施例的步骤201中主要指代的是搜集系统表的日志。
在步骤202中,当收集到对应所述DDL事务的日志内容为用户表INSERT操作时(当表处于修改状态时,例如本发明实施例中的添加列,该表在数据库内部是锁定的,其它事务不能对该表进行操作,只有当DDL完成后,该表才能被其它事务访问,而所述INSERT操作便为分界岭,在INSERT操作之前属于DDL操作),判断DDL事务为添加列的操作,根据添加列操作所属表的列信息,构造一个建表操作发送到目的端同步系统执行;其中,所述建表操作包括建立新建表的表名和原表名之间的映射关系,新建表的列信息参照对应原表完成添加列操作后的列信息设置。
在现有技术中,通常是在源端数据库完成了添加列操作之后,才会向目的端数据库发送现有的添加列操作,这也是背景技术中所分析的“该操作大约需要在源端数据库执行花费约60分钟,该操作同步到目的库也同样至少要花费60分钟才能完成,那么就会造成数据同步至少延迟60分钟”的原因。而在本发明实施例中,不同的是,一旦通过日志收集到是添加列操作(此时,对于源端来说也才刚开始添加列的操作过程),便向目的端数据库的同步系统发送构造一个建表操作,这里实际上是将背景技术中举例的延迟60分钟(来自源端数据库执行花费约60分钟)执行的操作,提前准备着完成。
本发明实施例的上述步骤改进的实际意义在于,具体应用中,一旦添加列操作在源端数据库被执行后,除了各别因为宕机、网络中断等原因外,99%以上概率都会被正常完成。因为有这样的稳定完成的客观因素在,从而实现上述的“当收集到对应所述DDL事务的日志内容为用户表INSERT操作时,判断DDL事务为添加列的操作,根据添加列操作所属表的列信息,构造一个建表操作发送到目的端同步系统执行”成为了一种有效的、可行的操作方式,从而成为最后能够取得“基本上可以保证源和目的数据库几乎在同一时刻对表进行添加列的操作”的根本所在。
在步骤203中,源端数据库的同步系统提取用户表INSERT操作中新列的值构造出常量为EXP_NEW,并根据收集的系统表操作日志还原出原始的添加列操作,并提取出对应常量的公式表达式为EXP_OLD。
这是考虑到,类似源端数据库其添加列的方式,是以公式表达式实现,例如:公式表达式的一种表现形式是,取数据库当前时间进行添加列赋值。这样的话,若直接将所述公式表达式连同同步操作发送给目的端数据库同步系统,则可能造成目的端添加数据时,采用自身的系统时间添加,从而发生与源端数据库数据不一致的问题。本发明实施例,通过对上述特性的拆分,有效的克服上述问题的发生。
在步骤204中,构造一个查询插入操作发送到目的端同步服务执行,把目的端数据库相应原表中的数据复制到目的端数据库的新建表中;其中,查询插入操作中添加列的列值为常量EXP_NEW,相应添加列的定义为EXP_OLD。
需要强调的是,步骤204的操作并不会如现有技术一般,将目的端数据库中的原表进行锁定操作,因此,在执行步骤204的同时,针对所述原表的查询操作也可以正常进行。由于源端数据库和目的端数据库之间的同步操作,是由两边的同步系统进行的,所述同步系统相对于数据库自身而言,是独立的层面,可以理解为同步系统是向数据库发送指定DML操作的控制主体,因此,才有了上述本发明实施例所提出的改进步骤的实现空间。
在步骤205中,源端数据库同步系统继续捕获日志,直到捕获到所述DDL事务的提交日志时,所述源端数据库的同步系统通知目的端数据库的同步系统删除本地的原表,并将新建表的表名更换为目的端数据库中原表的表名,完成所述DDL事务同步。
其中,目的端在完成所述DDL事务同步前,若接收到查询请求,则方法还包括:目的端数据库提供所述原表作为查询请求的被查询对象,其中,所述查询请求过程并不影响所述原表数据向新建表中复制的过程。
本发明实施例通过捕捉对应DDL事务的用户表操作日志,作为触发目的端进行新建表操作的依据,进一步的在捕获到事务的提交日志或者回滚日志,才进行目的端数据库的原表添加,以及所述新建表名替换成所述被删掉的原表,从而基本上可以保证源和目的数据库几乎在同一时刻对表进行添加列的操作,并且目的端在添加列时,采用的是保留原表创建新表的方式来进行,原表的查询操作不受添加列操作同步的影响,这样即缩短了添加列操作同步造成的延时又减轻了添加列操作同步对目的端应用的影响。
在本发明实施例实现过程中,进一步将添加列的操作分为了源端数据库已经完成的添加的参数,在本发明中被描述为常量EXP_NEW,以及源端用于求取该常量EXP_NEW的公式表达式EXP_OLD,从而保证在目的端进行数据同步的时候,可以分常量EXP_NEW的添加和定义内容利用公式表达式EXP_OLD赋值的方式,避免了现有技术中直接在目的端采用公式表达式EXP_OLD计算添加列中各参数值可能造成的不可预知的错误问题。
如图2所示,在执行完步骤201中的所述源端数据库的同步系统判断日志中待同步的操作为DDL事务,则根据该事务号收集后续属于所述DDL事务的日志后,除了可能遇到上述步骤202中情况外,还可能遇到另一种情况,具体的:
在步骤206中,当首先收集到对应所述DDL事务的日志内容不是用户表INSERT操作,而是提交日志时,判断DDL事务为添加列的操作,则向目的端同步系统发送添加列操作。此处,考虑到若首先收集到并非步骤202中的INSERT操作,而是上述步骤206中的提交日志,则可以认定此时需要被执行添加列操作的原表是一个空表,此时使用现有常规机制也不会存在背景技术中所描述的延时存在,因为空表的建立在现有数据库机制下也是很快能够完成的,而此时使用本发明实施例所提出的步骤203-205方法过程,就显得有些冗余;因此,在此情况下,可以直接利用两边同步系统之间的添加列操作指令进行同步。
进一步从目的端数据库来看,在接收到上述步骤206来自源端数据库的添加列操作,目的端数据库的同步系统在接收到源端数据库的同步系统的添加列操作后,直接在目的端数据库上对新建表执行添加列操作,完成所述DDL事务同步。而在目的端数据库上,执行添加列操作过程包括:锁定目的端数据库的原表,创建一新建表的表名和原表名建立映射关系,新建表的列信息与对应原表完成添加列操作后的列信息保持一致,并在建立完所述新建表后添加目的端数据库的原表
在本发明实施例中,目的端数据库在完成所述DDL事务同步前,若接收到查询请求,所述方法还包括:
所述目的端数据库的原表被锁定,从而处于不可被访问状态;其中,在完成所述DDL事务同步后,通过所述替换原表的新建表完成所述查询请求。
如图3所示,所述源端数据库同步系统继续捕获日志,除了包括步骤204中所描述的提交日志外,还包括回滚日志的情况,具体的:
在步骤207中,当捕获到所述DDL事务的回滚日志时,所述源端数据库的同步系统构造删除目的端新建表的操作,并发送到目的端执行,完成所述DDL事务同步。
在本发明实施例中,所述当收集到对应所述DDL事务的日志内容为用户表INSERT操作时,判断DDL事务是否为添加列的操作,如图4所示,具体包括:
在步骤301中,针对DDL事务,源端数据库会生成系统表的日志,然后生成对应普通表的日志。
在步骤302中,在收集完系统表的日志以后,通过系统表日志反推所述DDL事务所属操作;例如在本发明实施例1中,通过用户表的INSERT操作日志反推出是添加列操作。这里的反推通常是通过例如实施例3所述的,通过对SYS.COL分析,来确定表中列的定义多了一列,从而确定是添加操作。
其中,收集完系统表的日志的条件是:产生DDL事务的提交或回滚消息,和/或,对应所述DDL事务的普通表的日志产生。
实施例2:
本发明实施例从一个较为完整的方法步骤过程阐述本发明实施例1的实现过程,相比较实施例1而言,本发明实施例的过程表现更为完善、也更为实例化。在本发明实施例中,在源端数据库及目的端数据库部署同步系统,源端数据库同步系统从源端数据库读取日志,而目的端数据库同步系统则是负责把源端发过来的同步操作应用到目的端数据库,如图5所示,包括以下步骤:
在步骤401中、源端数据库同步系统判断日志中的操作是否属于系统表操作,如果是则归类为DDL事务,获取该DDL操作的事务号,根据该事务号收集后续属于该事务的日志。
在步骤402中、当收集到上述DDL事务的提交日志时,则使用传统的方式同步该添加列。这里所描述的传统的方式,可以是各平台自身所提供的添加列同步机制,在此不多赘述。
在步骤403中、当收集到上述DDL事务相关的用户表INSERT操作日志时,则需要判断DDL事务中否为添加列的操作,如果是,则提取INSERT操作中新列的值构造出默认值常量表达式为EXP_NEW,然后根据前面收集的系统表操作日志还原出原始的添加列操作,并提取出原始的默认值表达式为EXP_OLD。
在步骤404中、根据添加列操作所属表的列信息,构造一个建表操作发送到目的端同步服务执行,要保证建表的表名A_BAK和原表名A不同名,但列信息和原表保持一致。
在步骤405中,构造一个查询插入操作发送到目的端同步服务执行,把A表中的数据复制到A_BAK表,并且,查询插入操作中添加列的列值为表达式EXP_NEW,相应添加列的定义为EXP_OLD。
在步骤406中、源端数据库同步系统继续捕获日志,后续属于上述添加列事务的DML日志都可以直接丢弃,直到捕获到该事务的提交或是回滚日志。
在步骤407中、当捕获到该添加列的回滚日志时,由于目的端已经执行了建表A_BAK操作,所以要构造删除表A_BAK的操作发送到目的端执行,完成该事务同步。
在步骤408中、当捕获取该添加列的提交日志时,通知目的端同步服务对新建的表进行更名操作,目的端数据库同步系统删除本地原表A,然后把新表A_BAK更名为A,完成该事务同步。
上述方案运行时,基本上可以保证源和目的数据库几乎在同一时刻对表进行添加列的操作,并且目的端在添加列时,采用的是保留原表创建新表的方式来进行,原表的查询操作不受添加列操作同步的影响,这样即缩短了添加列操作同步造成的延时又减轻了添加列操作同步对目的端应用的影响。
实施例3:
本发明实施例以源端数据库为ORACLE时,将上述实施例2的方法内容进一步展开实例化阐述如下:
首先,源端数据库的所有对象信息,都存放在相关的系统字典表中(如SYS.OBJ$、SYS.COL$、SYS.ICOL$),以ORACLE为例,表的表定义存放在SYS.OBJ$系统表,列定义定放在SYS.COL$系统表。当ORACLE为表A添加一个带默认值的列C时,它会先在SYS.COL$系统表中插入一行列定义,同步服务就可以在日志中通过捕获SYS.COL$系统表的操作获取到C列的定义信息;数据库在构造完A表的字典以后,便会对表A中记录的数据进行构造,它需要把添加列的默认值写到每行记录中去,这个操作会在日志中产生大量针对表A的INSERT日志,同步服务捕获取表A的插入操作时,便可以知道系统表的日志操作已经结束,可以根据前面收集到的系统表操作还原出原始添加列操作,并得到修改以后的表结构,获得添加列的默认值表达式EXP_OLD。然后根据分析事务中表A的INSERT日志,从插入列中提取到添加列的默认值常量表达式EXP_NEW。
其次,在新建表A_BAK时,新添加的列默认值需要直接指定为表达式EXP_OLD,但是在通过查询插入复制A表数据到A_BAK时,由于新添加的列在A表中并不存在,那么就需要在查询插入语句的查询项中为新添加的列指定常量表达式EXP_NEW,这样才能保证新建表中添加列的数据和源表一致。
举例如下:
源数据库现有表A(C INT),A拥有1行数据,在源端执行添加列操作
ALTER TABLE A ADD COL DATE DEFAULT SYSDATE;
同步过程如下:
在步骤501中,源端数据库同步系统收集该添加列的系统表操作日志。
在步骤502中,当在添加列的DDL事务中发现A的INSERT操作日志时,解析系统表的日志还原得到添加列的操作ALTER TABLE A ADD COL DATE DEFAULT SYSDATE。
在步骤503中,在A的INSERT日志中提取到COL列的新值,假如是:2019-10-01。
在步骤504中,源端数据库同步系统同步构造建表操作发给目的端数据库同步系统,新列COL的默认值需要使用源表中该列的默认值定义表达式SYSDATE,建表SQL为CREATETABLE A_BAK(C INT,COL DATE DEFAULT SYSDATE)。
在步骤505中,源端数据库同步系统同步构造查询插入的操作发送给目的端同步服务,以便把A表的数据复制到A_BAK,并且新列COL的值需要使用从源端数据库的INSERT中提取出来的常量值2019-10-01,查询插入的SQL为INSERT INTO A_BAK(C,COL)SELECT C,'2019-10-01'AS COL FROM A。
在步骤506中,如果源端数据库的添加列操作被回滚,则需要构造删除表的SQL发送到目的端执行,以便删除新建的表A_BAK,上述例子构造的SQL为DROP TABLE A_BAK。
在步骤507中,如果源端数据库添加列操作提交,则需要更名目的端数据库A_BAK为表A,所以需要先发送一个添加表操作来删除旧表A,添加表的SQL为DROP TABLE A,把表A_BAK更名为A,更名表的SQL为ALTER TABLE A_BAK RENAME TO A。
在步骤508中,完成同步。
本发明实施例通过捕捉对应DDL事务的用户表操作日志,作为触发目的端进行新建表操作的依据,进一步的在捕获到事务的提交日志或者回滚日志,才进行目的端数据库的原表添加,以及所述新建表名替换成所述被删掉的原表,从而基本上可以保证源和目的数据库几乎在同一时刻对表进行添加列的操作,并且目的端在添加列时,采用的是保留原表创建新表的方式来进行,原表的查询操作不受添加列操作同步的影响,这样即缩短了添加列操作同步造成的延时又减轻了添加列操作同步对目的端应用的影响。
在本发明实施例中,由于在目的端构建新表的过程都在源端数据库同步系统的管控之中,因此,允许其对目的端数据库新建表的默认值和默认值表达式进行自主定义,从而克服了现有技术中例如上述采用系统时间作为添加列情况下,可能发生的直接通过表达式生成目的端数据库添加表默认值方式,会产生添加列中插入数据与源端数据库添加列不一致的问题。
实施例4:
如图7所示,是本发明实施例的基于日志解析的数据库添加列同步装置的架构示意图。本实施例的基于日志解析的数据库添加列同步装置包括一个或多个处理器21以及存储器22。其中,图7中以一个处理器21为例。
处理器21和存储器22可以通过总线或者其他方式连接,图7中以通过总线连接为例。
存储器22作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序和非易失性计算机可执行程序,如实施例1中的基于日志解析的数据库添加列同步方法。处理器21通过运行存储在存储器22中的非易失性软件程序和指令,从而执行基于日志解析的数据库添加列同步方法。
存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器22可选包括相对于处理器21远程设置的存储器,这些远程存储器可以通过网络连接至处理器21。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
所述程序指令/模块存储在所述存储器22中,当被所述一个或者多个处理器21执行时,执行上述实施例1中的基于日志解析的数据库添加列同步方法,例如,执行以上描述的图1-图6所示的各个步骤。
值得说明的是,上述装置和系统内的模块、单元之间的信息交互、执行过程等内容,由于与本发明的处理方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取存储器(RAM,Random AccessMemory)、磁盘或光盘等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种基于日志解析的数据库添加列同步方法,其特征在于,包括:
源端数据库的同步系统判断日志中待同步的操作为DDL事务,则根据所述待同步的操作为DDL事务的事务号收集后续属于所述DDL事务的日志;
当收集到对应所述DDL事务的日志内容为用户表INSERT操作时,判断DDL事务为添加列的操作,根据添加列操作所属表的列信息,构造一个建表操作发送到目的端同步系统执行;其中,所述建表操作包括建立新建表的表名和原表名之间的映射关系,新建表的列信息参照对应原表完成添加列操作后的列信息设置;
源端数据库的同步系统提取用户表INSERT操作中新列的值构造出常量为EXP_NEW,并根据收集的系统表操作日志还原出原始的添加列操作,并提取出对应常量的公式表达式为EXP_OLD;
构造一个查询插入操作发送到目的端同步服务执行,把目的端数据库相应原表中的数据复制到目的端数据库的新建表中;其中,查询插入操作中添加列的列值为常量EXP_NEW,相应添加列的定义为EXP_OLD;
源端数据库同步系统继续捕获日志,直到捕获到所述DDL事务的提交日志时,所述源端数据库的同步系统通知目的端数据库的同步系统删除原表,并将新建表的表名更换为目的端数据库中原表的表名,完成所述DDL事务同步。
2.根据权利要求1所述的基于日志解析的数据库添加列同步方法,其特征在于,所述源端数据库的同步系统判断日志中待同步的操作为DDL事务,则根据所述待同步的操作为DDL事务的事务号收集后续属于所述DDL事务的日志,还包括:
当首先收集到对应所述DDL事务的日志内容不是用户表INSERT操作,而是提交日志时,判断DDL事务为添加列的操作,则向目的端同步系统发送添加列操作。
3.根据权利要求2所述的基于日志解析的数据库添加列同步方法,其特征在于,目的端数据库的同步系统在接收到源端数据库的同步系统的添加列操作后,直接在目的端数据库上对新建表执行添加列操作,完成所述DDL事务同步。
4.根据权利要求2所述的基于日志解析的数据库添加列同步方法,其特征在于,目的端数据库在所述DDL事务同步前,若接收到查询请求,所述方法还包括:
所述目的端数据库的原表被锁定,从而处于不可被访问状态;其中,在完成所述DDL事务同步后,通过替换原表的新建表完成所述查询请求。
5.根据权利要求1所述的基于日志解析的数据库添加列同步方法,其特征在于,所述源端数据库同步系统继续捕获日志,还包括:
当捕获到所述DDL事务的回滚日志时,所述源端数据库的同步系统构造删除目的端新建表的操作,并发送到目的端执行,完成所述DDL事务同步。
6.根据权利要求1所述的基于日志解析的数据库添加列同步方法,其特征在于,目的端在完成所述DDL事务同步前,若接收到查询请求,则方法还包括:
目的端数据库提供所述原表作为查询请求的被查询对象,其中,所述查询请求过程并不影响所述原表数据向新建表中复制的过程。
7.根据权利要求1-6任一所述的基于日志解析的数据库添加列同步方法,其特征在于,所述当收集到对应所述DDL事务的日志内容为用户表INSERT操作时,判断DDL事务是否为添加列的操作,具体包括:
针对DDL事务,源端数据库会生成系统表的日志,然后生成对应普通表的日志;
在收集完系统表的日志以后,通过系统表日志反推所述DDL事务所属操作;
其中,收集完系统表的日志的条件是:产生DDL事务的提交或回滚消息,和/或,对应所述DDL事务的普通表的日志产生。
8.根据权利要求1-6任一所述的基于日志解析的数据库添加列同步方法,其特征在于,所述数据库包括Oracle和/或达梦数据库。
9.根据权利要求1-6任一所述的基于日志解析的数据库添加列同步方法,其特征在于,在所述方法中在源端数据库及目的端数据库部署同步系统,源端数据库同步系统从源端数据库读取日志,而目的端数据库同步系统则是负责把源端发过来的同步操作应用到目的端数据库。
10.一种基于日志解析的数据库添加列同步装置,其特征在于,所述装置包括:
至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述处理器执行,用于执行权利要求1-9任一所述的基于日志解析的数据库添加列同步方法。
CN201911413264.9A 2019-12-31 2019-12-31 一种基于日志解析的数据库添加列同步方法和装置 Active CN111221907B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911413264.9A CN111221907B (zh) 2019-12-31 2019-12-31 一种基于日志解析的数据库添加列同步方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911413264.9A CN111221907B (zh) 2019-12-31 2019-12-31 一种基于日志解析的数据库添加列同步方法和装置

Publications (2)

Publication Number Publication Date
CN111221907A CN111221907A (zh) 2020-06-02
CN111221907B true CN111221907B (zh) 2021-03-30

Family

ID=70808175

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911413264.9A Active CN111221907B (zh) 2019-12-31 2019-12-31 一种基于日志解析的数据库添加列同步方法和装置

Country Status (1)

Country Link
CN (1) CN111221907B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111858503B (zh) * 2020-06-04 2023-03-28 武汉达梦数据库股份有限公司 一种基于日志解析同步的并行执行方法和数据同步系统
CN111858505B (zh) * 2020-06-04 2024-04-16 武汉达梦数据库股份有限公司 一种基于日志解析同步的并行执行方法和数据同步系统
CN112765180B (zh) * 2021-01-27 2023-01-17 上海英方软件股份有限公司 一种对db2数据库建表日志列名解析的方法及装置
CN115113989B (zh) * 2021-11-05 2023-05-26 腾讯科技(深圳)有限公司 事务执行方法、装置、计算设备及存储介质

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9405654B2 (en) * 2013-06-20 2016-08-02 Microsoft Technology Licensing, Llc Monitoring mobile application performance
CN105205053A (zh) * 2014-05-30 2015-12-30 阿里巴巴集团控股有限公司 一种数据库增量日志解析方法及系统
CN105005618A (zh) * 2015-07-21 2015-10-28 杭州合众数据技术有限公司 一种异构数据库之间的数据同步方法及系统
EP3416354B1 (en) * 2017-06-13 2020-07-15 Tritan Software International Method and apparatus for bi-directional communication and data replication between multiple locations during intermittent connectivity
CN109189852B (zh) * 2018-08-01 2021-05-28 武汉达梦数据库有限公司 一种数据同步的方法及用于数据同步的装置
CN109165263A (zh) * 2018-10-16 2019-01-08 农信银资金清算中心有限责任公司 数据库的日志分析处理方法及装置、ddl同步方法及装置
CN109558452B (zh) * 2018-11-19 2020-12-08 武汉达梦数据库有限公司 一种查询建表操作的同步方法

Also Published As

Publication number Publication date
CN111221907A (zh) 2020-06-02

Similar Documents

Publication Publication Date Title
CN111221907B (zh) 一种基于日志解析的数据库添加列同步方法和装置
CN111241094B (zh) 一种基于日志解析的数据库删除列同步方法和装置
CN109241185B (zh) 一种数据同步的方法以及数据同步装置
CN110262929B (zh) 一种保证复制事务一致性的方法以及相应的复制装置
US10430298B2 (en) Versatile in-memory database recovery using logical log records
US20160078044A1 (en) Main-memory database checkpointing
US20170192863A1 (en) System and method of failover recovery
US20150178329A1 (en) Multiple rid spaces in a delta-store-based database to support long running transactions
CN107515874B (zh) 一种分布式非关系型数据库中同步增量数据的方法与设备
US11886298B2 (en) Using a storage log to generate an incremental backup
CN103875229A (zh) 异步复制方法、装置与系统
CN111221909B (zh) 一种基于日志解析的数据库修改列同步方法和装置
CN111858501B (zh) 一种基于日志解析同步的日志读取方法和数据同步系统
CN111177159B (zh) 一种数据处理的系统、方法和数据更新设备
US20200034472A1 (en) Asynchronous cache coherency for mvcc based database systems
CN114741453A (zh) 数据同步的方法、系统及计算机可读存储介质
US10579604B2 (en) Database system, information processing device, method and medium
CN111241193B (zh) 一种基于日志解析的数据库添加列同步方法和装置
CN115309819A (zh) 数据处理方法、装置、系统、计算机设备和存储介质
US20200097581A1 (en) Systems and methods of managing manifest refresh in a database
US9020905B2 (en) Synchronizing database and non-database resources without a commit coordinator
US9563521B2 (en) Data transfers between cluster instances with delayed log file flush
CN111858504B (zh) 基于日志解析同步的操作合并执行方法和数据同步系统
US10572503B2 (en) Database system, information processing device, method and medium
CN108121514B (zh) 元信息更新方法、装置、计算设备及计算机存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information
CB02 Change of applicant information

Address after: 430000 16-19 / F, building C3, future technology building, 999 Gaoxin Avenue, Donghu New Technology Development Zone, Wuhan, Hubei Province

Applicant after: Wuhan dream database Co.,Ltd.

Address before: 430000 16-19 / F, building C3, future technology building, 999 Gaoxin Avenue, Donghu New Technology Development Zone, Wuhan, Hubei Province

Applicant before: WUHAN DAMENG DATABASE Co.,Ltd.

CB03 Change of inventor or designer information
CB03 Change of inventor or designer information

Inventor after: Sun Feng

Inventor after: Peng Qingsong

Inventor after: Yu Yuanlan

Inventor before: Fu Quan

Inventor before: Sun Feng

Inventor before: Peng Qingsong

Inventor before: Yu Yuanlan

GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20220908

Address after: 430073 16-19 / F, building C3, future science and technology building, 999 Gaoxin Avenue, Donghu New Technology Development Zone, Wuhan City, Hubei Province

Patentee after: Wuhan dream database Co.,Ltd.

Patentee after: HUAZHONG University OF SCIENCE AND TECHNOLOGY

Address before: 430000 16-19 / F, building C3, future technology building, 999 Gaoxin Avenue, Donghu New Technology Development Zone, Wuhan, Hubei Province

Patentee before: Wuhan dream database Co.,Ltd.

TR01 Transfer of patent right
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20230726

Address after: 16-19/F, Building C3, Future Science and Technology Building, No. 999 Gaoxin Avenue, Donghu New Technology Development Zone, Wuhan City, Hubei Province, 430206

Patentee after: Wuhan dream database Co.,Ltd.

Address before: 430073 16-19 / F, building C3, future science and technology building, 999 Gaoxin Avenue, Donghu New Technology Development Zone, Wuhan City, Hubei Province

Patentee before: Wuhan dream database Co.,Ltd.

Patentee before: HUAZHONG University OF SCIENCE AND TECHNOLOGY