首页> 中国专利> 一种保证复制事务一致性的方法以及相应的复制装置

一种保证复制事务一致性的方法以及相应的复制装置

摘要

本发明提供了一种保证复制事务一致性的方法以及相应的复制装置,包括:获取源数据库最早发生的活动事务的起始日志序列号,将最早发生的活动事务的起始日志序列号标记为恢复起始点;获取源数据库相邻两个活动事务的起始日志序列号,并在相邻两个活动事务的起始日志序列号的差值大于预设阈值时,将相邻两个活动事务的起始日志序列号标记为范围检查点;获取源数据库事务日志,删除提交日志序列号不大于恢复起始点的事务日志以及提交日志序列号落入范围检查点的事务日志;依据恢复起始点、范围检查点以及已提交事务记录进行数据恢复。本发明采用范围检查点机制对提交事务表进行了压缩,可以有效减小提交事务表的规模。

著录项

  • 公开/公告号CN109189608A

    专利类型发明专利

  • 公开/公告日2019-01-11

    原文格式PDF

  • 申请/专利权人 武汉达梦数据库有限公司;

    申请/专利号CN201810917819.2

  • 发明设计人 付铨;孙峰;赵家威;杨春;

    申请日2018-08-13

  • 分类号G06F11/14(20060101);G06F16/27(20190101);

  • 代理机构44372 深圳市六加知识产权代理有限公司;

  • 代理人向彬

  • 地址 430000 湖北省武汉市东湖新技术开发区高新大道999号未来科技大厦C3栋16-19层

  • 入库时间 2024-02-19 08:02:51

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2023-08-18

    专利权的转移 IPC(主分类):G06F11/14 专利号:ZL2018109178192 登记生效日:20230801 变更事项:专利权人 变更前权利人:武汉达梦数据库股份有限公司 变更后权利人:武汉达梦数据库股份有限公司 变更事项:地址 变更前权利人:430073 湖北省武汉市东湖新技术开发区高新大道999号未来科技大厦C3栋16-19层 变更后权利人:430206 湖北省武汉市东湖新技术开发区高新大道999号未来科技大厦C3栋16-19层 变更事项:专利权人 变更前权利人:华中科技大学 变更后权利人:

    专利申请权、专利权的转移

  • 2022-09-20

    专利权的转移 IPC(主分类):G06F11/14 专利号:ZL2018109178192 登记生效日:20220908 变更事项:专利权人 变更前权利人:武汉达梦数据库股份有限公司 变更后权利人:武汉达梦数据库股份有限公司 变更事项:地址 变更前权利人:430000 湖北省武汉市东湖新技术开发区高新大道999号未来科技大厦C3栋16-19层 变更后权利人:430073 湖北省武汉市东湖新技术开发区高新大道999号未来科技大厦C3栋16-19层 变更事项:专利权人 变更前权利人: 变更后权利人:华中科技大学

    专利申请权、专利权的转移

  • 2019-07-26

    授权

    授权

  • 2019-02-12

    实质审查的生效 IPC(主分类):G06F11/14 申请日:20180813

    实质审查的生效

  • 2019-01-11

    公开

    公开

说明书

【技术领域】

本发明涉及数据库同步技术领域,特别是涉及一种保证复制事务一致性的方法以及相应的复制装置。

【背景技术】

数据库数据实时同步是提高信息系统可用性,保证业务连续性的一种技术方案。通过数据实时同步,目标数据库和源数据库的业务数据保持实时一致,当源数据库出现故障中断服务后,应用系统可快速切换至目标数据库,保证业务连续性的要求。

