数据库回滚同步中内存的控制方法及设备
技术领域
本发明实施例涉及数据库同步技术领域,尤其涉及一种数据库回滚同步中内存的控制方法及设备。
背景技术
基于日志解析来进行数据库到其他异构数据库的数据同步,即是通过实时读取数据库的REDO日志文件或归档日志文件,捕获出增量的REDO记录,然后分析REDO记录中改变向量(Change vector)的内容解析出数据库的DML(Data Manipulation Language)操作以及相应的数据,将这些信息转换后发送到目标数据库进行SQL逆向恢复,然后执行同步。为了进行事务级的同步,支持事务部分回滚同步,捕获分析同步线程在解析数据库的REDO记录时,需要按照SCN(System Change Number)的顺序将同一事务的所有REDO操作进行归集,并且按照事务内部操作的顺序,对DML操作进行内部编号。在解析出数据库的部分回滚操作后,首先根据回滚操作的DBA找到所属回滚事务,然后根据DBA定位回滚事务中的操作行编号,同步过程中删除大于回滚行编号之后的DML操作,即可完成部分回滚的同步。
为此,对于源端数据库上的所有未提交的待同步事务,需要在内存中申请空间用于缓存该事务各操作的所有DBA信息以及相对应的操作编号。这样,当捕获到事务的部分回滚操作后,就能从缓存DBA信息中定位到需删除的回滚操作。但是,当源端数据库执行大量事务操作后,内存中需要缓存大量事务DML操作的DBA信息,造成源端系统内存资源紧张。因此,找到一种对这种部分回滚方式进行优化,减少源端日志分析的内存空间占用的方法,就成为业界亟待解决的技术问题。
发明内容
针对现有技术存在的上述问题,本发明实施例提供了一种数据库回滚同步中内存的控制方法及设备。
第一方面,本发明的实施例提供了一种数据库回滚同步中内存的控制方法,包括:若日志分析线程解析到数据库的DML操作事务,则根据所述DML操作事务的ID在哈希表中定位相应事务结构,若定位到所述DML操作事务隶属的事务结构,且所述DML操作事务的第一dba_array结构中存储的dba信息的值,超过第一dba_array结构的存储阈值,则对所述DML操作事务分配第二dba_array结构,并将所述dba信息同时存储在所述第一dba_array结构和第二dba_array结构中;若所述dba信息的值,超过所述第一dba_array结构的存储阈值与第二dba_array结构的存储阈值之和,则将所述dba信息存入存储磁盘,并释放所述dba信息占据的内存空间,将所述第一dba_array结构添加至dba_array链表末尾;其中,所述DML为数据操作语言;所述dba信息为数据块地址信息。
进一步地,所述的数据库回滚同步中内存的控制方法,还包括:若所述DML操作事务的第一dba_array结构中存储的dba信息的值,小于等于第一dba_array结构的存储阈值,则将所述dba信息插入所述第一dba_array结构的dba_lst链表中。
进一步地,所述的数据库回滚同步中内存的控制方法,还包括:将所述第二dba_array结构添加至所述第一dba_array结构的末尾。
进一步地,所述的数据库回滚同步中内存的控制方法,在所述则将所述dba信息存入存储磁盘之前,还包括:启动所述存储磁盘。
进一步地,所述的数据库回滚同步中内存的控制方法,在所述将所述第一dba_array结构添加至dba_array链表末尾之后,还包括:更新所述第一dba_array结构的文件写入偏移。
第二方面,本发明的实施例提供了一种数据库回滚同步中内存的控制装置,包括:
dba信息存储模块,用于若日志分析线程解析到数据库的DML操作事务,则根据所述DML操作事务的ID在哈希表中定位相应事务结构,若定位到所述DML操作事务隶属的事务结构,且所述DML操作事务的第一dba_array结构中存储的dba信息的值,超过第一dba_array结构的存储阈值,则对所述DML操作事务分配第二dba_array结构,并将所述dba信息同时存储在所述第一dba_array结构和第二dba_array结构中;
内存空间释放模块,用于若所述dba信息的值,超过所述第一dba_array结构的存储阈值与第二dba_array结构的存储阈值之和,则将所述dba信息存入存储磁盘,并释放所述dba信息占据的内存空间,将所述第一dba_array结构添加至dba_array链表末尾;
其中,所述DML为数据操作语言;所述dba信息为数据块地址信息。
第三方面,本发明的实施例提供了一种电子设备,包括:
至少一个处理器;以及
与处理器通信连接的至少一个存储器,其中:
存储器存储有可被处理器执行的程序指令,处理器调用程序指令能够执行第一方面的各种可能的实现方式中任一种可能的实现方式所提供的数据库回滚同步中内存的控制方法。
第四方面,本发明的实施例提供了一种非暂态计算机可读存储介质,非暂态计算机可读存储介质存储计算机指令,计算机指令使计算机执行第一方面的各种可能的实现方式中任一种可能的实现方式所提供的数据库回滚同步中内存的控制方法。
本发明实施例提供的数据库回滚同步中内存的控制方法及设备,通过dba_array结构的存储阈值判断需要存储的dba信息,是否可以存储在两个dba_array结构中,在不能存储的情况下将dba信息存入存储磁盘,并将dba信息占据的内存空间释放,可以在数据库回滚同步执行大量DML操作事务时,有效缓解内存资源紧张的情况。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图做一简单的介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的数据库回滚同步中内存的控制方法流程图;
图2为本发明实施例提供的事物结构示意图;
图3为本发明实施例提供的dba_array结构示意图;
图4为本发明实施例提供的内存空间使用及释放原理示意图;
图5为本发明实施例提供的数据库回滚同步中内存的控制装置结构示意图;
图6为本发明实施例提供的电子设备的实体结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。另外,本发明提供的各个实施例或单个实施例中的技术特征可以相互任意结合,以形成可行的技术方案,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时,应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
本发明实施例提供了一种数据库回滚同步中内存的控制方法,参见图1,该方法包括:
101、若日志分析线程解析到数据库的DML操作事务,则根据所述DML操作事务的ID在哈希表中定位相应事务结构,若定位到所述DML操作事务隶属的事务结构,且所述DML操作事务的第一dba_array结构中存储的dba信息的值,超过第一dba_array结构的存储阈值,则对所述DML操作事务分配第二dba_array结构,并将所述dba信息同时存储在所述第一dba_array结构和第二dba_array结构中;
102、若所述dba信息的值,超过所述第一dba_array结构的存储阈值与第二dba_array结构的存储阈值之和,则将所述dba信息存入存储磁盘,并释放所述dba信息占据的内存空间,将所述第一dba_array结构添加至dba_array链表末尾;
其中,所述DML为数据操作语言;所述dba信息为数据块地址信息。
基于上述方法实施例的内容,作为一种可选的实施例,本发明实施例中提供的数据库回滚同步中内存的控制方法,还包括:若所述DML操作事务的第一dba_array结构中存储的dba信息的值,小于等于第一dba_array结构的存储阈值,则将所述dba信息插入所述第一dba_array结构的dba_lst链表中。
基于上述方法实施例的内容,作为一种可选的实施例,本发明实施例中提供的数据库回滚同步中内存的控制方法,还包括:将所述第二dba_array结构添加至所述第一dba_array结构的末尾。
基于上述方法实施例的内容,作为一种可选的实施例,本发明实施例中提供的数据库回滚同步中内存的控制方法,在所述则将所述dba信息存入存储磁盘之前,还包括:启动所述存储磁盘。
基于上述方法实施例的内容,作为一种可选的实施例,本发明实施例中提供的数据库回滚同步中内存的控制方法,在所述将所述第一dba_array结构添加至dba_array链表末尾之后,还包括:更新所述第一dba_array结构的文件写入偏移。
本发明实施例提供的数据库回滚同步中内存的控制方法,通过dba_array结构的存储阈值判断需要存储的dba信息,是否可以存储在两个dba_array结构中,在不能存储的情况下将dba信息存入存储磁盘,并将dba信息占据的内存空间释放,可以在数据库回滚同步执行大量DML操作事务时,有效缓解内存资源紧张的情况。
为了更加清晰的阐述本发明的技术方案的本质,在上述实施例的基础上,拟提出一个整体的实施例,从整体上展现本发明技术方案的全貌。需要说明的是,该整体实施例仅仅是为了将本发明的技术本质进一步体现出来,并不是对本发明保护范围的限制,本领域技术人员在本发明各个实施例的基础上,通过组合技术特征,得到的任何满足本发明技术方案本质的组合型技术方案,只要能够实际实施,均在本专利的保护范围之内。
若日志分析线程解析到数据库的INSERT、UPDATE、DELETE操作,根据事务ID在步骤S1所述事务哈希表中定位相应事务结构;具体地,所述事务的结构可以参见图2,事务的结构中包括事务ID,事务起始SCN(System Change Number),SCN,dba_array链表link。其中,link是用于将多个事务串联成链表。
若定位到DML操作所属事务结构,判断当前事务的第一个dba_array结构存储的dba信息是否超过阈值;具体地,所述dba_array结构可以参见图3。图3中是两个dba_array结构通过link2进行连接的模式。其中,dba_array结构包括哈希表指针,dba_lst,文件写入偏移和link1;dba_lst的结构包括dba,op_id,link2。由图3中可见,两个dba_array结构最终通过link2进行连接,组成事物链表。
若没有超过阈值,则将当前分析的DML操作的dba信息继续插入到当前dba_array结构的dba_lst中;
若超过所设定的阈值,则继续分配该事务的第二个dba_array结构,并将其添加到第一个dba_array结构的末尾,同时将dba信息开始插入至第二个dba_array结构中;
若当前事务已分配了两个dba_array存储结构,并且第二个结构也已达到存储阈值,则首先启动dba信息磁盘存储单元,将事务的第一个dba_array结构所存储的dba信息写入磁盘文件,并释放内存存储空间;然后将该结构重新加入至dba_array链表末尾,同时更新第一个dba_array结构的文件写入偏移的值,以供下次存储使用;
具体地,上述内存存储空间控制原理的详细内容可以参见图4。由图4可见,初始时,事务分配一个dba_array结构(dba_array[0]),新的dba信息直接插入至dba_array[0]结构(未满)中;当事务初始分配的dba_array[0]结构空间已满,即达到存储阈值,则继续分配第二个dba_array结构(dba_array[1],未满),并将新的dba信息插入至dba_array[1]结构中;当事务的两个dba_array结构空间均满,则将链表dba_array[0]结构记录的dba信息写入文件存储,并释放dba信息占用的内存空间(重置为空),同时将其重新加入至链表末尾,更新dba_array[0]结构的文件偏移。其中,dba_array[0]的初始文件偏移仅仅是文件头大小的512字节;dba_array[1]的偏移为512字节(文件头大小)加存储阈值;dba_array[0]重置后的文件偏移为512字(文件头大小)节加两倍存储阈值。如若事务还有dba信息需要插入,则首先获取链表末尾的dba_array结构(dba_array[0])进行插入,如果该结构已满,则将链表的dba_array[0]结构进行写文件操作,并循环重复上述重置过程。
对于存储大量事务的dba信息,使用上述方法,循环使用两个dba_array结构,即可满足大量事务的存储要求,同时在内存使用方面,最多仅需保留两个dba_array管理空间。
本发明各个实施例的实现基础是通过具有处理器功能的设备进行程序化的处理实现的。因此在工程实际中,可以将本发明各个实施例的技术方案及其功能封装成各种模块。基于这种现实情况,在上述各实施例的基础上,本发明的实施例提供了一种数据库回滚同步中内存的控制装置,该装置用于执行上述方法实施例中的数据库回滚同步中内存的控制方法。参见图5,该装置包括:
dba信息存储模块501,用于若日志分析线程解析到数据库的DML操作事务,则根据所述DML操作事务的ID在哈希表中定位相应事务结构,若定位到所述DML操作事务隶属的事务结构,且所述DML操作事务的第一dba_array结构中存储的dba信息的值,超过第一dba_array结构的存储阈值,则对所述DML操作事务分配第二dba_array结构,并将所述dba信息同时存储在所述第一dba_array结构和第二dba_array结构中;
内存空间释放模块502,用于若所述dba信息的值,超过所述第一dba_array结构的存储阈值与第二dba_array结构的存储阈值之和,则将所述dba信息存入存储磁盘,并释放所述dba信息占据的内存空间,将所述第一dba_array结构添加至dba_array链表末尾;
其中,所述DML为数据操作语言;所述dba信息为数据块地址信息。
本发明实施例提供的数据库回滚同步中内存的控制装置,采用dba信息存储模块和内存空间释放模块,通过dba_array结构的存储阈值判断需要存储的dba信息,是否可以存储在两个dba_array结构中,在不能存储的情况下将dba信息存入存储磁盘,并将dba信息占据的内存空间释放,可以在数据库回滚同步执行大量DML操作事务时,有效缓解内存资源紧张的情况。
需要说明的是,本发明提供的装置实施例中的装置,除了可以用于实现上述方法实施例中的方法外,还可以用于实现本发明提供的其他方法实施例中的方法,区别仅仅在于设置相应的功能模块,其原理与本发明提供的上述装置实施例的原理基本相同,只要本领域技术人员在上述装置实施例的基础上,参考其他方法实施例中的具体技术方案,通过组合技术特征,在保证技术方案具备实用性的前提下,就可以对上述装置实施例中的装置进行改进,从而得到相应的装置类实施例,用于实现其他方法类实施例中的方法。例如:
基于上述装置实施例的内容,作为一种可选的实施例,本发明实施例中提供的数据库回滚同步中内存的控制装置,还包括:判断插入模块,用于若所述DML操作事务的第一dba_array结构中存储的dba信息的值,小于等于第一dba_array结构的存储阈值,则将所述dba信息插入所述第一dba_array结构的dba_lst链表中。
基于上述装置实施例的内容,作为一种可选的实施例,本发明实施例中提供的数据库回滚同步中内存的控制装置,还包括:dba_array结构定位模块,用于将所述第二dba_array结构添加至所述第一dba_array结构的末尾。
基于上述装置实施例的内容,作为一种可选的实施例,本发明实施例中提供的数据库回滚同步中内存的控制装置,还包括:存储磁盘启动模块,用于在所述则将所述dba信息存入存储磁盘之前,启动所述存储磁盘。
基于上述装置实施例的内容,作为一种可选的实施例,本发明实施例中提供的数据库回滚同步中内存的控制装置,还包括:文件写入偏移更新模块,用于在所述将所述第一dba_array结构添加至dba_array链表末尾之后,更新所述第一dba_array结构的文件写入偏移。
本发明实施例的方法是依托电子设备实现的,因此对相关的电子设备有必要做一下介绍。基于此目的,本发明的实施例提供了一种电子设备,如图6所示,该电子设备包括:至少一个处理器(processor)601、通信接口(Communications Interface)604、至少一个存储器(memory)602和通信总线603,其中,至少一个处理器601,通信接口604,至少一个存储器602通过通信总线603完成相互间的通信。至少一个处理器601可以调用至少一个存储器602中的逻辑指令,以执行如下方法:若日志分析线程解析到数据库的DML操作事务,则根据所述DML操作事务的ID在哈希表中定位相应事务结构,若定位到所述DML操作事务隶属的事务结构,且所述DML操作事务的第一dba_array结构中存储的dba信息的值,超过第一dba_array结构的存储阈值,则对所述DML操作事务分配第二dba_array结构,并将所述dba信息同时存储在所述第一dba_array结构和第二dba_array结构中;若所述dba信息的值,超过所述第一dba_array结构的存储阈值与第二dba_array结构的存储阈值之和,则将所述dba信息存入存储磁盘,并释放所述dba信息占据的内存空间,将所述第一dba_array结构添加至dba_array链表末尾;其中,所述DML为数据操作语言;所述dba信息为数据块地址信息。
此外,上述的至少一个存储器602中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。例如包括:若日志分析线程解析到数据库的DML操作事务,则根据所述DML操作事务的ID在哈希表中定位相应事务结构,若定位到所述DML操作事务隶属的事务结构,且所述DML操作事务的第一dba_array结构中存储的dba信息的值,超过第一dba_array结构的存储阈值,则对所述DML操作事务分配第二dba_array结构,并将所述dba信息同时存储在所述第一dba_array结构和第二dba_array结构中;若所述dba信息的值,超过所述第一dba_array结构的存储阈值与第二dba_array结构的存储阈值之和,则将所述dba信息存入存储磁盘,并释放所述dba信息占据的内存空间,将所述第一dba_array结构添加至dba_array链表末尾;其中,所述DML为数据操作语言;所述dba信息为数据块地址信息。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。基于这种认识,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
在本专利中,术语"包括"、"包含"或者其任何其它变体意在涵盖非排它性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其它要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句"包括……"限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。