一种源端并发导致触发器增量同步异常的处理方法
【技术领域】
本发明涉及数据库技术领域,特别是涉及一种源端并发导致触发器增量同步异常的处理方法、系统和装置。
【背景技术】
增量同步技术,是将发生在源表上的数据插入、修改和删除指令以增量数据的形式记录在增量目的表中,然后通过解析增量目的表中的数据,将增量数据包装成相应的DML操作,并在目的表上执行同样的DML操作,从而实现目的表中的数据与源表中数据的同步。
在首次同步时将源表数据全量抽取到目的表中后,可以通过重复地执行增量抽取,将源表上的DML操作产生的变化数据,无遗漏地同步到目的表中,从而实现源表和目的表的长期同步,避免每次都同步全量数据。当全量数据巨大,而每次变化数据较少时,可以大幅提升数据同步的效率。
所谓增量数据,即增量目的表中的数据,除了包含DML操作涉及的表数据外,还包括DML操作的类型(如图2中所示的CDC_OPT,其中字段内容为“I”表明是INSERT操作)和DML操作的唯一性编号(如图2所示的CDC_ID),该编号根据发生在源表上的DML操作的先后顺序递增。类型CDC_OPT和编号CDC_ID是传递和解析增量数据的依据。
增量同步过程通过增量表数据读取工具(以下简称增量源)和增量表数据装载工具(以下简称增量目的)共同完成:增量源根据状态参数判断应该执行全量抽取(从源表读取数据并封装成增量数据)还是增量抽取(从增量表读取数据),并将读取到的数据按增量数据的唯一性编号递增地依次传递给增量目的;增量目的接收增量源传递过来的数据,判断增量数据类型为INSERT、DELETE还是UPDATE,然后在目的表上执行对应的DML操作,从而实现目的表数据与源表数据的同步。
当前主流的增量同步方式,按照增量数据的内部产生方式分为两类:过程记录产生方式,包括触发器增量和日志解析增量;比较产生方式,包括影子表增量、MD5增量和时间戳增量。无论哪种增量同步方式,过程都是相同的:首次同步时,将源表数据全量抽取到目的表中;非首次同步时,从增量目的表中读取数据并进行解析,将源表中的数据变化同步到目的表中,然后清除增量目的表中已同步过的数据,避免重复同步,完成整个增量同步过程。
触发器增量同步是指,在源表上创建触发器,该触发器的触发条件是源表上发生INSERT、DELETE、UPDATE等导致表数据发生变化的DML操作,触发的事件是向触发器增量目的表中插入记录这些DML操作的数据,即增量数据。每行增量数据除了记录源表中相关数据外,还多了两列,即如图2所示的操作类型列(CDC_OPT)和编号列(CDC_ID),CDC_OPT列记录DML操作的类型,CDC_ID列中的数据由一个特定的序列(在创建触发器增量时创建)生成,其种子和步长都为1。
当并发地向源表中插入数据时,可能出现这种情况:当一个线程中INSERT操作触发了触发器使序列生成了一个CDC_ID值时,该线程的CPU时间片恰好用完了,而另一个线程获取CPU执行权,其中的INSERT操作触发触发器、使序列生成下一个CDC_ID值并向增量目的表中插入一条增量数据,就会导致在源表中先执行的INSERT操作对应的增量数据在增量目的表中反而被后插入,从而导致在某一时间段中增量目的表中的CDC_ID列中的值不是连续递增的,如果触发器增量同步数据查询操作(每次增量同步过程中仅进行一次)恰好发生在这一小段时间内,则读取到的一批增量数据的CDC_ID值不是连续递增的。
现有的触发器增量同步异常的流程如图1所示,在现有技术中清理已同步增量数据的机制有两种,一种是默认增量目的表中CDC_ID列值连续递增,完成增量同步后,清除增量目的表中CDC_ID列值小于最后同步的一条增量数据的CDC_ID值的所有行,这种机制会导致未同步的增量数据被清除,从而导致增量数据丢失;一种是以对增量目的表中已同步数据进行UPDATE操作的方式做标记,在清理增量表时,仅清除做过标记的增量数据,以图2所示的表格为例,其原理是在默认创建触发器增量时,会给所述CDC_OPT设定一与DML操作类型对应的数值(例如:1,2,3分别对应为INSERT,DELETE,UPDATE),并且,在相应的触发器增量被同步到增量目的后,相应的CDC_OPT中的数值会被替换为类似图2所示的字母,从而在后续排查的过程中,可以通过CDC_OPT的标记差异识别是否已经被完成过同步操作。但是,这种方式由于存在额外的数据库数据UPDATE操作,比较影响执行效率。
鉴于此,克服该现有技术所存在的缺陷是本技术领域亟待解决的问题。
【发明内容】
本发明要解决的技术问题是如何提高在清理已同步增量数据时的效率问题。
本发明采用如下技术方案:
第一方面,本发明提供了一种源端并发导致触发器增量同步异常的处理方法,包括:
获取尚未完成同步的增量数据,并进行在增量目的侧的相应增量数据第一阶段同步;
根据完成增量目的侧数据第一阶段同步的增量数据的CDC_ID值,将连续的一个或者多个增量数据的CDC_ID值以区间的形式记录,从而得到一个或者多个区间;
在清理增量数据时,根据所述区间值确定位于所述区间值之中的增量数据是已完成第一阶段同步操作的增量数据并将其删除。
优选的,所述方法还包括:
在清理增量数据时,还包括:根据所述区间值确定位于所述区间值之外的增量数据是历史上还未在增量目的侧中完成第一阶段同步操作的增量数据;
将所述历史上还未在增量目的侧中完成第一阶段同步操作的增量数据,执行在增量目的侧的第二阶段的同步操作后;
根据相应第二阶段中同步操作的增量数据的CDC_ID值,更新在第一阶段同步之后生成的一个或者多个区间。
优选的,所述更新在第一阶段同步之后生成的一个或者多个区间,具体包括:
将在所述第二阶段的同步操作中所完成的第二增量数据的CDC_ID值,与第一阶段已经生成的一个或者多个区间的边界值进行比较;
若所述第二增量数据的CDC_ID值,与第二区间的一侧边界值相邻,则将所述第二增量数据的CDC_ID值作为所述第二区间相应侧的新边界值,以此更新所述第二区间;
若所述第二增量数据的CDC_ID值,未与任意一个区间的边界值相邻,则为所述第二增量数据的CDC_ID值生成一单值区间。
优选的,所述方法还包括:
若所述第二增量数据的CDC_ID值,分别与第一区间的一侧边界值和第二区间的一侧边界值相邻,则将所述第一区间和第二区间合并为单一区间。
优选的,在完成所述第二阶段同步还包括一个或者多个后续阶段同步,所述方法还包括:
在清理增量数据时,若确认一区间所包含的边界值是由1开始,且仅有一区间时;增量目的向增量源发送同步总量请求消息;
匹配从增量源获取到的同步总量值与所述区间的边界值,若匹配则释放所述区间,完成本轮从增量源到增量目的的同步过程。
优选的,所述在清理增量数据时,还包括:
直接删除CDC_ID值已经被归入区间的增量数据;
其中,所述清理增量数据是按照预设时间周期进行,或者,按照预设时间长度未接收到新的增量数据触发进行,或者,在接收到清理指令后进行。
第二方面,本发明还提供了一种源端并发导致触发器增量同步异常的处理系统,系统中包括增量源和增量目的,增量源和增量目的之间可以完成数据互通,所述方法还包括:
增量源从CDC表中读取数据;
增量源将读取到的增量数据发送到增量目的;
增量目的根据增量数据在目的表中进行对应的DML操作,使增量目的表中的数据与增量源表中的数据达成一致;
增量目的将该批次增量数据的CDC_ID值数组发送到增量数据清理模块;
增量数据清理模块将CDC_ID值数组整合成区间形式,并更新到辅助表中;
本次同步开始时读取到的所有增量数据完成同步后,增量数据清理模块根据对应CDC_ID值生成的区间清理增量目的表中的数据;并在完成后,清理辅助表中记录的对应CDC_ID值的区间。
优选的,所述增量数据清理模块由所述增量目的,通过运行包含所述增量数据清理模块相关功能的程序代码实现。
优选的,所述增量数据清理模块,还包括:
直接删除CDC_ID值已经被归入区间的增量数据;
其中,所述增量数据清理模块是按照预设时间周期进行,或者,按照预设时间长度未接收到新的增量数据触发进行,或者,在接收到清理指令后进行。
第三方面,本发明还提供了一种源端并发导致触发器增量同步异常的处理装置,用于实现第一方面所述的源端并发导致触发器增量同步异常的处理方法,所述装置包括:
至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被程序设置为执行第一方面所述的源端并发导致触发器增量同步异常的处理方法。
第四方面,本发明还提供了一种非易失性计算机存储介质,所述计算机存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行,用于完成第一方面所述的源端并发导致触发器增量同步异常的处理方法。
本发明在增量目的表完成DML同步操作后依据这些区间在不依赖增量目的表中CDC_ID列值连续递增特性、不对增量目的表中数据做标记的情况下,保证增量同步过程高效率执行,且不会导致数据丢失。克服了现有技术中,必须依赖CDC_OPT的数值和字符之间赋值切换的方式,来实现被同步过的增量数据的差异性识别,其所带来的计算资源的浪费问题;尤其是在数据量达到一定数量级时,其所需要针对每一增量数据进行CDC_OPT字段的修改做产生的资源损耗,是无法轻易忽视的。
【附图说明】
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的现有技术中的一种源端并发导致触发器增量同步异常的处理方法流程示意图;
图2是本发明实施例提供的一种典型的增量数据结构示意图;
图3是本发明实施例提供的一种源端并发导致触发器增量同步异常的处理方法流程示意图;
图4是本发明实施例提供的另一种源端并发导致触发器增量同步异常的处理方法流程示意图;
图5是本发明实施例提供的还一种源端并发导致触发器增量同步异常的处理方法流程示意图;
图6是本发明实施例提供的一种源端并发导致触发器增量同步异常的处理方法中清理流程示意图;
图7是本发明实施例提供的一种源端并发导致触发器增量同步异常的处理系统架构示意图;
图8是本发明实施例提供的一种源端并发导致触发器增量同步异常的处理方法流程示意图;
图9是本发明实施例提供的一种增量源侧并发插入完成后增量源表中的数据示意图;
图10是本发明实施例提供的一种部分增量数据尚未插入到增量目的表中时增量目的表中的数据示意图;
图11是本发明实施例提供的一种所有增量数据都已插入到增量目的表中且增量数据清理模块还未清理增量表时增量目的表中的数据示意图;
图12是本发明实施例提供的一种增量同步完成之后增量数据清理模块清理后增量目的表中的数据示意图;
图13是本发明实施例提供的一种源端并发导致触发器增量同步异常的处理装置结构示意图。
【具体实施方式】
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
在本发明的描述中,术语“内”、“外”、“纵向”、“横向”、“上”、“下”、“顶”、“底”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明而不是要求本发明必须以特定的方位构造和操作,因此不应当理解为对本发明的限制。
此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
在开始阐述本发明实施例之前,利用涉及的程序代码中的类和对象展示现有技术部分具体实现细节,从而能够更深刻的理解本发明实施例提出的改进方案的可实现性,以及其所能取得的效果。包括:
1、根据基表的结构创建触发器CDC表
CDC表在基表的基础上增加了CDC_ID和CDC_OPT两列,CDC_ID列为递增的整数值,表示操作的顺序,CDC_OPT列为字符类型,表示操作的类型,该列只有4种值,其中'I'表示插入,'UO'和'UN'表示更新,其中UO表示更新前的值,UN表示更新后的值,'D'表示删除,CDC表定义如下:
2、创建序列
序列可以生成连续递增的值,用于在触发器中为CDC_ID赋值,创建序列SQL如下:
CREATE SEQUENCE"SEQ_TABLE_S01_TRIGGER_CDC"INCREMENT BY 1START WITH1MAXVALUE 9223372036854775807MINVALUE 1;
3、创建触发器(即本发明实施例1和实施例2中的增量数据对等的一种具体表现形式)
触发器捕获基表变化,将用户触发的操作写入到CDC表中。触发器定义如下:
从上述触发器的代码不难看出,每次用户触发的操作写入到CDC表中,就需要对"CDC_OPT"进行相应操作类型的复制,例如上面程序中的'I'、'UO'、'UN'和'D'所示。
其增量同步的基本过程通常包括:
1、增量源从CDC表中读取数据(每次同步过程只读取一次);
2、增量源将读取到的增量数据发送到增量目的;
3、增量目的根据增量数据在目的表中进行对应的DML操作(对应于本发明实施例中所描述的同步操作),使目的表中的数据与源表中的数据达成一致;此时,被DML操作后的增量数据中的CDC_OPT会由默认的数值状态替换为字符类型状态。
4、根据所述CDC_OPT中是否都切换为字符类型,确定本次同步开始时读取到的所有增量数据是否完成同步;并在确定完成同步后,释放相应数据增量的存储空间。
由此,还可以看出,对于现有技术而言,以为CDC_OPT是属于数据增量的参数之一,因此,其数据增量是不能被随意删除或者释放的,需要完成获取到的所有增量数据的同步操作后,才能一起被释放。这也将是在本发明实施例1中进一步被克服的技术问题之一。
实施例1:
本发明实施例1提供了一种源端并发导致触发器增量同步异常的处理方法,本发明实施例所提出的方法多用于数据库同步备份领域,即增量源中所涉及的插入、更新、删除等数据操作内容,需要被同步到增量目的侧。如图3所示,包括:
在步骤201中,获取尚未完成同步的增量数据,并进行在增量目的侧的相应增量数据第一阶段同步。
此处描述的获取动作,在具体实现过程中通常是被动的,即站在增量目的侧来看,所述增量源侧同步过的增量数据,主要方式是由增量源主动推送的。当然,在具体实现过程中,也不排除通过设定周期的方式,即定期进行一次增量数据由增量源到增量目的发送的过程。除了上述两种方式外,也可以设置为由增量目的确认自身资源环境良好的时候,主动向增量源发送请求的方式来获取。在实际操作过程中,还可以上述几种方式的组合,在此不再赘述。
在步骤202中,根据完成增量目的侧数据第一阶段同步的增量数据的CDC_ID值,将连续的一个或者多个增量数据的CDC_ID值以区间的形式记录,从而得到一个或者多个区间。
此处描述的第一阶段同步,通常是指一段时间内接收到的增量数据,即因为网络传输问题或者增量源侧生成增量数据先后顺序等问题,并没能在上述一段时间内抵达增量目的的,将被本发明实施例描述为第二阶段同步、第三阶段同步等等。
其中,由于本发明实施例更多的考虑的可能发生乱序形式接收的情况,因此,一旦发生乱序则在根据CDC_ID构成区间时,便会发生区间之间的断开,从而会形成两个甚至多个区间的情况。
在步骤203中,在清理增量数据时,根据所述区间值确定位于所述区间值之中的增量数据是已完成第一阶段同步操作的增量数据并将其删除。
此处是本发明相对于现有技术最大区别表现点,即现有技术是通过CDC_OPT的参数替换来识别是否完成了数据同步,而本发明实施例则将其脱离出增量数据自身,并设定了区间这一解决存储空间,且能高效完成对比分析的方式,提高了整个识别增量数据是否完成数据同步的效率。
本发明实施例在增量目的表完成DML同步操作后依据这些区间在不依赖增量目的表中CDC_ID列值连续递增特性、不对增量目的表中数据做标记的情况下,保证增量同步过程高效率执行,且不会导致数据丢失。克服了现有技术中,必须依赖CDC_OPT的数值和字符之间赋值切换的方式,来实现被同步过的增量数据的差异性识别,其所带来的计算资源的浪费问题;尤其是在数据量达到一定数量级时,其所需要针对每一增量数据进行CDC_OPT字段的修改做产生的资源损耗,是无法轻易忽视的。
在本发明实施例中,对于增量数据的获取通常不是同一时间完成的,而为了提高计算资源的利用率,通常也不会等待增量数据都接受到之后,采集进行增量目的的同步操作,在具体实现过程中除了涉及步骤202的第一阶段同步以外,通常还会涉及一轮或者多轮后续的同步操作。因此,结合本发明实施例还存在一种优选的实现方案,根据所述区间值确定位于所述区间值之外的增量数据是历史上还未在增量目的侧中完成第一阶段同步操作的增量数据之后,如图4所示,所述方法还包括:
在步骤204中,将所述历史上还未在增量目的侧中完成第一阶段同步操作的增量数据,执行在增量目的侧的第二阶段的同步操作后,根据相应第二阶段中同步操作的增量数据的CDC_ID值,更新在第一阶段同步之后生成的一个或者多个区间。
如背景技术中描述的,发生步骤204情况刻意是“当一个线程中INSERT操作触发了触发器使序列生成了一个CDC_ID值时,该线程的CPU时间片恰好用完了,而另一个线程获取CPU执行权,其中的INSERT操作触发触发器、使序列生成下一个CDC_ID值并向增量目的表中插入一条增量数据,就会导致在源表中先执行的INSERT操作对应的增量数据在增量目的表中反而被后插入,从而导致在某一时间段中增量目的表中的CDC_ID列中的值不是连续递增的”,还可以如实施例1中所解释的,可以是因为网络传输的不稳定情况造成的等等。
在本发明实施例中,对于步骤204中所涉及的所述更新在第一阶段同步之后生成的一个或者多个区间,还提供了一种具体的实现方式,如图5所示,具体包括:
在步骤301中,将在所述第二阶段的同步操作中所完成的第二增量数据的CDC_ID值,与第一阶段已经生成的一个或者多个区间的边界值进行比较。
通过步骤301即可看出对于新生的增量数据,与已经生成的区间比较,只需要进行区间的两个边界值的比较即可完成是:属于区间、与区间属于可合并的相邻、还是属于各区间之外需要自立生成区间的情况。
在步骤302中,若所述第二增量数据的CDC_ID值,与第二区间的一侧边界值相邻,则将所述第二增量数据的CDC_ID值作为所述第二区间相应侧的新边界值,以此更新所述第二区间。
在步骤303中,若所述第二增量数据的CDC_ID值,未与任意一个区间的边界值相邻,则为所述第二增量数据的CDC_ID值生成一单值区间。
在步骤304中,若所述第二增量数据的CDC_ID值,分别与第一区间的一侧边界值和第二区间的一侧边界值相邻,则将所述第一区间和第二区间合并为单一区间。
作为本发明实施例完整技术方案的考量,既然涉及到区域的生成,那么必然需要考虑到区域的释放,然而若释放的时机不到位,可能造成在第一阶段同步之后的后续同步阶段没有有效的区域进行匹对,因此,结合本发明实施例对于如何确定释放区间所占用的资源也提供了相应的实现方式,即在完成所述第二阶段同步还包括一个或者多个后续阶段同步,如图6所示,所述方法还包括:
在步骤401中,在清理增量数据时,若确认一区间所包含的边界值是由1开始,且仅有一区间时;增量目的向增量源发送同步总量请求消息。
所述仅有一个区间,不仅可以用于触发判断当前的增量数据同步是否完成,还可以用于在包含多个区间时,可以生成报告,对于脱离与区间之外的CDC_ID记录为丢失状态的增量数据,从而便于增量目的和增强源进行数据回溯时,快速定位传输过程中丢失的数据。
在步骤402中,匹配从增量源获取到的同步总量值与所述区间的边界值,若匹配则释放所述区间,完成本轮从增量源到增量目的的同步过程。
与上述进行区间的释放不同,对于增量数据而言,只要完成同步,并且被归入或者为其新建区间之后即可删除,从而为计算资源预留出新的资源,因此,在本发明实施例的步骤203中涉及的所述在清理增量数据时,还包括:
直接删除CDC_ID值已经被归入区间的增量数据;这里也是在
其中,所述清理增量数据是按照预设时间周期进行,或者,按照预设时间长度未接收到新的增量数据触发进行,或者,在接收到清理指令后进行。
实施例2:
本发明实施例还提供了一种源端并发导致触发器增量同步异常的处理系统,如图7所示,系统中包括增量源11和增量目的12,增量源11和增量目的12之间可以完成数据互通,所述方法还包括:
增量源11从CDC表中读取数据;
增量源11将读取到的增量数据发送到增量目的12;
增量目的12根据增量数据在目的表中进行对应的DML操作,使增量目的12表中的数据与增量源11表中的数据达成一致;
增量目的12将该批次增量数据的CDC_ID值数组发送到增量数据清理模块121;
增量数据清理模块121将CDC_ID值数组整合成区间形式,并更新到辅助表中;
本次同步开始时读取到的所有增量数据完成同步后,增量数据清理模块121根据对应CDC_ID值生成的区间清理增量目的表中的数据;并在完成后,清理辅助表中记录的对应CDC_ID值的区间。
本发明实施例在增量目的表完成DML同步操作后依据这些区间在不依赖增量目的表中CDC_ID列值连续递增特性、不对增量目的表中数据做标记的情况下,保证增量同步过程高效率执行,且不会导致数据丢失。克服了现有技术中,必须依赖CDC_OPT的数值和字符之间赋值切换的方式,来实现被同步过的增量数据的差异性识别,其所带来的计算资源的浪费问题;尤其是在数据量达到一定数量级时,其所需要针对每一增量数据进行CDC_OPT字段的修改做产生的资源损耗,是无法轻易忽视的。
在本发明实施例中,所述增量数据清理模块121由所述增量目的12,通过运行包含所述增量数据清理模块121相关功能的程序代码实现。
在本发明实施例中,所述增量数据清理模块121,还包括:
直接删除CDC_ID值已经被归入区间的增量数据;
其中,所述增量数据清理模块121是按照预设时间周期进行,或者,按照预设时间长度未接收到新的增量数据触发进行,或者,在接收到清理指令后进行。
需要指出的是,本发明实施例相比较实施例1而言是同一发明构思下的,系统的技术方案描述。因此,本领域技术人员也可知悉,实施例1中相应的方法内容的扩展方案,同样可以适用于本发明实施例方案,在此不再赘述。
实施例3:
本发明实施例以一个较为完整的流程展示本发明实施例1在整个架构环境下实现所处位置。并且,在本发明实施例中,还将引入具体的表格数据进行相关数据同步结合了本发明实施例提出的区域技术特征后的具体实现。
在步骤501中、增量源从CDC表中读取数据(每次同步过程只读取一次)。
在步骤502中、增量源将读取到的增量数据发送到增量目的。
在步骤503中、增量目的根据增量数据在目的表中进行对应的DML操作,使目的表中的数据与源表中的数据达成一致。
在步骤504中、增量目的将该批次增量数据的CDC_ID值数组发送到增量数据清理模块。
在步骤505中、增量数据清理模块将CDC_ID值数组整合成区间形式,并更新到辅助表中。
在步骤506中、本次同步开始时读取到的所有增量数据完成同步后,增量数据清理模块根据CDC_ID值区间清理增量目的表中的数据;完成后,清理辅助表中记录的CDC_ID值区间相关信息。
本发明实施例在增量目的表完成DML同步操作后依据这些区间在不依赖增量目的表中CDC_ID列值连续递增特性、不对增量目的表中数据做标记的情况下,保证增量同步过程高效率执行,且不会导致数据丢失。克服了现有技术中,必须依赖CDC_OPT的数值和字符之间赋值切换的方式,来实现被同步过的增量数据的差异性识别,其所带来的计算资源的浪费问题;尤其是在数据量达到一定数量级时,其所需要针对每一增量数据进行CDC_OPT字段的修改做产生的资源损耗,是无法轻易忽视的。
结合具体的数据展示如下:
1、源端并发插入的数据:
如图9所示为增量源侧并发插入完成后增量源表中的数据。
2、增量同步开始时,触发器增量目的表中的数据:
如图10所示为部分增量数据尚未插入到增量目的表中时增量目的表中的数据。这也是本次增量同步过程中数据读取组件读取到的增量数据,此时线程2和线程4已经完成了向源端插入数据,但对应的增量数据尚未插入到增量目的表中。
3、数据读取组件读取数据后,线程2和线程4所插入的数据对应的增量数据已经插入到增量目的表中时触发器增量目的表中的数据。
如图11所示,所有增量数据都已插入到增量目的表中且增量数据清理模块还未清理增量表时增量目的表中的数据。
4、数据装载组件根据数据读取组件传递过来的增量数据在目的表上执行完相应的DML操作、实现目的表与源表的同步后,如图10所示,会将{1,2,3,7,8,9,13,14,15}这样一组数据发送到增量数据清理模块。
5、增量表数据清理模块将上述数组转换成3个区间:[1,3]、[7,9]、[13,15],然后将增量目的表中CDC_ID列值在上述区间中的行删除,删除后,增量目的表中的数据。
如图12所示,增量同步完成之后增量数据清理模块清理后增量目的表中的数据。
6、下次执行增量同步时,即可根据增量目的表中的剩余数据将插入到源表中的数据插入到目的表中。
7、当增量目的表中的数据量较大时,数据装载组件是分批次在目的表上执行DML操作的,每执行一次,都会发送一个由该批次增量数据的CDC_ID值组成的数组到增量表数据清理模块中,例如第一次发送{1,2,3,7,8,9,13,14,15},第二次发送{4,5,6,10,11,12},这就涉及到区间的多次组装,组装出来的区间数组为[1,3]、[4,6]、[7,9]、[10,12]、[13,15],且区间组装完毕后会进行合并,最终得到的区间为[1,15],增量数据清理模块则会将增量目的表中CDC_ID列值处于该区间中的行删除。
实施例4:
如图13所示,是本发明实施例的源端并发插入导致触发器增量同步异常的处理装置的架构示意图。本实施例的源端并发插入导致触发器增量同步异常的处理装置包括一个或多个处理器21以及存储器22。其中,图13中以一个处理器21为例。
处理器21和存储器22可以通过总线或者其他方式连接,图13中以通过总线连接为例。
存储器22作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序和非易失性计算机可执行程序,如实施例1中的源端并发导致触发器增量同步异常的处理方法。处理器21通过运行存储在存储器22中的非易失性软件程序和指令,从而执行源端并发导致触发器增量同步异常的处理方法。
存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器22可选包括相对于处理器21远程设置的存储器,这些远程存储器可以通过网络连接至处理器21。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
所述程序指令/模块存储在所述存储器22中,当被所述一个或者多个处理器21执行时,执行上述实施例1中的源端并发导致触发器增量同步异常的处理方法,例如,执行以上描述的图3-图6、图8所示的各个步骤。
值得说明的是,上述装置和系统内的模块、单元之间的信息交互、执行过程等内容,由于与本发明的处理方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取存储器(RAM,Random AccessMemory)、磁盘或光盘等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。