基于日志分析的数据库数据实时复制技术,具有对源数据库的性能和数据模式影响小、支持异构操作系统和数据库平台、数据复制性能高等特点,在应急灾备、多业务中心、异构资源整合、数据迁移等领域得到广泛应用。这种技术通过源端的日志捕获进程捕获源数据库的在线日志或归档日志,然后分析出数据库的INSERT(插入)、UPDATE(更新)以及DELETE(删除)操作转换为内部特定格式的消息包,再将消息包通过TCP/IP(TransmissionControl Protocol/Internet Protocol,简写TCP/IP)网络发送到复制系统的目标端,目标端接收消息包后,进行拆包处理,将源端的事务信息恢复成相应的SQL(Structured QueryLanguage,简写SQL)语句,通过本地数据库接口在目标数据库执行实时复制,以实现数据库数据同步。

为保证源数据库和目标数据库的数据一致性,基于日志分析的数据库数据复制技术通常以源数据库的事务为最小复制单位,严格按照源数据库事务顺序进行实时数据复制,保障目标数据库与源数据库的事务的完整性和一致性,确保目标数据库符合源数据库的事务逻辑。因此,在基于日志分析的数据库数据复制技术中,其技术关键在于如何保障源数据库和目标数据库的事务一致性,特别是在复制系统出现故障后,目标数据库能够按照事务完整性及一致性的要求进行正确的恢复。

目前,为了保证目标数据库与源数据库的复制事务的完整性及一致性,一般采用的方法如下:在目标数据库中创建一个提交事务表记录已完成的提交事务信息,并采用检查点机制对提交事务表进行维护,记录恢复起始点信息。该检查点机制的主要技术特点为,首先取出源数据库中活动事务的最小日志序列号;然后在目标数据库的提交事务表中删除小于等于该最小日志序列号的所有提交事务信息;最后将该最小日志序列号插入到提交事务表中作为一条检查点记录。复制系统出现故障进行恢复时,从检查点记录的最小日志序列号开始恢复,以此保障故障恢复后的事务一致性。

但是,上述基于检查点机制保障复制系统故障恢复后的事务一致性的方法存在一定不足:当源数据库中存在长时间未提交的长事务时,在将该长事务的起始日志序列号写入提交事务表后,复制系统在故障发生前可能已经执行了大量的事务操作。因为长事务一直未提交,导致检查点对应的日志序列号不能推进,提交事务表中过期事务信息不能及时删除,造成提交事务表规模过大。在故障恢复时,目标端复制进程需要加载提交事务表信息,用于判断恢复起始点后的事务是否需要重做。提交事务表过大会造成提交事务信息加载耗时过长,增加复制系统恢复时间,同时也增加复制系统内存资源消耗。

鉴于此,克服该现有技术所存在的缺陷是本技术领域亟待解决的问题。

【发明内容】

本发明要解决的技术问题是由于长事务的存在导致提交事务表内存储有大量过期事务信息,造成提交事务表内存过大,占用资源。同时,复制系统出现故障进行恢复时,提交事务表过大会造成提交事务信息加载耗时过长,增加复制系统恢复时间,同时也增加复制系统内存资源消耗。

本发明实施例采用如下技术方案:

第一方面,本发明提供一种保证复制事务一致性的方法,所述保证复制事务一致性的方法包括:

获取源数据库最早发生的活动事务的起始日志序列号,将所述最早发生的活动事务的起始日志序列号标记为恢复起始点;

获取源数据库相邻两个活动事务的起始日志序列号,并在所述相邻两个活动事务的起始日志序列号的差值大于预设阈值时,将所述相邻两个活动事务的起始日志序列号标记为范围检查点;

获取源数据库事务日志,删除提交日志序列号不大于所述恢复起始点的事务日志以及提交日志序列号落入范围检查点的事务日志以得到已提交事务记录;

在故障恢复时,依据所述恢复起始点、所述范围检查点以及所述已提交事务记录进行数据恢复,以保证源数据库和目标数据库的事务一致性。

优选的,所述获取源数据库最早发生的活动事务的起始日志序列号,将所述最早发生的活动事务的起始日志序列号标记为恢复起始点包括:

采用定时器定时获取源数据库最早发生的活动事务的起始日志序列号;

判断确定当前时刻源数据库最早发生的活动事务的起始日志序列号相对于上一时刻源数据库最早发生的活动事务的起始日志序列号是否发生变更;

