CN112559626A - 一种基于日志解析的ddl操作的同步方法和同步系统 - Google Patents
一种基于日志解析的ddl操作的同步方法和同步系统 Download PDFInfo
- Publication number
- CN112559626A CN112559626A CN202011446484.4A CN202011446484A CN112559626A CN 112559626 A CN112559626 A CN 112559626A CN 202011446484 A CN202011446484 A CN 202011446484A CN 112559626 A CN112559626 A CN 112559626A
- Authority
- CN
- China
- Prior art keywords
- ddl
- synchronized
- target
- name
- log
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于日志解析的DDL操作的同步方法和同步系统,该同步方法包括:日志接收线程接收来自于源端的待同步操作,对待同步操作进行解析得到待同步操作所涉及的表ID,将涉及同一个表ID的待同步操作归属到同一个同步链路上;判断待同步操作的操作类型;若待同步操作为DDL操作,则获取DDL操作的操作信息,将操作信息添加到辅助表中;事务执行线程从同步链路中取出目标操作,并判断目标操作是否为重命名操作或新建表操作;若目标操作为重命名操作或新建表操作,则根据目标操作的操作信息构建查询语句,以在辅助表中查询是否存在与目标操作相冲突的DDL操作,从而根据冲突情况策略性进行DDL操作的同步。
Description
技术领域
本发明属于数据同步领域,更具体地,涉及一种基于日志解析的DDL操作的同步方法和同步系统。
背景技术
目前基于数据库日志分析的异构数据库复制技术应用广泛。这种技术在源端捕获出数据库的增量数据,然后发送到目的端,在目的端通过通用的数据库访问接口,将增量数据应用到目的端数据库,实现数据复制。这种技术因为使用到通用数据库接口,因此支持异构数据库系统复制,支持异构操作系统环境,并且目的端备机数据库系统可读写,是一种“双活”系统。
在这种基于日志解析的数据同步环境中,如果目的端采用分表同步的策略,即每个表的同步进度完全独立,那么这种场景下目的端针对表的DDL(Data DefinitionLanguage,简写为DDL)操作执行顺序的控制显得尤为重要。目前在分表同步的环境中,目的端一般采用表的ID作为KEY来分类,实现不同表之间的并行同步,不同表的操作使用各自操作中指定的表ID来归属到它对应的同步链路。由于表与表之间同步是并行的,在表没有DDL操作修改的前提下,各个链路之间的同步可以互不干涉。当源端数据库存在表的DDL操作时(例如:删表、建表或重命名),在这种场景下,表与表之间不能再简单的依靠表ID来分类,链路之间无干涉的并行同步,因为此时不同表ID的表名有可能是相同的,那么在目的端执行时,相冲突的表的DDL操作需要按照它在源端日志流中捕获的顺序来串行执行(以日志中事务提交的LSN大小为先后顺序),因此,在数据同步中目的端如何在按表分类同步的场景下执行有冲突的表的DDL操作,保证表DDL操作同步正确就成为业界亟待解决的重要技术问题。
发明内容
针对现有技术的以上缺陷或改进需求,本发明提供了一种基于日志解析的DDL操作的同步方法和同步系统,其目的在于目的端在执行表DDL操作时,先按照表ID进行分类,然后按照操作产生的先后顺序来执行相应的操作,在执行DDL操作时,使用表名、用户名和日志LSN进行冲突检测,根据冲突情况策略性进行DDL操作的同步,在避免在并行同步的过程中出现表名冲突的问题,保证同步的准确性,由此解决在数据同步中目的端在按表分类同步的场景下,如何保证表DDL操作同步正确的技术问题。
为实现上述目的,按照本发明的一个方面,提供了一种基于日志解析的DDL操作的同步方法,在源端数据库部署源端数据同步系统,在目的端数据库部署目的端数据同步系统,在所述目的端数据同步系统设置一个日志接收线程和一组事务执行线程,在所述目的端数据库创建辅助表,所述同步方法包括:
所述日志接收线程接收来自于源端的待同步操作,对所述待同步操作进行解析得到所述待同步操作所涉及的表ID,将涉及同一个表ID的所述待同步操作归属到同一个同步链路上;
判断所述待同步操作的操作类型;
若所述待同步操作为DDL操作,则获取所述DDL操作的操作信息,将所述操作信息添加到所述辅助表中,其中,所述操作信息包括用户名、表名、事务编号和日志LSN;
所述事务执行线程从同步链路中取出目标操作,并判断所述目标操作是否为重命名操作或新建表操作;
若所述目标操作为重命名操作或新建表操作,则根据所述目标操作的操作信息构建查询语句,以在所述辅助表中查询是否存在与所述目标操作相冲突的DDL操作,从而根据冲突情况策略性进行DDL操作的同步。
优选地,若所述目标操作为重命名操作或新建表操作,则根据所述目标操作的操作信息构建查询语句,以在所述辅助表中查询是否存在与所述目标操作相冲突的DDL操作,从而根据冲突情况策略性进行DDL操作的同步包括:
若所述目标操作为重命名操作或新建表操作,则根据所述目标操作的操作信息构建查询语句;
根据所述查询语句判断在所述辅助表中是否存在与所述目标操作的表名和用户名相同,且日志LSN比所述目标操作的日志LSN小的DDL操作;
若存在,则在所述辅助表中存在与所述目标操作相冲突的DDL操作,等待与所述目标操作相冲突的DDL操作执行完成后,再执行所述目标操作,或跳过本同步链路,对下一个同步链表中的操作进行同步。
优选地,根据所述查询语句判断在所述辅助表中是否存在与所述目标操作的表名和用户名相同,且日志LSN比所述目标操作的日志LSN小的DDL操作之后还包括:
若在所述辅助表中不存在与所述目标操作相冲突的DDL操作,则执行所述目标操作,并获取所述目标操作的事务编号;
基于所述目标操作的事务编号,将所述目标操作从所述辅助表中删除。
优选地,所述判断所述待同步操作的操作类型之后还包括:
若所述待同步操作为回滚操作,则获取被回滚的操作;
判断所述被回滚的操作的操作类型;
若所述被回滚的操作为DML操作,则在相应的同步链表中释放所述被回滚的操作。
优选地,判断所述被回滚的操作的操作类型之后还包括:
若所述被回滚的操作为DDL操作,则在相应的同步链表中释放被回滚的操作,且基于所述被回滚的操作的事务编号,将所述被回滚的操作从所述辅助表中删除。
优选地,所述判断所述待同步操作的操作类型之后还包括:
若所述待同步操作为提交操作,则根据所述提交操作的事务编号确定所述提交操作所属的事务,并对所述提交操作所属的事务进行标记,以便事务执行线程进行同步。
优选地,所述若所述待同步操作为DDL操作,则获取所述DDL操作的操作信息,将所述操作信息添加到所述辅助表中,其中,所述操作信息包括用户名、表名、事务编号和日志LSN包括:
若所述待同步操作为DDL操作,则判断所述待同步操作是否为重命名操作;
若所述待同步操作为重命名操作,则获取所述待同步操作的旧表名、新表名、用户名、事务编号和日志LSN;
将所述待同步操作的旧表名、用户名、事务编号和日志LSN作为一行添加到所述辅助表中;
将所述待同步操作的新表名、用户名、事务编号和日志LSN作为另一行添加到所述辅助表中。
优选地,所述同步方法还包括:
若所述目标操作为重命名操作,则获取所述目标操作的旧表名、新表名、用户名、事务编号和日志LSN;
以所述旧表名、用户名和日志LSN构建第一查询语句,以所述新表名、用户名和日志LSN构建第二查询语句;
分别基于所述第一查询语句和所述第二查询语句判断在所述辅助表中是否存在与所述目标操作相冲突的DDL操作;
若存在,则等待与所述目标操作相冲突的DDL操作执行完成后,再执行所述目标操作,或跳过本同步链路,对下一个同步链表中的操作进行同步。
优选地,所述同步方法还包括:
在构建查询语句的过程中,设置只返回一行查询结果。优选地,
按照本发明的另一方面,提供了一种同步系统,包括至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被程序设置为执行本发明所述的同步方法。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有如下有益效果:本发明提供一种基于日志解析的DDL操作的同步方法和同步系统,在源端数据库部署源端数据同步系统,在目的端数据库部署目的端数据同步系统,在所述目的端数据同步系统设置一个日志接收线程和一组事务执行线程,在所述目的端数据库创建辅助表,所述同步方法包括:所述日志接收线程接收来自于源端的待同步操作,对所述待同步操作进行解析得到所述待同步操作所涉及的表ID,将涉及同一个表ID的所述待同步操作归属到同一个同步链路上;判断所述待同步操作的操作类型;若所述待同步操作为DDL操作,则获取所述DDL操作的操作信息,将所述操作信息添加到所述辅助表中,其中,所述操作信息包括用户名、表名、事务编号和日志LSN;所述事务执行线程从同步链路中取出目标操作,并判断所述目标操作是否为重命名操作或新建表操作;若所述目标操作为重命名操作或新建表操作,则根据所述目标操作的操作信息构建查询语句,以在所述辅助表中查询是否存在与所述目标操作相冲突的DDL操作,从而根据冲突情况策略性进行DDL操作的同步。
本发明中,目的端在执行表DDL操作时,先按照表ID进行分类,然后按照操作产生的先后顺序来执行相应的操作。在这种同步策略下,按表ID进行分类以后每个同步链路的事务都会独立缓存,如果采用内存加缓存文件的方式来保存各个同步链路之间的冲突关系则会显著的增加功能实现的复杂度。本发明采用在目标端数据库创建辅助表的方式,在辅助表中登记接收到的DDL操作,然后在执行线程并行执行时,只需要通过使用表名、用户名和日志LSN构造简单的SQL查询语句便可以查询出是否存在冲突的DDL操作,然后根据冲突情况策略性进行DDL操作的同步,在避免在并行同步的过程中出现表名冲突的问题,保证同步的准确性。
附图说明
图1是本发明实施例提供的一种基于日志解析的DDL操作的同步方法的流程示意图;
图2是本发明实施例提供的日志接收线程的具体实现过程示意图;
图3是本发明实施例提供的事务执行线程的具体实现过程示意图;
图4是本发明实施例提供的一种同步系统的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
实施例1:
数据库系统中针对表的DDL操作有DROP、TRUNCATE、CREATE和ALTER四种,其中除了TRUNCATE操作不会更改表的名称以外,其它的DDL操作都有表名的变更操作,这些DDL操作在源端被捕获以后发到目的端:执行时不能仅仅依据表ID来判断这些DDL操作是否存在冲突。例如,在源端数据库上依次执行创建表T,删除表T,创建表T和删除表T。由于数据库在创建对像时对像的ID是保持递增的,所以这两个表T的表ID是不一样的,如果目的端使用ID来分类执行,那么这两个创建表的动作就会并行执行,造成表名突冲。
为了解决前述问题,本实施例提供一种基于日志解析的DDL操作的同步方法,首先对该同步方法所依赖的同步环境进行部署:在源端数据库部署源端数据同步系统,在目的端数据库部署目的端数据同步系统,在所述目的端数据同步系统设置一个日志接收线程和一组事务执行线程,在所述目的端数据库创建辅助表。
具体地,在源端数据库部署源端数据同步系统,在目的端数据库部署目的端数据同步系统,源端数据同步系统从源端数据库读取日志,而目的端数据同步系统则是负责把源端发过来的同步操作应用到目的端数据库。
目的端数据同步系统启动后需要初始化一个日志接收线程和一组事务执行线程。日志接收线程负责接收和管理从源端数据同步系统发过来的事务;事务执行线程则负责事务的执行入库。
目的端数据同步系统还需要在目的端库创建一张辅助表,用来存贮DDL操作的操作信息。其中,辅助表的结构如下:
CREATE TABLE T(OBJNAME VARCHAR(100),SCHNAME VARCHAR(100),TRXIDBIGINT,LSN BIGINT);
其中,OBJNAME字段存放表DDL操作涉及的表名,SCHNAME字段存放表DDL操作涉及的用户名,TRXID字段存放表DDL操作的事务编号,LSN字段存放表DDL操作的日志LSN。
参阅图1,该同步方法包括如下步骤:
步骤101:所述日志接收线程接收来自于源端的待同步操作,对所述待同步操作进行解析得到所述待同步操作所涉及的表ID,将涉及同一个表ID的所述待同步操作归属到同一个同步链路上。
在本实施例中,日志接收线程在接收到源端的操作以后,按操作所涉及的表ID进行分类,其中,涉及相同表ID的操作归属到同一个同步链路上。其中,前述操作包括DDL操作和DML操作,针对于DDL操作,一个DDL操作即为一个事务,一个DDL操作具有一个事务编号;针对于DML操作,一个事务可以包含多个DML操作。其中,同步链路的实现方式,可以是一个或多个的文件缓存,也可以是其它形式的缓存。
在分类操作时,每个表ID都拥有一个完全独立的同步链路,相同表ID的操作都将归属于该同步链路,该同步链路上存放的事务顺序以事务的提交日志LSN先后顺序为准,采用这种方式,可以有效地保证同一个表的事务操作的执行顺序。当某个表产生多个DDL操作时,这些DDL操作的执行顺序就会被固定在该表ID的同步链路上,按提交LSN的大小先后顺序执行即可。
步骤102:判断所述待同步操作的操作类型。
其中,所述操作类型包括DML操作、提交操作、回滚操作和DDL操作。
结合图2,在本实施例中,若所述待同步操作为DDL操作,则执行步骤103。
若所述待同步操作为回滚操作,则获取被回滚的操作,判断所述被回滚的操作的操作类型,若所述被回滚的操作为DML操作,则在相应的同步链表中释放所述被回滚的操作;若所述被回滚的操作为DDL操作,则在相应的同步链表中释放被回滚的操作,且基于所述被回滚的操作的事务编号,将所述被回滚的操作从所述辅助表中删除。其中,在清理辅助表时,只需要按事务编号作为条件进行删除操作,假如当前的DDL操作编号为N,则执行:DELETE FROM T WHERE TXID=N;便可完成清理工作。
若所述待同步操作为提交操作,则根据所述提交操作的事务编号确定所述提交操作所属的事务,并对所述提交操作所属的事务进行标记,以便事务执行线程进行同步。
若所述待同步操作为为DML操作,则根据该DML操作所涉及的表ID,将该DML操作分配至相应的同步链路上。
步骤103:若所述待同步操作为DDL操作,则获取所述DDL操作的操作信息,将所述操作信息添加到所述辅助表中,其中,所述操作信息包括用户名、表名、事务编号和日志LSN。
在实际应用场景下,若DDL操作涉及到两个表名,则需要对DDL操作进行拆分,以表名作为主键将相应的操作信息插入到辅助表中。
具体地,若所述待同步操作为DDL操作,则判断所述待同步操作是否为重命名操作,若所述待同步操作为重命名操作,则获取所述待同步操作的旧表名、新表名、用户名、事务编号和日志LSN。
将所述待同步操作的旧表名、用户名、事务编号和日志LSN作为一行添加到所述辅助表中;将所述待同步操作的新表名、用户名、事务编号和日志LSN作为另一行添加到所述辅助表中。
即,如果DDL操作是表的重命名操作,在把表的旧名称插入到辅助表T以后,还需要把该表的新名称插入到辅助表T中。这是因为表的重命名操作涉及到了两个表名,需要分别对两个表名进行DDL操作的登记。
前述步骤101~步骤103主要描述了日志接收线程的工作机制,下面基于步骤104~105说明事务执行线程的工作机制。
步骤104:所述事务执行线程从同步链路中取出目标操作,并判断所述目标操作是否为重命名操作或新建表操作。
在本实施例中,结合图3,若目标操作为DML操作,则直接执行。
若所述目标操作为DDL操作,则进一步判断述目标操作是否为重命名操作或新建表操作,若不是重命名操作或新建表操作,则直接执行,例如,是TRUNCATE或是ALTER操作中的添加列、修改列或是删除列的DDL操作,则直接执行。
若所述目标操作为重命名操作或新建表操作,则执行步骤105。
步骤105:若所述目标操作为重命名操作或新建表操作,则根据所述目标操作的操作信息构建查询语句,以在所述辅助表中查询是否存在与所述目标操作相冲突的DDL操作,从而根据冲突情况策略性进行DDL操作的同步。
具体地,若所述目标操作为重命名操作或新建表操作,则根据所述目标操作的操作信息构建查询语句,根据所述查询语句判断在所述辅助表中是否存在表名和用户名相同,且日志LSN比所述目标操作小的DDL操作。
若存在,则在所述辅助表中存在与所述目标操作相冲突的DDL操作,等待与所述目标操作相冲突的DDL操作执行完成后,再执行所述目标操作,或跳过本同步链路,对下一个同步链表中的操作进行同步。
若在所述辅助表中不存在与所述目标操作相冲突的DDL操作,则执行所述目标操作,并获取所述目标操作的事务编号;基于所述目标操作的事务编号,将所述目标操作从所述辅助表中删除,防止影响后面的相同表名的DDL事务的执行。
假如当前DDL操作涉及的表名是T1,所属的用户为U1,当前操作的LSN为LSN1,那么在辅助表T中查询冲突的DDL操作时,使用语句:SELECT*FROM T WHERE OBJNAME='T1'ANDSCHNAME='U1'AND LSN<LSN1;如果查询到记录,说明有不同表ID,但是拥有相同名称的表的DDL操作还未执行,要等该操作执行完成以后才能执行当前DDL操作。
在优选的实施例中,为了提高查询语句返回结果的速度,检测时只需要知道有冲突事务,不需要知道全部冲突的事务即可,在构建查询语句的过程中,设置只返回一行查询结果,即,在查询条件中添加ROWNUM=1,查询语句具体为SELECT*FROM T WHERE OBJNAME='T1'AND SCHNAME='U1'AND LSN<LSN1 AND ROWNUM=1,可以在存在多个冲突DDL操作的场景下让查询语句快速的返回结果。
此外,针对重命名操作,需要对旧表名和新表名均进行冲突检测,具体实现方式为:
若所述目标操作为重命名操作,则获取所述目标操作的旧表名、新表名、用户名、事务编号和日志LSN;以所述旧表名、用户名和日志LSN构建第一查询语句,以所述新表名、用户名和日志LSN构建第二查询语句;分别基于所述第一查询语句和所述第二查询语句判断在所述辅助表中是否存在与所述目标操作相冲突的DDL操作;若存在,则等待与所述目标操作相冲突的DDL操作执行完成后,再执行所述目标操作,或跳过本同步链路,对下一个同步链表中的操作进行同步。
上述实施例的基本步骤,可以解释如下:
首先,目的端同步系统在同步表的操作时,因为表的复杂度或者操作的复杂度都会影响到该表的同步速度,所以每个表的同步速度是不同。而目的端数据库的资源是有限的,通过表ID来分类不同表的同步操作,每一个表配套有一个同步链路,可以有效的为每个表制定同步的优先级,确保优先级高的表能够优先的进行同步。但是,在存在DDL操作的同步环境中,这种分表的策略就需要解决不同表之间有可能存在因为表的名称相同而导致的DDL冲突问题。为了解决该问题,在目的端数据库构造辅助表的方式,把DDL操作登记在辅助表中,在执行之前通过表的名称在辅助表中查找操作LSN比自己小的DDL操作来判断是否存在冲突的事务,最后在执行完成以后再从辅助表中删除自身的DDL信息。这样就可以有效的解决不同表ID之间在表名相冲突时产生的DDL冲突的问题,保证冲突DDL操作的执行顺序。
其次,采用在目的端数据库建立辅助表的方式来管理DDL相对于采用内存链表等其它方式有着一个独特的优势。采用辅助表的方式不需要考虑DDL操作数量规模的问题,由于所有的DDL操作的信息都登记在辅助表中,就算DDL操作数量很多也并不占用目的端同步系统的内存资源,最重要的是还可以解决目的端同步系统故障以后的DDL同步信息恢复的问题,由于辅助表存放在目的端数据库中,当目的端同步系统异常重启以后,对于DDL冲突检测的执行环境不需要额外的恢复工作,直接按本发明的冲突检测步骤查询和操作辅助表就可以实现,大大减轻了功能实现的复杂度,提升可靠性。
本发明中,目的端在执行表DDL操作时,先按照表ID进行分类,然后按照操作产生的先后顺序来执行相应的操作。在这种同步策略下,按表ID进行分类以后每个同步链路的事务都会独立缓存,如果采用内存加缓存文件的方式来保存各个同步链路之间的冲突关系则会显著的增加功能实现的复杂度。本发明采用在目标端数据库创建辅助表的方式,在辅助表中登记接收到的DDL操作,然后在执行线程并行执行时,只需要通过使用表名、用户名和日志LSN构造简单的SQL查询语句便可以查询出是否存在冲突的DDL操作,然后根据冲突情况策略性进行DDL操作的同步,在避免在并行同步的过程中出现表名冲突的问题,保证同步的准确性。
实施例2:
为了便于理解前述方案,本实施例基于具体实例进行举例说明,举例如下:
源端数据库按照顺序执行下面操作:
CREATE TABLE U1.T1(C INT);
ALTER TABLE U1.T1 RENAME TO T2;
CREATE TABLE U1.T1(C INT);
上述串行执行的操作会在日志中生成三个DDL操作分别为TRX1、TRX2和TRX3,涉及到的表ID有两个,假设表T1的表ID为1,表T2的表ID为2,日志LSN从1开始记。
目的端日志接收线程依次接收三个DDL操作,在辅助表形成记录过程如下:
接收到第一个事务TRX1的DDL操作:建表操作CREATE TABLE T1(C INT),在辅助表中添加相应的操作信息,辅助表的数据结构如下表1:
OBJNAME | SCHNAME | TRXID | LSN |
T1 | U1 | TRX1 | 1 |
表1辅助表的数据结构
接收到第二个事务TRX2的DDL操作:重命名操作ALTER TABLE T1RENAME TO T2,
由于该DDL操作是表的RENAME操作,按规则辅助表需要同时登记新表名和旧表名,在辅助表中添加相应的操作信息,辅助表的数据结构如下表2:
OBJNAME | SCHNAME | TRXID | LSN |
T1 | U1 | TRX1 | 1 |
T1 | U1 | TRX2 | 2 |
T2 | U1 | TRX2 | 2 |
表2辅助表的数据结构
接收到第三个事务TRX3的DDL操作:建表操作CREATE TABLE T1(C INT),在辅助表中添加相应的操作信息,辅助表的数据结构如下表3:
OBJNAME | SCHNAME | TRXID | LSN |
T1 | U1 | TRX1 | 1 |
T1 | U1 | TRX2 | 2 |
T2 | U1 | TRX2 | 2 |
T1 | U1 | TRX3 | 3 |
表3辅助表的数据结构
上述日志接收完成以后,形成了两个同步链路,分别是表ID为1的同步链路和表ID为2的同步链路。其中,表ID为1的同步链路上顺序存放了TRX1和TRX2两个事务,表ID为2的同步链路上存放TRX3一个事务。
执行过程如下:
假如有两个事务执行线程被配给上述两个同步链路。
两个执行线程执行过程如下:
从上面两个执行线程的执行流程中可以看到,EXEC1和EXEC2分别负责表ID为1和2的同步链路的事务执行,假如表ID为1和2的两个表之间不存在名称上的冲突,那么这两个同步链路可以互不干涉的并行运行,但是在存在名称上的冲突时,采用辅助表来检测的方式可以有效的串行两组相冲突的同步链路,防止同步顺序的混乱。
实施例3:
请参阅图4,图4是本发明实施例提供的一种同步系统的结构示意图。本实施例的同步系统包括一个或多个处理器41以及存储器42。其中,图4中以一个处理器41为例。
处理器41和存储器42可以通过总线或者其他方式连接,图4中以通过总线连接为例。
存储器42作为一种基于同步方法的非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,上述实施例的方法以及对应的程序指令。处理器41通过运行存储在存储器42中的非易失性软件程序、指令以及模块,从而执行各种功能应用以及数据处理,实现前述实施例的方法。
其中,存储器42可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器42可选包括相对于处理器41远程设置的存储器,这些远程存储器可以通过网络连接至处理器41。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
值得说明的是,上述装置和系统内的模块、单元之间的信息交互、执行过程等内容,由于与本发明的处理方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(Read Only Memory,简写为ROM)、随机存取存储器(Random AccessMemory,简写为RAM)、磁盘或光盘等。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于日志解析的DDL操作的同步方法,其特征在于,在源端数据库部署源端数据同步系统,在目的端数据库部署目的端数据同步系统,在所述目的端数据同步系统设置一个日志接收线程和一组事务执行线程,在所述目的端数据库创建辅助表,所述同步方法包括:
所述日志接收线程接收来自于源端的待同步操作,对所述待同步操作进行解析得到所述待同步操作所涉及的表ID,将涉及同一个表ID的所述待同步操作归属到同一个同步链路上;
判断所述待同步操作的操作类型;
若所述待同步操作为DDL操作,则获取所述DDL操作的操作信息,将所述操作信息添加到所述辅助表中,其中,所述操作信息包括用户名、表名、事务编号和日志LSN;
所述事务执行线程从同步链路中取出目标操作,并判断所述目标操作是否为重命名操作或新建表操作;
若所述目标操作为重命名操作或新建表操作,则根据所述目标操作的操作信息构建查询语句,以在所述辅助表中查询是否存在与所述目标操作相冲突的DDL操作,从而根据冲突情况策略性进行DDL操作的同步。
2.根据权利要求1所述的同步方法,其特征在于,若所述目标操作为重命名操作或新建表操作,则根据所述目标操作的操作信息构建查询语句,以在所述辅助表中查询是否存在与所述目标操作相冲突的DDL操作,从而根据冲突情况策略性进行DDL操作的同步包括:
若所述目标操作为重命名操作或新建表操作,则根据所述目标操作的操作信息构建查询语句;
根据所述查询语句判断在所述辅助表中是否存在与所述目标操作的表名和用户名相同,且日志LSN比所述目标操作的日志LSN小的DDL操作;
若存在,则在所述辅助表中存在与所述目标操作相冲突的DDL操作,等待与所述目标操作相冲突的DDL操作执行完成后,再执行所述目标操作,或跳过本同步链路,对下一个同步链表中的操作进行同步。
3.根据权利要求2所述的同步方法,其特征在于,根据所述查询语句判断在所述辅助表中是否存在与所述目标操作的表名和用户名相同,且日志LSN比所述目标操作的日志LSN小的DDL操作之后还包括:
若在所述辅助表中不存在与所述目标操作相冲突的DDL操作,则执行所述目标操作,并获取所述目标操作的事务编号;
基于所述目标操作的事务编号,将所述目标操作从所述辅助表中删除。
4.根据权利要求1所述的同步方法,其特征在于,所述判断所述待同步操作的操作类型之后还包括:
若所述待同步操作为回滚操作,则获取被回滚的操作;
判断所述被回滚的操作的操作类型;
若所述被回滚的操作为DML操作,则在相应的同步链表中释放所述被回滚的操作。
5.根据权利要求4所述的同步方法,其特征在于,判断所述被回滚的操作的操作类型之后还包括:
若所述被回滚的操作为DDL操作,则在相应的同步链表中释放被回滚的操作,且基于所述被回滚的操作的事务编号,将所述被回滚的操作从所述辅助表中删除。
6.根据权利要求1所述的同步方法,其特征在于,所述判断所述待同步操作的操作类型之后还包括:
若所述待同步操作为提交操作,则根据所述提交操作的事务编号确定所述提交操作所属的事务,并对所述提交操作所属的事务进行标记,以便事务执行线程进行同步。
7.根据权利要求1所述的同步方法,其特征在于,所述若所述待同步操作为DDL操作,则获取所述DDL操作的操作信息,将所述操作信息添加到所述辅助表中,其中,所述操作信息包括用户名、表名、事务编号和日志LSN包括:
若所述待同步操作为DDL操作,则判断所述待同步操作是否为重命名操作;
若所述待同步操作为重命名操作,则获取所述待同步操作的旧表名、新表名、用户名、事务编号和日志LSN;
将所述待同步操作的旧表名、用户名、事务编号和日志LSN作为一行添加到所述辅助表中;
将所述待同步操作的新表名、用户名、事务编号和日志LSN作为另一行添加到所述辅助表中。
8.根据权利要求7所述的同步方法,其特征在于,所述同步方法还包括:
若所述目标操作为重命名操作,则获取所述目标操作的旧表名、新表名、用户名、事务编号和日志LSN;
以所述旧表名、用户名和日志LSN构建第一查询语句,以所述新表名、用户名和日志LSN构建第二查询语句;
分别基于所述第一查询语句和所述第二查询语句判断在所述辅助表中是否存在与所述目标操作相冲突的DDL操作;
若存在,则等待与所述目标操作相冲突的DDL操作执行完成后,再执行所述目标操作,或跳过本同步链路,对下一个同步链表中的操作进行同步。
9.根据权利要求1所述的同步方法,其特征在于,所述同步方法还包括:
在构建查询语句的过程中,设置只返回一行查询结果。
10.一种同步系统,其特征在于,包括至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被程序设置为执行如权利要求1~9任一项所述的同步方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011446484.4A CN112559626B (zh) | 2020-12-11 | 2020-12-11 | 一种基于日志解析的ddl操作的同步方法和同步系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011446484.4A CN112559626B (zh) | 2020-12-11 | 2020-12-11 | 一种基于日志解析的ddl操作的同步方法和同步系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112559626A true CN112559626A (zh) | 2021-03-26 |
CN112559626B CN112559626B (zh) | 2022-06-21 |
Family
ID=75061430
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011446484.4A Active CN112559626B (zh) | 2020-12-11 | 2020-12-11 | 一种基于日志解析的ddl操作的同步方法和同步系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112559626B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115113989A (zh) * | 2021-11-05 | 2022-09-27 | 腾讯科技(深圳)有限公司 | 事务执行方法、装置、计算设备及存储介质 |
CN115994191A (zh) * | 2023-03-24 | 2023-04-21 | 北京极数云舟科技有限公司 | 基于物理复制的ddl执行数据同步方法及装置 |
CN117520458A (zh) * | 2023-12-08 | 2024-02-06 | 北京优炫软件股份有限公司 | 一种基于数据库日志解析的并行增量同步系统 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140304229A1 (en) * | 2012-12-31 | 2014-10-09 | Sybase, Inc. | Continuous Change Data Capture Without Disruption of DDL |
US20180081956A1 (en) * | 2013-11-04 | 2018-03-22 | Guangdong Electronics Industry Institute Ltd. | Method for automatically synchronizing multi-source heterogeneous data resources |
CN109508346A (zh) * | 2018-10-19 | 2019-03-22 | 武汉达梦数据库有限公司 | 一种ddl操作的级联同步控制方法及系统 |
CN109558452A (zh) * | 2018-11-19 | 2019-04-02 | 武汉达梦数据库有限公司 | 一种查询建表操作的同步方法 |
CN111241094A (zh) * | 2019-12-31 | 2020-06-05 | 武汉达梦数据库有限公司 | 一种基于日志解析的数据库删除列同步方法和装置 |
CN111694799A (zh) * | 2020-04-30 | 2020-09-22 | 武汉达梦数据库有限公司 | 基于日志解析同步的并行日志解析方法和数据同步系统 |
CN111930828A (zh) * | 2020-05-29 | 2020-11-13 | 武汉达梦数据库有限公司 | 一种基于日志解析的数据同步方法和数据同步系统 |
-
2020
- 2020-12-11 CN CN202011446484.4A patent/CN112559626B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140304229A1 (en) * | 2012-12-31 | 2014-10-09 | Sybase, Inc. | Continuous Change Data Capture Without Disruption of DDL |
US20180081956A1 (en) * | 2013-11-04 | 2018-03-22 | Guangdong Electronics Industry Institute Ltd. | Method for automatically synchronizing multi-source heterogeneous data resources |
CN109508346A (zh) * | 2018-10-19 | 2019-03-22 | 武汉达梦数据库有限公司 | 一种ddl操作的级联同步控制方法及系统 |
CN109558452A (zh) * | 2018-11-19 | 2019-04-02 | 武汉达梦数据库有限公司 | 一种查询建表操作的同步方法 |
CN111241094A (zh) * | 2019-12-31 | 2020-06-05 | 武汉达梦数据库有限公司 | 一种基于日志解析的数据库删除列同步方法和装置 |
CN111694799A (zh) * | 2020-04-30 | 2020-09-22 | 武汉达梦数据库有限公司 | 基于日志解析同步的并行日志解析方法和数据同步系统 |
CN111930828A (zh) * | 2020-05-29 | 2020-11-13 | 武汉达梦数据库有限公司 | 一种基于日志解析的数据同步方法和数据同步系统 |
Non-Patent Citations (1)
Title |
---|
宋芳利: "基于日志解析的数据库海量数据同步系统的研究与实现", 《中国优秀硕士学位论文全文数据库》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115113989A (zh) * | 2021-11-05 | 2022-09-27 | 腾讯科技(深圳)有限公司 | 事务执行方法、装置、计算设备及存储介质 |
CN115994191A (zh) * | 2023-03-24 | 2023-04-21 | 北京极数云舟科技有限公司 | 基于物理复制的ddl执行数据同步方法及装置 |
CN117520458A (zh) * | 2023-12-08 | 2024-02-06 | 北京优炫软件股份有限公司 | 一种基于数据库日志解析的并行增量同步系统 |
Also Published As
Publication number | Publication date |
---|---|
CN112559626B (zh) | 2022-06-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112559626B (zh) | 一种基于日志解析的ddl操作的同步方法和同步系统 | |
CN109460349B (zh) | 一种基于日志的测试用例生成方法和装置 | |
US20210209092A1 (en) | Client-driven commit of distributed write transactions in a database environment | |
US7912819B2 (en) | Systems and methods for versioning based triggers | |
US7606838B2 (en) | Distributed conflict resolution for replicated databases | |
US8352425B2 (en) | Parallel apply processing in data replication with preservation of transaction integrity and source ordering of dependent updates | |
Jung et al. | Serializable snapshot isolation for replicated databases in high-update scenarios | |
Li et al. | Time constrained continuous subgraph search over streaming graphs | |
CN111858501B (zh) | 一种基于日志解析同步的日志读取方法和数据同步系统 | |
CN111241094B (zh) | 一种基于日志解析的数据库删除列同步方法和装置 | |
CN111694893B (zh) | 一种基于日志解析的部分回滚解析方法和数据同步系统 | |
CN111858503B (zh) | 一种基于日志解析同步的并行执行方法和数据同步系统 | |
CN111858504B (zh) | 基于日志解析同步的操作合并执行方法和数据同步系统 | |
CN111930692B (zh) | 一种基于日志解析同步的事务合并执行方法及装置 | |
US11620287B2 (en) | Framework for providing intermediate aggregation operators in a query plan | |
CN111221909B (zh) | 一种基于日志解析的数据库修改列同步方法和装置 | |
WO2023124242A1 (zh) | 事务执行方法、装置、设备和存储介质 | |
CN112035222A (zh) | 一种基于日志解析同步的事务操作合并执行方法及装置 | |
JP2001282599A (ja) | データ管理方法および装置並びにデータ管理プログラムを格納した記録媒体 | |
CN115422286A (zh) | 一种分布式数据库的数据同步方法及设备 | |
CN104821907B (zh) | 一种电子邮件处理方法 | |
CN111930693B (zh) | 一种基于日志解析同步的事务合并执行方法及装置 | |
CN110502535A (zh) | 数据访问方法、装置、设备和存储介质 | |
CN112307118B (zh) | 基于日志解析同步的保障数据一致性的方法和同步系统 | |
CN111858505B (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 | ||
CB03 | Change of inventor or designer information |
Inventor after: Sun Feng Inventor after: Peng Qingsong Inventor after: Yu Yuanlan Inventor before: Sun Feng Inventor before: Fu Quan Inventor before: Peng Qingsong Inventor before: Yu Yuanlan |
|
CB03 | Change of inventor or designer information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |