数据传输方法、架构、装置及存储介质与流程

文档序号:32655341发布日期:2022-12-23 21:22阅读:69来源:国知局
数据传输方法、架构、装置及存储介质与流程

1.本技术涉及数据处理领域,尤其涉及一种数据传输方法、架构、装置及存储介质。


背景技术:

2.增量迁移是指将源数据库产生的增量数据,实时同步到目标数据库。在增量迁移过程中,如果遇到迁移任务异常中断,则需要开启断点续传机制,以实现迁移任务的继续稳定运行。
3.目前,dts(data transmission service,数据传输服务)中常用的断点续传方式为:采用写入端各线程应用点位的最小值作为断点位置,也即迁移任务重载的起点。这里,应用点位指遇到迁移任务异常中断之前,最后一次向目标数据库成功执行的增量数据在源数据库日志中的位置。例如,假设写入端有两个线程并行向目标数据库执行数据库操作,并假设其中一个线程的应用点位为10,另一个线程的应用点位为8,按照上述描述,则将8确定为迁移任务重载的起点。
4.然而,上述描述的断点续传方式仅适用于源数据库日志为binlog日志的场景下,在源数据库日志为redo日志的场景下,应用上述断点续传方式,容易出现丢失数据现象。


技术实现要素:

5.为了解决上述技术问题或者至少部分地解决上述技术问题,本技术提供了一种数据传输方法、架构、装置及存储介质。
6.第一方面,本技术提供了一种数据传输方法,所述方法包括:
7.从源数据库的日志中读取操作记录,所述日志包括对所述源数据库执行的多个数据库操作的操作记录;
8.将读取到的,满足设定条件的目标操作记录的逻辑时间号存入设定的缓存区,并对目标数据库执行所述目标操作记录对应的数据库操作;所述设定条件指操作记录对应的数据库操作正常完成,所述逻辑时间号表征所述操作记录对应的数据库操作的执行顺序;
9.在确定对所述目标数据库成功执行所述目标操作记录对应的数据库操作时,将所述目标操作记录对应的逻辑时间号从所述缓存区中删除;
10.当确定进行断点续传时,根据所述缓存区中表征的执行顺序最早的逻辑时间号,从所述日志中确定断点位置,以及从所述日志中的所述断点位置处开始读取操作记录,并执行所述从源数据库的日志中读取操作记录后的全部操作。
11.在一可能的实施方式中,所述将读取到的,满足设定条件的目标操作记录的逻辑时间号存入设定的缓存区,包括:
12.确定当前读取到的所述操作记录对应的操作类型;
13.若所述操作类型为ddl操作或dml操作,则将当前读取到的所述操作记录的逻辑时间号存入设定的缓存区;
14.若所述操作类型为数据库事务回滚操作,则将当前数据库事务对应的全部操作记
录的逻辑时间号从所述缓存区中删除,所述当前数据库事务为当前读取到的所述操作记录所属的数据库事务。
15.在一可能的实施方式中,所述方法还包括:
16.若当前读取到的所述操作记录对应的操作类型为ddl操作或dml操作,则记录当前读取到的所述操作记录的物理时间号以及所述物理时间号的出现次数n,所述物理时间号表征所述操作记录对应的数据库操作的执行顺序;
17.确定当前读取到的所述操作记录的所述逻辑时间号,具体包括:
18.比较当前读取到的所述操作记录的物理时间号与已记录的,前一次读取到的所述操作记录的物理时间号是否一致;
19.若不一致,则根据当前读取到的所述操作记录的物理时间号,确定一个键值对作为当前读取到的所述操作记录的逻辑时间号,所述逻辑时间号中的键和值均为所述物理时间号;
20.若一致,则根据当前读取到的所述操作记录的物理时间号和已记录的,前一次读取到的所述操作记录对应的所述n,确定一个键值对作为当前读取到的所述操作记录的逻辑时间号,所述逻辑时间号中的键为所述n与1之和,值为所述物理时间号。
21.在一可能的实施方式中,所述根据所述缓存区中,表征的执行顺序最早的逻辑时间号从所述日志中确定断点位置,包括:
22.将所述缓存区中的逻辑时间号中,最小的值确定为目标物理时间号;
23.将所述日志中,具有所述目标物理时间号的操作记录确定为断点位置。
24.在一可能的实施方式中,所述确定进行数据断点续传,包括:
25.在确定到达设定的续传周期时,确定进行数据断点续传。
26.在一可能的实施方式中,所述源数据库为oracle数据库,所述日志为redo日志。
27.第二方面,本技术提供了一种数据传输架构,所述架构包括读源端、写入端、第一消息队列,所述读源端上设有缓存区;
28.所述读源端,从源数据库的日志中读取操作记录,所述日志包括对所述源数据库执行的多个数据库操作的操作记录;
29.所述读源端,还将读取到的,满足设定条件的目标操作记录的逻辑时间号存入设定的缓存区,所述设定条件指操作记录对应的数据库操作正常完成,所述逻辑时间号表征所述操作记录对应的数据库操作的执行顺序;
30.所述写入端,对目标数据库执行所述目标操作记录对应的数据库操作;
31.所述写入端,还在确定对所述目标数据库成功执行所述目标操作记录对应的数据库操作时,将所述目标操作记录的逻辑时间号存入所述第一消息队列;
32.所述读源端,还将所述第一消息队列中存入的所述逻辑时间号从所述缓存区中删除;
33.所述读源端,还在确定进行断点续传时,根据所述缓存区中表征的执行顺序最早的逻辑时间号,从所述日志中确定断点位置,以及从所述日志中的所述断点位置处开始读取操作记录,并执行所述从源数据库的日志中读取操作记录后的全部操作。
34.在一可能的实施方式中,所述写入端,开启多个线程对目标数据库执行所述目标操作记录对应的数据库操作。
35.第三方面,本技术提供了一种数据传输装置,所述装置包括:
36.读取模块,用于从源数据库的日志中读取操作记录,所述日志包括对所述源数据库执行的多个数据库操作的操作记录;
37.缓存模块,用于将读取到的,满足设定条件的目标操作记录的逻辑时间号存入设定的缓存区;所述设定条件指操作记录对应的数据库操作正常完成,所述逻辑时间号表征所述操作记录对应的数据库操作的执行顺序;
38.同步模块,用于对目标数据库执行所述目标操作记录对应的数据库操作;
39.删除模块,用于在确定对所述目标数据库成功执行所述目标操作记录对应的数据库操作时,将所述目标操作记录对应的逻辑时间号从所述缓存区中删除;
40.断点续传模块,用于当确定进行断点续传时,根据所述缓存区中表征的执行顺序最早的逻辑时间号,从所述日志中确定断点位置,以及从所述日志中的所述断点位置处开始读取操作记录,并执行所述从源数据库的日志中读取操作记录后的全部操作。
41.第四方面,本技术提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
42.存储器,用于存放计算机程序;
43.处理器,用于执行存储器上所存放的程序时,实现第一方面任一项所述的数据传输方法的步骤。
44.第五方面,本技术提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面任一项所述的数据传输方法的步骤。
45.本技术实施例提供的上述技术方案与现有技术相比具有如下优点:
46.本技术实施例提供的技术方案,通过从源数据库的日志中读取操作记录,将读取到的,满足设定条件的目标操作记录的逻辑时间号存入设定的缓存区,并对目标数据库执行目标操作记录对应的数据库操作,设定条件指操作记录对应的数据库操作正常完成,逻辑时间号表征操作记录对应的数据库操作的执行顺序;在确定对目标数据库成功执行目标操作记录对应的数据库操作时,将目标操作记录对应的逻辑时间号从缓存区中删除,由此可以实现上述缓存区中最终存储的是源数据库一侧正常完成,且未能够在目标数据库一侧成功执行的数据库操作的逻辑时间号,也即未同步成功的数据库操作的逻辑时间号,进而当确定进行断点续传时,能够根据缓存区中的逻辑时间号,从日志中确定断点位置,也即确定迁移重载任务的起点;进一步地,由于根据缓存区中表征的执行顺序最早的逻辑时间号从日志中确定断点位置,因此能够有效避免数据丢失,以及在源数据库的日志为redo日志的场景下,也能够有效避免数据丢失。
附图说明
47.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
48.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
49.图1为本技术实施例提供的一种数据传输方法的流程示意图;
50.图2为本技术实施例提供的一种数据传输架构的示意图;
51.图3为本技术实施例提供的另一种数据传输方法的流程示意图;
52.图4为本技术实施例提供的一种数据传输装置的示意图;
53.图5为本技术实施例提供的一种电子设备的结构示意图。
具体实施方式
54.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本技术的一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本技术保护的范围。
55.在一个例子中,假设在执行数据库事务a的开始操作(以下描述为数据库操作a1)与数据库事务a的提交操作(以下描述为数据库操作a3)的时间间隔内,先后执行了数据库事务a的ddl操作或dml操作(以下描述为数据库操作a2)、数据库事务b(包括数据库事务b的开始操作b1、ddl操作或dml操作b2、提交操作b3)、以及数据库事务c(包括数据库事务c的开始操作c1、ddl操作或dml操作c2、提交操作c3)。
56.在该例子中,由于binlog日志是按照数据库事务提交顺序记录数据库操作的,因此,binlog日志中顺次记录的是b1、b2、b3、c1、c2、c3、a1、a2、a3。
57.假设在增量迁移过程中,dts的写入端有两个线程(以下描述为线程1、线程2)并行向目标数据库执行数据库操作,并假设在线程1向目标数据库执行数据库操作a2时,线程2向目标数据库执行数据库操作c2时,迁移任务中断。按照现有技术中的断点续传方式,由于线程2的应用点位c1小于线程1的应用点位a1,因此,将线程2的应用点位c1确定为迁移任务重载的起点,也即,在断点续传时,从c1处开始续传。由此可见,在源数据库日志为binlog日志的场景下,应用现有技术中的断点续传方式,并不会造成数据库事务a的数据库操作丢失。
58.在该例子中,由于redo日志是完全按照执行顺序记录数据库操作的,因此,redo日志中顺次记录的是a1、a2、b1、b2、b3、c1、c2、c3、a3。
59.假设在增量迁移过程中,dts的写入端有两个线程(以下描述为线程1、线程2)并行向目标数据库执行数据库操作,并假设在线程1向目标数据库执行数据库操作b2时,线程2向目标数据库执行数据库操作c2时,迁移任务中断。按照现有技术中的断点续传方式,由于线程1的应用点位b1小于线程2的应用点位c1,因此,将线程1的应用点位b1确定为迁移任务重载的起点,也即,在断点续传时,从b1处开始续传。
60.然而,在redo日志中,b1之前还有数据库事务a的数据库操作a1、a2,由此可见,若以b1作为迁移任务重载的起点,将导致数据库事务a的部分数据库操作丢失。
61.为解决在源数据库日志为redo日志的场景下,应用现有技术中的断点续传方式容易导致丢失数据的问题,本技术实施例提供一种数据传输方法。
62.下面则结合具体实施例对本技术实施例提供的数据传输方法做进一步的解释说明,实施例并不构成对本技术技术方案的限定。
63.图1为本技术实施例提供的一种数据传输方法的流程示意图。如图1所示,包括以下步骤:
64.步骤101、从源数据库的日志中读取操作记录,日志包括对源数据库执行的多个数据库操作的操作记录。
65.作为一示例性应用场景,上述源数据库为oracle数据库,对应的,上述日志为redo日志。在该示例性应用场景下,源数据库的日志中包括对源数据库执行的多个数据库操作的操作记录,且多个数据库操作的操作记录是按照执行顺序依次排列的,这也意味着,不论是提交的数据库事务,还是回滚的数据库事务,数据库事务所包含的数据库操作序列(包含多个数据库操作)均被记录在源数据库的日志中。
66.作为一个实施例,可从源数据库的日志中顺次读取操作记录,且每次读取一条操作记录。
67.步骤102、将读取到的,满足设定条件的目标操作记录的逻辑时间号存入设定的缓存区,并对目标数据库执行目标操作记录对应的数据库操作。
68.上述设定条件指操作记录对应的数据库操作正常完成。这里,正常完成是指数据库操作所属数据库事务最终被提交。需要注意的是,数据库事务是用户定义的一个数据库操作序列,具有原子性,所谓的原子性是指:数据库事务是一个不可分割的工作单位,其中的数据库操作要么全执行,要么全不执行,因此,若数据库事务被提交,则意味着该数据库事务所包含的全部数据库操作均正常完成。对应的,若数据库事务被回滚,则意味着该数据库事务所包含的全部数据库操作均被撤回,也即未正常完成。
69.进一步的,由于目标操作记录对应的数据库操作正常完成,也即意味着对源数据库成功执行了目标操作记录对应的数据库操作,而为了实现数据迁移,可对目标数据库执行与源数据库相同的数据库操作,因此,本步骤102中,对目标数据库执行目标操作记录对应的数据库操作。
70.再进一步的,结合上述描述,正常完成是指数据库操作所属数据库事务最终被提交,因此,在本技术实施例中,从源数据库的日志中顺次读取操作记录,每读取到一条操作记录,则确定当前读取到的操作记录对应的操作类型,若操作类型为数据库事务开始操作、ddl(data definition language,数据库定义语言)操作、dml(data manipulation language,数据操纵语言)操作,或者数据库事务回滚操作,则继续读取下一条操作记录,若操作类型为数据库事务提交操作,则将当前数据库事务包含的全部数据库操作确定为满足设定条件的目标操作记录,然后对目标数据库执行目标操作记录对应的数据库操作。这里,当前数据库事务指当前读取到的操作记录对应的数据库操作所属的数据库事务。
71.上述逻辑时间号表征操作记录对应的数据库操作的执行顺序。具体的,在实践中,redo日志中的每一条操作记录对应一个时间号(以下称物理时间号),该物理时间号能够表征操作记录对应的数据库操作的执行顺序,也即,通过物理时间号,能够区别数据库操作执行的先后顺序。然而,在实践中,有可能存在多个数据库操作同时执行的情况,在该种情况下,多个数据库操作则对应同一个物理时间号,由此可见,仅通过物理时间号,并无法区别同时执行的多个数据库操作。
72.基于此,本技术实施例中引入逻辑时间号的概念,以通过逻辑时间号表征操作记录对应的数据库操作的执行顺序,且在多个数据库操作同时执行的情况下,也能够通过逻辑时间号区别同时执行的多个数据库操作。至于是如何确定操作记录的逻辑时间号的,在下文中图3所示实施例中具有详细说明,这里先不详述。
73.由步骤102的描述可见,在本技术实施例中,首先将读取到的,对应的数据库操作正常完成的目标操作记录的逻辑时间号存入设定的缓存区,此时,缓存区中存储的是源数据库一侧正常完成的数据库操作的逻辑时间号。
74.作为一个实施例,可通过以下过程实现将读取到的,对应的数据库操作正常完成的目标操作记录的逻辑时间号存入设定的缓存区:从源数据库的日志中顺次读取操作记录,每读取到一条操作记录,则确定当前读取到的操作记录对应的操作类型,若操作类型为数据库事务开始操作,继续读取下一条操作记录;若操作类型为ddl操作或dml操作,则将当前读取到的操作记录的逻辑时间号存入设定的缓存区,并继续读取下一条操作记录;若操作类型为数据库事务提交操作,继续读取下一条操作记录;若操作类型为数据库事务回滚操作,结合上述描述,数据库事务回滚意味着数据库事务包含的全部数据库操作未正常完成,此时,则可将当前数据库事务对应的全部操作记录的逻辑时间号从缓存区中删除。这里,当前数据库事务指当前读取到的操作记录对应的数据库操作所属的数据库事务。
75.步骤103、在确定对目标数据库成功执行目标操作记录对应的数据库操作时,将目标操作记录对应的逻辑时间号从缓存区中删除。
76.可以理解的时,通过执行步骤103,在确定对目标数据库成功执行目标操作记录对应的数据库操作时,将目标操作记录对应的逻辑时间号从缓存区中删除,可以使得缓存区中最终存储源数据库一侧正常完成,且未能够在目标数据库一侧成功执行的数据库操作的逻辑时间号。
77.步骤104、当确定进行断点续传时,根据缓存区中表征的执行顺序最早的逻辑时间号,从日志中确定断点位置,以及从日志中的断点位置处开始读取操作记录,并返回执行步骤102。
78.在实践中,源数据库一侧正常完成,且未能够在目标数据库一侧成功执行的数据库操作恰恰是需要再次对目标数据库执行的数据库操作,并且,为了避免数据丢失,当确定进行断点续传时,可根据缓存区中表征的执行顺序最早的逻辑时间号,从日志中确定断点位置,进而从日志中的断点位置处开始读取操作记录,返回执行步骤102,从而实现断点续传。
79.本技术实施例提供的技术方案,通过从源数据库的日志中读取操作记录,将读取到的,满足设定条件的目标操作记录的逻辑时间号存入设定的缓存区,并对目标数据库执行目标操作记录对应的数据库操作,设定条件指操作记录对应的数据库操作正常完成,逻辑时间号表征操作记录对应的数据库操作的执行顺序;在确定对目标数据库成功执行目标操作记录对应的数据库操作时,将目标操作记录对应的逻辑时间号从缓存区中删除,由此可以实现上述缓存区中最终存储的是源数据库一侧正常完成,且未能够在目标数据库一侧成功执行的数据库操作的逻辑时间号,也即未同步成功的数据库操作的逻辑时间号,进而当确定进行断点续传时,能够根据缓存区中的逻辑时间号,从日志中确定断点位置,也即确定迁移重载任务的起点;进一步地,由于根据缓存区中表征的执行顺序最早的逻辑时间号从日志中确定断点位置,因此能够有效避免数据丢失,以及在源数据库的日志为redo日志的场景下,也能够有效避免数据丢失。
80.图2为本技术实施例提供的一种数据传输架构的示意图。如图2所示,该数据传输架构主要由四部分组成:读源端21、写入端22、格式器23、第一消息队列24。
81.其中,读源端21,用于进行与源数据库相关的操作,例如连接源数据库、读取源数据库的日志等。
82.写入端22,用于进行与目标数据库相关的操作,例如连接目标数据库、向目标数据库执行数据库操作等。
83.格式器23,用于异构数据迁移场景下的格式转换,例如,oracle数据库与mysql数据库的数据类型并不相同,需要利用格式器对oracle数据库与mysql数据库之间需要同步的数据进行格式转换。
84.第一消息队列24,用于读源端和写入端之间的通信桥梁,这里,通信包括读源端将对源数据库成功执行的数据库操作发送给写入端。
85.此外,读源端21上还设有缓存区,用于存储对源数据库执行的数据库操作的逻辑时间号。
86.上述数据传输架构中还包括第二消息队列(图中未示出),该第二消息队列用于写入端将对目标数据库成功执行的数据库操作的逻辑时间号发送给读源端。
87.下面结合图3所示流程,对图2所示数据传输架构中,各部分的工作流程以及各部分之间的交互流程进行详细描述。如图3所示,包括以下步骤:
88.步骤301、读源端从源数据库的日志中读取操作记录。
89.本技术实施例中,读源端可从源数据库的日志中顺次读取操作记录,每读取到一条操作记录,则执行以下步骤。
90.步骤302、读源端确定当前读取到的操作记录对应的操作类型;若操作类型为数据库事务开始操作,则返回执行步骤301;若操作类型为ddl操作或dml操作,则执行步骤303;若操作类型为数据库事务提交操作,则执行步骤308;若操作类型为数据库事务回滚操作,则执行步骤310。
91.本技术实施例中,读源端每读取到一条操作记录,则确定当前读取到的操作记录对应的操作类型,根据操作类型的不同,做不同的处理。
92.其中,读源端在确定当前读取到的操作记录的操作类型为数据库事务开始操作时,由于不需要对目标数据库执行数据库事务开始操作,因此,不对当前读取到的操作记录做任何处理,继续从源数据库的日志中读取下一条操作记录。
93.读源端在确定当前读取到的操作记录的操作类型为ddl操作或dml操作时,可确定当前读取到的操作记录的逻辑时间号,并将当前读取到的操作记录的逻辑时间号存入缓存区,这一过程的详细描述参见下述步骤303至步骤307的描述。
94.读源端在确定当前读取到的操作记录的操作类型为数据库事务提交操作时,可确定源数据库已正常完成当前数据库事务包括的全部数据库操作,因此,读源端可将当前数据库事务包括的全部数据库操作发送至写入端,以使写入端对目标数据库执行该当前数据库事务包括的全部数据库操作,这里,当前数据库事务指当前读取到的操作记录对应的数据库操作所属数据库事务。这一过程的详细描述参见下述步骤308、步骤309,以及步骤311的描述。
95.读源端在确定当前读取到的操作记录的操作类型为数据库事务回滚操作时,可确定源数据库未正常完成当前数据库事务包括的全部数据库操作,因此,读源端可将当前数据库事务包括的全部数据库操作对应的逻辑时间号从上述缓存区中删除。这一过程的详细
描述参见下述步骤310的描述。
96.步骤303、读源端记录当前读取到的操作记录的物理时间号以及该物理时间号的出现次数n。
97.在实践中,若某一时刻仅执行了一个数据库操作,则该数据库操作对应的物理时间号的出现次数的取值只有一种情况,即1次,若某一时刻执行了多个数据库操作,则该多个数据库操作对应的物理时间号的出现次数的取值则有多种情况。例如,假设某一时刻执行了4个数据库操作,那么,读源端顺次读取该4个数据库操作的操作记录时,所记录的出现次数依次为1、2、3、4。
98.步骤304、读源端比较当前读取到的操作记录的物理时间号与已记录的,前一次读取到的操作记录的物理时间号是否一致,若不一致,则执行步骤305;若一致,则执行步骤306。
99.步骤305、读源端根据当前读取到的操作记录的物理时间号,确定一个键值对作为当前读取到的操作记录的逻辑时间号,该逻辑时间号中的键和值均为物理时间号;执行步骤307。
100.步骤306、读源端根据当前读取到的操作记录的物理时间号和已记录的,前一次读取到的操作记录对应的n确定一个键值对作为当前读取到的操作记录的逻辑时间号,该逻辑时间号中的键为n与1之和,值为物理时间号。
101.若当前读取到的操作记录的物理时间号与已记录的,前一次读取到的操作记录的物理时间号不一致,则意味着当前读取到的操作记录所对应的数据库操作,与前一次读取到的操作记录所对应的数据库操作并非是同时执行的,此时,通过物理时间号则可将不同时刻执行的数据库操作记录区别开,因此,若当前读取到的操作记录的物理时间号与已记录的,前一次读取到的操作记录的物理时间号不一致,可根据当前读取到的操作记录的物理时间号,确定一个键值对作为当前读取到的操作记录的逻辑时间号,其中,该逻辑时间号中的键和值均为物理时间号。
102.反之,若当前读取到的操作记录的物理时间号与已记录的,前一次读取到的操作记录的物理时间号一致,则意味着当前读取到的操作记录所对应的数据库操作,与前一次读取到的操作记录所对应的数据库操作是同时执行的,此时,仅通过物理时间号无法将不同时刻执行的数据库操作区别开,因此,若当前读取到的操作记录的物理时间号与已记录的,前一次读取到的操作记录的物理时间号一致,可根据当前读取到的操作记录的物理时间号和已记录的,前一次读取到的操作记录对应的n确定一个键值对作为当前读取到的操作记录的逻辑时间号,其中,该逻辑时间号中的键为n与1之和,值为物理时间号。
103.举例来说,假设某一时刻执行了4个数据库操作,那么,读源端顺次读取该4个数据库操作的操作记录时,所记录的出现次数依次为1、2、3、4,所确定出的逻辑时间号依次为【1】-t、【2】-t、【3】-t、【4】-t,其中,t为物理时间号。需要说明的是,默认的出现次数为0,如此,读源端在读取4个数据库操作中,首个数据库操作的操作记录时,根据该操作记录的物理时间号和出现次数的默认值0确定一个键值对作为该操作记录的逻辑时间号,其中,该逻辑时间号的键为0与1之和,即为1。
104.由此可见,在当前读取到的操作记录的物理时间号与已记录的,前一次读取到的操作记录的物理时间号一致的情况下,两条操作记录的逻辑时间号也是不同的,从而,通过
逻辑时间号能够将同时执行的数据库操作区别开。
105.步骤307、读源端将当前读取到的操作记录的逻辑时间号存入设定的缓存区,执行步骤314。
106.步骤308、读源端将当前数据库事务包含的全部数据库操作的操作记录和对应的逻辑时间号发送至格式器。
107.步骤309、格式器对接收到的操作记录进行格式转换,并将格式转换后的操作记录和对应的逻辑时间号写入第一消息队列。
108.步骤310、读源端将当前数据库事务对应的全部操作记录的逻辑时间号从缓存区中删除。
109.若操作类型为数据库事务回滚操作,结合上述图1所示实施例中的相关描述,数据库事务回滚意味着数据库事务包含的全部数据库操作未正常完成,此时,则可将当前数据库事务对应的全部操作记录的逻辑时间号从缓存区中删除。
110.步骤311、写入端从第一消息队列中获取操作记录,对目标数据库执行获取到的操作记录对应的数据库操作。
111.由上述描述可见,读源端可通过生产者-消费者机制,向写入端发送操作记录,写入端在从第一消息队列中获取操作记录后,可通过开启多个线程对目标数据库执行数据库操作。通过开启多个线程对目标数据库执行数据库操作,可以提高数据同步的效率。
112.步骤312、写入端在确定对目标数据库成功执行数据库操作时,将该数据库操作对应的逻辑时间号存入第二消息队列。
113.由上述步骤308和步骤309中的描述可知,读源端还将操作记录对应的逻辑时间号发送至写入端,因此,写入端能够得到操作记录对应的逻辑时间号,进而,写入端能够在确定对目标数据库成功执行数据库操作时,将该数据库操作对应的逻辑时间号存入第二消息队列。
114.步骤313、读源端从第二消息队列中获取逻辑时间号,将获取到的逻辑时间号从缓存区中删除。
115.本技术实施例中,读源端可开启一个线程,用于监听第二消息队列,当监听到第二消息队列中存入逻辑时间号时,可从第二消息队列中获取逻辑时间号,将获取到的逻辑时间号从缓存区中删除,这也就实现了读源端将对目标数据库成功执行的数据库操作,对应的逻辑时间号从缓存区中删除。
116.需要说明的是,由于逻辑时间号能够将同时执行的数据库操作区别开,因此,在已向目标数据库执行完某一数据库操作时,可仅将该数据库操作对应的逻辑时间号从缓存区中删除,这相较于仅缓存物理时间号,可以避免将与该数据库操作同时发生的其他数据库操作的逻辑时间号也从缓存区中删除,能够避免后续确定断点位置时出错。
117.步骤314、读源端在确定进行断点续传时,根据缓存区中表征的执行顺序最早的逻辑时间号,从日志中确定断点位置,以及从日志中的断点位置处开始读取操作记录,并执行从源数据库的日志中读取操作记录后的全部操作。
118.作为一个实施例,读源端可开启一个定时器,每到达超时时间,例如10秒时,则确定进行断点续传。通过该种处理,则可以实现周期性地进行断点续传,也即,读源端在确定到达设定的续传周期时,确定进行数据断点续传。
119.作为另一个实施例,在图2所示例的数据传输架构中,还包括一个任务管理器,其他部分,例如写入端的信号都可发送至该任务管理器。基于此,写入端在出现写入异常,也即对目标数据库执行数据库操作出现异常时,可向任务管理器发送用于指示迁移任务出现异常的信号,进一步的,任务管理器在接收到该信号后,可向读源端发送该信号,如此,读源端在接收到该信号时,可确定进行断点续传。
120.由上述步骤305和步骤306中的描述可知,逻辑时间号中的值表征物理时间号,而物理时间号表征数据库操作的执行顺序,因此,逻辑时间号中的值越小,意味着该逻辑时间号对应的数据库操作的执行顺序越靠前,也即该数据库操作执行地越早。基于此,在本技术实施例中,读源端在确定进行断点续传时,可将缓存区中的逻辑时间号中,值最小的逻辑时间号确定为表征的执行顺序最早的逻辑时间号,进一步,将该逻辑时间号中的值,也即缓存区中的逻辑时间号中,最小的值确定为目标物理时间号,将日志中,具有目标物理时间号的操作记录确定为断点位置。
121.为使本领域技术人员能够更直观地理解本技术实施例所能够解决的技术问题,示出以下例子:
122.在redo日志中顺次记录a1、a2、b1、b2、b3、c1、c2、c3、a3这一例子中,正常情况下,读源端缓存区中将顺次存入a2、b2、c2对应的逻辑时间号,且dts的写入端将顺次向目标数据库执行数据库事务b、数据库事务c、数据库事务a。
123.假设写入端成功地向目标数据库执行了数据库事务b,且在执行数据库事务c的过程中遇到了迁移任务异常中断,按照本技术实施例提供的数据传输方法,此时缓存区中存储的是a2、c2对应的逻辑时间号,由于a2的执行顺序早于c2,因此,将a2确定为断点位置,也即,从日志中a2对应的位置处开始读取操作记录,并执行从源数据库的日志中读取操作记录后的全部操作。由此可见,应用本技术实施例提供的数据传输方法,能够避免出现数据库事务a的部分数据操作丢失的情况。
124.图4为本技术实施例提供的一种数据传输装置的示意图。如图4所示,包括:
125.读取模块41,用于从源数据库的日志中读取操作记录,所述日志包括对所述源数据库执行的多个数据库操作的操作记录;
126.缓存模块42,用于将读取到的,满足设定条件的目标操作记录的逻辑时间号存入设定的缓存区;所述设定条件指操作记录对应的数据库操作正常完成,所述逻辑时间号表征所述操作记录对应的数据库操作的执行顺序;
127.同步模块43,用于对目标数据库执行所述目标操作记录对应的数据库操作;
128.删除模块44,用于在确定对所述目标数据库成功执行所述目标操作记录对应的数据库操作时,将所述目标操作记录对应的逻辑时间号从所述缓存区中删除;
129.断点续传模块45,用于当确定进行断点续传时,根据所述缓存区中表征的执行顺序最早的逻辑时间号,从所述日志中确定断点位置,以及从所述日志中的所述断点位置处开始读取操作记录,并执行所述从源数据库的日志中读取操作记录后的全部操作。
130.在一可能的实施方式中,所述缓存模块42包括(图中未示出):
131.类型确定子模块,用于确定当前读取到的所述操作记录对应的操作类型;
132.存入子模块,用于若所述操作类型为ddl操作或dml操作,则将当前读取到的所述操作记录的逻辑时间号存入设定的缓存区;
133.所述删除模块44,还用于若所述操作类型为数据库事务回滚操作,则将当前数据库事务对应的全部操作记录的逻辑时间号从所述缓存区中删除,所述当前数据库事务为当前读取到的所述操作记录所属的数据库事务。
134.在一可能的实施方式中,所述装置还包括(图中未示出):
135.记录模块,用于若当前读取到的所述操作记录对应的操作类型为ddl操作或dml操作,则记录当前读取到的所述操作记录的物理时间号以及所述物理时间号的出现次数n,所述物理时间号表征所述操作记录对应的数据库操作的执行顺序;
136.确定模块,用于确定当前读取到的所述操作记录的所述逻辑时间号,具体包括:
137.比较当前读取到的所述操作记录的物理时间号与已记录的,前一次读取到的所述操作记录的物理时间号是否一致;
138.若不一致,则根据当前读取到的所述操作记录的物理时间号,确定一个键值对作为当前读取到的所述操作记录的逻辑时间号,所述逻辑时间号中的键和值均为所述物理时间号;
139.若一致,则根据当前读取到的所述操作记录的物理时间号和已记录的,前一次读取到的所述操作记录对应的所述n,确定一个键值对作为当前读取到的所述操作记录的逻辑时间号,所述逻辑时间号中的键为所述n与1之和,值为所述物理时间号。
140.在一可能的实施方式中,所述断点续传模块45具体用于:
141.将所述缓存区中的逻辑时间号中,最小的值确定为目标物理时间号;将所述日志中,具有所述目标物理时间号的操作记录确定为断点位置。
142.在一可能的实施方式中,所述断点续传模块45具体用于:
143.在确定到达设定的续传周期时,确定进行数据断点续传。
144.在一可能的实施方式中,所述源数据库为oracle数据库,所述日志为redo日志。
145.如图5所示,本技术实施例提供了一种电子设备,包括处理器511、通信接口512、存储器513和通信总线514,其中,处理器511,通信接口512,存储器513通过通信总线514完成相互间的通信,
146.存储器513,用于存放计算机程序;
147.在本技术一个实施例中,处理器511,用于执行存储器513上所存放的程序时,实现前述任意一个方法实施例提供的数据传输方法,包括:
148.本技术实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如前述任意一个方法实施例提供的数据传输方法的步骤。
149.需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
150.以上所述仅是本发明的具体实施方式,使本领域技术人员能够理解或实现本发明。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的
一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1