若发生变更,则依据当前时刻源数据库最早发生的活动事务的起始日志序列号重新设置恢复起始点。

优选的,所述获取源数据库相邻两个活动事务的起始日志序列号,并在所述相邻两个活动事务的起始日志序列号的差值大于预设阈值时,将所述相邻两个活动事务的起始日志序列号标记为范围检查点包括:

依次获取源数据库相邻两个活动事务的起始日志序列号;

判断确定所述相邻两个活动事务的起始日志序列号的差值是否大于预设阈值;

若所述相邻两个活动事务的起始日志序列号的差值大于预设阈值,则将所述相邻两个活动事务的起始日志序列号标记为一个范围检查点;

将范围检查点以二维数组形式进行存储,其中,二维数组的一行对应其中一个范围检查点。

优选的,在故障恢复时,依据所述恢复起始点、所述范围检查点以及所述已提交事务记录进行数据恢复包括:

将所述恢复起始点发送至所述源数据库并接收所述源数据库所发送的操作日志,其中,所述操作日志的日志序列号大于所述恢复起始点对应的日志序列号;

对所述操作日志进行解析获取所述操作日志对应的事务的提交日志序列号,并判断确定所述提交日志序列号是否落入所述范围检查点内;

若所述提交日志序列号落入所述范围检查点内,则所述操作日志对应的事务在故障发生前已经加载至目标数据库,忽略所述操作日志。

优选的,所述保证复制事务一致性的方法还包括:

若所述提交日志序列号未落入所述范围检查点内,则所述操作日志对应的事务在故障发生前未加载至目标数据库,所述操作日志需要在目标数据库同步。

优选的,所述若所述提交日志序列号未落入所述范围检查点内,则所述操作日志对应的事务在故障发生前未加载至目标数据库,所述操作日志需要在目标数据库同步包括:

在接收到所述操作日志对应的事务的提交日志时,将所述操作日志对应的事务日志添加到所述已提交事务记录;

依据所述操作日志对应的事务日志对目标数据库进行数据同步。

优选的,所述保证复制事务一致性的方法还包括:

对所述操作日志进行解析获取所述操作日志对应的事务标识码;

判断确定所述事务标识码是否存在于已提交事务记录内;

若存在,则所述操作日志对应的事务在故障发生前已经加载至目标数据库,忽略所述操作日志;

若不存在,则执行对所述操作日志进行解析获取所述操作日志对应的事务的提交日志序列号,并判断确定所述提交日志序列号是否落入所述范围检查点内。

优选的,所述对所述操作日志进行解析获取所述操作日志对应的事务的提交日志序列号,并判断确定所述提交日志序列号是否落入所述范围检查点内包括:

对所述操作日志进行解析获取所述操作日志对应的事务的提交日志序列号;

采用二分查找算法在包含多个范围检查点的二维数组中进行定位,判断确定所述提交日志序列号是否落入范围检查点内。

优选的,所述获取源数据库最早发生的活动事务的起始日志序列号,将所述最早发生的活动事务的起始日志序列号标记为恢复起始点之前还包括:

创建提交事务表以及未提交事务表,所述提交事务表用于存储恢复起始点、范围检查点以及已提交事务记录,所述未提交事务表用于存储未提交事务的事务日志。

第二方面,本发明提供一种复制装置,包括至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被程序设置为执行第一方面所述的保证复制事务一致性的方法。

第三方面,本发明还提供了一种非易失性计算机存储介质,所述计算机存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行,用于完成第一方面所述的保证复制事务一致性的方法。

与现有技术相比,本发明实施例的有益效果在于:本发明依据预设的阈值设置范围检查点,并将提交日志序列号落入范围检查点的事务日志删除,采用范围检查点机制标记已提交的事务,即,使用日志序列号范围来表示批量已提交的事务,即使数据库中存在长时间未提交的长事务,也能有效及时的删除已过期的提交事务信息,对提交事务表进行了压缩,可以有效减小提交事务表的规模。同时,在复制系统发生故障还原时,可以基于范围检查点确定相应事务是否已经同步过,能够有效缩短复制系统恢复时间以及内存资源消耗。

【附图说明】

为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例提供的一种复制系统的结构示意图;

图2是本发明实施例提供的一种保证复制事务一致性的方法的流程示意图;

图3a是本发明实施例提供一种提交事务表的数据结构示意图;

图3b是本发明实施例包含多个范围检查点的二维数组数据结构示意图;

图3c是本发明实施例提供的一种未提交事务表的数据结构示意图;

图4是图2中步骤204的具体流程示意图;

图5是本发明实施例提供的一种复制装置的结构示意图。

【具体实施方式】

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

实施例1:

参阅图1,在本实施例中,复制系统包括源数据库1、复制装置以及目标数据库2,复制装置分别与源数据库1和目标数据库2连接,以通过基于日志分析的数据复制技术保证源数据库1和目标数据库2的事务保持一致,进而实现数据同步。

具体而言,复制装置包括源端复制工具31以及目标端复制工具32。其中,源端复制工具31与源数据库1连接,源端复制工具31通过源复制进程访问源数据库1;目标端复制工具32与目标数据库2连接,目标端复制工具32通过目标复制进程访问目标数据库2;源复制进程和目标复制进程交互,以将源数据库1的数据复制到目标数据库2,从而实现源数据库1和目标数据库2数据同步的功能。

其中,源数据库1和目标数据库2可以为同构数据库,也可以为异构数据库,可以依据具体情况设计,在此,不做具体限定。其中,源数据库1和目标数据库2可以分别对应为SQLSERVER数据库、MYSQL数据库、DB2数据库、DM6数据库、DM7数据库、POSTGRESQL数据库或ORACLE数据库中的任一种。

在实际应用场景中,目标端复制工具32的启动时,首先通过目标复制进程在目标数据库2中查找是否存在提交事务表,如果不存在,则触发目标数据库2创建提交事务表。其中,目标数据库2依据提交事务表内的事务日志对该事务对应的对象进行相应的操作,以实现数据同步。其中,提交事务表用于存储已提交事务记录、恢复起始点以及检查点范围。提交事务表可以理解为数据登记表,用于记录已经同步的事务操作。

关于提交事务表的数据内存结构如图3a所示,提交事务表的数据内存结构中包括三个字段名TID、SEQID以及END_SCN。其中,TID为事务的标识码,是事务的唯一标识,SEQID为事务开始操作,END_SCN为事务提交操作。本实施例的提交事务表中有三种不同的记录信息,基于不同的记录信息数据内存结构有所差异,具体如下:

第一种记录信息:第一种记录信息用于记录恢复起始点对应的日志序列号,其TID字段内容为0,SEQID字段为恢复起始点对应的日志序列号,END_SCN值为0。在其他实施例中,TID也可以为其他特殊字符,能够依据该特殊字符区分记录信息为恢复起始点即可。同样,END_SCN也可以为其他数值。

第二种记录信息:第二种记录信息用于记录已提交的事务,其TID字段内容为已提交的事务的标识码,标识码是事务的唯一标识,从源数据库1的日志记录中提取,是一个正整数;SEQID为已提交的事务的起始日志序列号,从源数据库1的日志记录中提取,该日志序列号随着数据库操作不断递增;END_SCN为已提交事务的提交日志序列号,从源数据库1的日志记录中提取,该日志序列号随着数据库操作不断递增。

第三种记录信息:第三种记录信息用于记录范围检查点对应的日志序列号。其TID字段内容为-1,SEQID为相邻两个活动事务中较早发生的活动事务的起始序列号LSN1,END_SCN为相邻两个活动事务中较晚发生的活动事务的起始序列号LSN2,其中,LSN1和LSN2满足如下条件:LSN2-LSN1>RANGE,其中RANGE为预设阈值。其中,预设阈值依据实际情况而定,可以为400、500、1000或者其他数值。在其他实施例中,TID也可以为其他特殊字符,能够依据该特殊字符区分记录信息为范围检查点即可。

目标复制进程在启动时需要将提交事务表中的上述三种记录信息加载至目标数据库2的内存数据结构中。目标端复制工具32使用如下查询语句首先将提交事务表信息从目标数据库2中查询出来:SELECT SEQID,TID,END_SCN FROM"提交事务表"ORDER BYSEQID。然后,将第一种记录、第二种记录以TID字段为搜索关键字加载至内存哈希结构中,将第三种记录以二维数组形式进行存储。二维数组的数据内存结构具体如图3b,该二维数组的包括两列,行数依据范围检查点的数目而定,二维数组的每一行对应一个范围检查点。其中,LSNA和LSNB组成一个范围检查点,LSNC和LSND组成一个范围检查点,LSNE和LSNF组成一个范围检查点,LSNX和LSNY组成一个范围检查点,以此类推。其中,左边一列的日志序列号的值对应为数组下标为[0]的元素的值,右边一列的日志序列号的值对应为数组下标为[1]的元素的值。通过该方式,将满足条件的两个日志序列号对应设置为范围检查点的最大值和最小值,以形成范围检查点区间。

同时,目标端复制工具32在其内存中创建未提交事务表。其中,未提交事务表用于存储活动事务(未提交的事务)的事务日志。其中,事务日志包括该事务的起始操作日志(第一个操作日志)、至少一个中间操作日志以及提交操作日志(最后一个操作日志)。当接收到提交操作日志时,将该事务对应的事务日志存储至提交事务表内。关于未提交事务表的数据内存结构如图3c,未提交事务表的数据内存结构中包括两个字段名TID以及SEQID。其中,TID为事务的标识码,SEQID为未提交的事务的起始日志序列号,从源数据库1的日志记录中提取,该日志序列号随着数据库操作不断递增。

在创建好提交事务表和未提交事务表之后,复制装置依据实际情况实时获取恢复起始点和范围检查点以更新提交事务表和未提交事务表内存储的数据,以便于复制系统故障时,依据提交事务表内的恢复起始点、范围检查点以及已提交事务记录进行数据恢复。

在实际应用场景中,复制系统可能会发生故障,为了保证故障还原时,源数据库1和目标数据库2事务的一致性,同时为了保证复制系统能够准确、高效的进行恢复,本实施例提供了一种保证复制事务一致性的方法,具体请参阅图2。

步骤201:获取源数据库最早发生的活动事务的起始日志序列号,将所述最早发生的活动事务的起始日志序列号标记为恢复起始点。

其中,日志序列号用于代表数据库系统内部产生的一个物理事务,日志序列号在数据库系统的日志文件中具有全局唯一性,且日志序列号随着数据库的操作逐步递增,以区分不同的物理事务。目前,大多数数据库管理系统使用LSN(Log sequence number,简称LSN)代表数据库系统内部产生的一个物理事务,例如,SQLSERVER、MYSQL、DB2、DM6、DM7等数据库管理系统。

其中,活动事务是指未提交的事务。当活动事务被提交后就变更为已提交事务,该事务对应的操作会更新到数据库中。

在本实施例中,在源数据库和目标数据库数据同步的过程中,源数据库可能一直有事务操作在执行,例如,产生一个新事务或者某一个活动事务被提交等等。也就是说,随着时间的推移最早发生的活动事务所指代的对象会发生改变,那么相应的,最早发生的活动事务对应的起始日志序列号也会发生改变。

因此,为了保证获取到最准确的恢复起始点(故障发生之前且最接近故障发生时刻点对应的恢复起始点为最准确的恢复起始点),在优选的实施例中,采用定时器定时获取源数据库最早发生的活动事务的起始日志序列号,并判断确定当前时刻源数据库最早发生的活动事务的起始日志序列号相对于上一时刻源数据库最早发生的活动事务的起始日志序列号是否发生变更;若发生变更,则依据当前时刻源数据库最早发生的活动事务的起始日志序列号重新设置恢复起始点。并将重新设置的恢复起始点更新到提交事务表中。

具体而言,判断确定当前时刻源数据库最早发生的活动事务的起始日志序列号是否大于上一时刻源数据库最早发生的活动事务的起始日志序列号;若大于,则依据当前时刻源数据库最早发生的活动事务的起始日志序列号重新设置恢复起始点,并将重新设置的恢复起始点更新到提交事务表中。

在实际应用场景中,假设当前时刻源数据库最早发生的活动事务的起始日志序列号为LSN0,上一时刻源数据库最早发生的活动事务的起始日志序列号为LSN,当LSN0大于LSN时,在提交事务表中删除END_SCN小于等于该LSN0的所有记录以及TID等于0的记录,具体可执行如下语句:

BEGIN

DELET FROM“提交事务表”WHERE END_SCN<=LSN0OR TID=0;

INSERT INTO“提交事务表”VALUES(0,LSN0-1,0);

END

可以理解的是,在重新设置起始恢复点后,会将提交日志序列号不大于该重新设置的起始恢复点的事务日志从提交事务表中删除。

步骤202:获取源数据库相邻两个活动事务的起始日志序列号,并在所述相邻两个活动事务的起始日志序列号的差值大于预设阈值时,将所述相邻两个活动事务的起始日志序列号标记为范围检查点。

在本实施例中,依次获取源数据库相邻两个活动事务的起始日志序列号,判断确定所述相邻两个活动事务的起始日志序列号的差值是否大于预设阈值,若所述相邻两个活动事务的起始日志序列号的差值大于预设阈值,则将所述相邻两个活动事务的起始日志序列号标记为一个范围检查点,将多个范围检查点以二维数组形式进行存储,其中,二维数组的一行对应其中一个范围检查点。

例如,未提交事务表中有n个活动事务,第一个活动事务的起始日志序列号为LSN1、第二个活动事务的起始日志序列号为LSN2、第三个活动事务的起始日志序列号为LSN3……第n个活动事务的起始日志序列号为LSNn。首先,判断确定LSN2-LSN1的差值是否大于预设的阈值,如果大于预设的阈值,则将第一个活动事务的起始日志序列号为LSN1和第二个活动事务的起始日志序列号为LSN2标记为第一个范围检查点,具体可执行如下SQL语句:

BEGIN

DELETE FROM“提交事务表”WHERE SEQID>LSN1AND SEQID<LSN2AND END_SCN<LSN2AND TID>0;

INSERT INTO“提交事务表”VALUES(-1,LSN1,LSN2);

END

然后,判断确定LSN3-LSN2的差值是否大于预设的阈值,如果大于预设的阈值,则将第二个活动事务的起始日志序列号为LSN2和第三个活动事务的起始日志序列号为LSN3标记为第二个范围检查点,以此类推,获取所有的范围检查点。

在本实施例中,将前述所有的范围检查点以二维数组的形式进行存储,其中,二维数组的一行对应其中一个范围检查点。数组下标为[0]的元素记录较小的起始日志序列号,数组下标为[1]的元素记录较大的起始日志序列号。通过前述的方式设置范围检查点,再依据范围检查点标记事务是否已经被提交,可以有效减小提交事务表所占用的内存。

步骤203:获取源数据库事务日志,删除提交日志序列号小于所述恢复起始点的事务日志以及提交日志序列号落入范围检查点的事务日志以得到已提交事务记录。

在本实施例中,源端复制工具实施访问源数据库以获取源数据库事务日志,并将获取到的事务日志发送给目标端复制工具,目标端复制工具依据事务提交日志的日志序列号的大小执行相应的操作。

具体而言,目标端复制工具首先删除提交日志序列号小于恢复起始点的事务日志,然后,再删除提交日志序列号落入范围检查点的事务日志,同时将相应范围点对应的两个起始日志序列号插入到提交事务表中。如此,使用一行范围检查点记录信息,表示批量的提交事务信息,对提交事务表进行了压缩,避免长事务导致提交事务表规模过大的情况的发生。

在此需要说明的是,当有至少一个事务日志的日志序列号落入某个范围检查点内时,将该范围检查点插入到提交事务表中,表示批量的提交事务信息。当没有任何事务日志的日志序列号落入某个范围检查点内时,则该范围检查点无需记录在提交事务表内。

步骤204:在故障恢复时,依据所述恢复起始点、所述范围检查点以及所述已提交事务记录进行数据恢复,以保证源数据库和目标数据库的事务一致性。

在本实施例中,在复制系统故障恢复时,目标端复制工具首先加载提交事务表信息至内存结构中,对于范围检查点以二维数组形式进行存储,复制系统通过从提交事务表中获取的恢复起始点进行恢复。

具体请参阅图3,步骤204:在故障恢复时,依据所述恢复起始点、所述范围检查点以及所述已提交事务记录进行数据恢复,以保证源数据库和目标数据库的事务一致性包括如下步骤:

步骤2041:将所述恢复起始点发送至所述源数据库并接收所述源数据库所发送的操作日志,其中,所述操作日志的日志序列号大于所述恢复起始点对应的日志序列号。

在本实施例中,复制系统在进行故障恢复时,源数据库必须获取恢复起始点,依据恢复起始点发送事务日志到目标数据库。其中,恢复起始点为故障发生时源数据库最早发生的活动事务的起始日志序列号。

具体而言,源端复制工具启动源复制进程,并向目标端复制工具发送请求获取恢复起始点的命令消息,以获取日志分析的起始日志序列号。目标端复制工具接收到源端复制工具的请求指令后,执行如下查询:SELECT SEQID FROM“提交事务表”WHERE TID=0,进而从提交事务表中获取恢复起始点对应的日志序列号。目标端复制工具将获取到的恢复起始点对应的日志序列号发送给源端复制工具,源端复制工具接收到恢复起始点对应的日志序列号后,在源数据库中依据该恢复起始点定位日志分析点。即,源端复制工具从源数据库获取日志序列号大于所述恢复起始点对应的日志序列号的操作日志,并将操作日志发送给目标端复制工具。

步骤2042:对所述操作日志进行解析获取所述操作日志对应的事务标识码。

在本实施例中,目标端复制工具对操作日志进行解析获取操作日志对应的事务标识码。

步骤2043:判断确定所述事务标识码是否存在于已提交事务记录内,若存在,则执行步骤2044;若不存在,则执行步骤2045。

在本实施例中,接收到事务的提交日志后,首先以事务的标识码为搜索关键字在提交事务表内容进行搜索,以判断确定事务标识码是否存在于已提交事务记录内。若存在,则执行步骤2044;若不存在,则执行步骤2045。

步骤2044:则所述操作日志对应的事务在故障发生前已经加载至目标数据库,忽略所述操作日志。

若该事务标识码存在于已提交事务记录内,则说明该操作日志对应的事务在故障发生前已经加载至目标数据库,忽略该操作日志。

步骤2045:对所述操作日志进行解析获取所述操作日志对应的事务的提交日志序列号,并判断确定所述提交日志序列号是否落入所述范围检查点内。

若该事务标识码不存在于已提交事务记录内,则对操作日志进行解析获取操作日志对应的事务的提交日志序列号,并判断确定提交日志序列号是否落入范围检查点内。为了提高判断的准确性,在优选的实施例中,若该事务标识码不存在于已提交事务记录内,则对操作日志进行解析获取操作日志对应的事务的提交日志序列号以及起始日志序列号,并判断确定提交日志序列号以及起始日志序列号是否落入范围检查点内。若提交日志序列号以及起始日志序列号均落入范围检查点内,则操作日志对应的事务在故障发生前已经加载至目标数据库,忽略操作日志。

在优选的实施例中,由于提交事务表中可能存在多个范围检查点,为了提高查找的速度,可以采用二分查找算法在包含多个范围检查点的二维数组中进行定位,判断确定所述提交日志序列号是否落入范围检查点内。

步骤2046:若所述提交日志序列号落入所述范围检查点内,则所述操作日志对应的事务在故障发生前已经加载至目标数据库,忽略所述操作日志。

在本实施中,若提交日志序列号落入范围检查点内,则操作日志对应的事务在故障发生前已经加载至目标数据库,忽略操作日志。

例如,假设该提交事务的提交日志序列号为LSN_COMMIT。该某个范围检查点中较小的日志序列号为LSN_C,较大的日志序列号为LSN_D。

如果LSN_C<LSN_COMMIT<LSN_D,则提交日志序列号LSN_COMMIT落入范围检查点内,表明该提交事务在故障发生前已经加载至目标数据库,忽略该操作日志。

为提高判断的准确性,在另一个实施例中,若提交日志序列号以及起始日志序列号均落入范围检查点内,则操作日志对应的事务在故障发生前已经加载至目标数据库,忽略操作日志。

例如,假设该提交事务的起始日志序列号为LSN_START,该提交事务的提交日志序列号为LSN_COMMIT。该某个范围检查点中较小的日志序列号为LSN_C,较大的日志序列号为LSN_D。

如果LSN_C<LSN_START<LSN_D,LSN_C<LSN_COMMIT<LSN_D,则起始日志序列号为LSN_START和提交日志序列号LSN_COMMIT均落入范围检查点内则表明该提交事务在故障发生前已经加载至目标数据库,忽略该操作日志。

步骤2047:若所述提交日志序列号未落入所述范围检查点内,则所述操作日志对应的事务在故障发生前未加载至目标数据库,所述操作日志需要在目标数据库进行同步。

若提交日志序列号未落入范围检查点内,则操作日志对应的事务在故障发生前未加载至目标数据库,将操作日志在目标数据库进行同步。具体地,在接收到操作日志对应的事务的提交日志时,首先判断确定提交日志序列号是否落入范围检查点内,若未落入范围检查点内,则将操作日志对应的事务日志添加到已提交事务记录,然后,依据操作日志对应的事务日志对目标数据库进行数据同步。

区别于现有技术,本发明依据预设的阈值设置范围检查点,并将提交日志序列号落入范围检查点的事务日志删除,采用范围检查点机制标记已提交的事务,即,使用日志序列号范围来表示批量已提交的事务,即使数据库中存在长时间未提交的长事务,也能有效及时的删除已过期的提交事务信息,对提交事务表进行了压缩,可以有效减小提交事务表的规模。同时,在复制系统发生故障还原时,可以基于范围检查点确定相应事务是否已经同步过,能够有效缩短复制系统恢复时间以及内存资源消耗。

实施例2

请参阅图5,图5复制装置是本发明实施例提供的一种复制装置的结构示意图。本实施例的复制装置括一个或多个处理器51以及存储器52。其中,图5中以一个处理器51为例。

处理器51和存储器52可以通过总线或者其他方式连接,图5中以通过总线连接为例。

存储器52作为一种基于数据同步的非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如实施例1中的保证复制事务一致性的方法以及对应的程序指令。处理器51通过运行存储在存储器52中的非易失性软件程序、指令以及模块,从而执行保证复制事务一致性的方法的各种功能应用以及数据处理,实现实施例1的保证复制事务一致性的方法的功能。

其中,存储器52可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器52可选包括相对于处理器51远程设置的存储器,这些远程存储器可以通过网络连接至处理器51。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

关于保证复制事务一致性的方法请参照图1~图4及相关的文字描述在此,不再赘述。

值得说明的是,上述装置和系统内的模块、单元之间的信息交互、执行过程等内容,由于与本发明的处理方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。

本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(Read Only Memory,简写为ROM)、随机存取存储器(Random AccessMemory,简写为RAM)、磁盘或光盘等。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号