掌桥专利:专业的专利平台
掌桥专利
首页

一种数据库事务回滚方法及装置

文献发布时间:2024-04-18 19:59:31


一种数据库事务回滚方法及装置

技术领域

本发明涉及事务回滚处理的技术领域,特别是涉及一种数据库事务回滚方法及装置。

背景技术

现有技术中,在对数据库的更新、插入时,对于执行的每个事务生成的事务日志记录,都需先写WAL日志,再写入事务撤销数据,该过程中普遍将事务日志记录中的事务重做数据与事务撤销分开存储,将事务重做数据存储在WAL文件,将事务撤销数据存储在指定表空间中,且对于对事务撤销数据的修改还会生成其对应的WAL日志,由于事务撤销数据往往需要预留大量的磁盘空间,导致磁盘空间占用大,且发生事务回滚时,还需要基于单独存储的事务撤销数据对WAL日志进行回滚,导致事务日志回滚效率低下。

发明内容

本发明要解决的技术问题是:提供一种数据库事务回滚方法及装置,能提高事务日志回滚效率,并减少日志磁盘占用空间。

为了解决上述技术问题,本发明提供了一种数据库事务回滚方法,包括:

将事务日志记录存储在WAL日志中,在监听到事务回滚指令时,获取所述事务回滚指令中的回滚事务ID,以及所述WAL日志中的末位事务日志封存节点;

基于所述回滚事务ID,对所述WAL日志进行反向遍历,直至首次检测到与所述回滚事务ID相同的事务ID,将所述事务ID所在的事务日志记录的日志序列号作为当前日志序列号;

基于所述当前日志序列号对所述WAL日志进行反向迭代处理,直至检测到所述末位事务封存节点,并在反向迭代过程中,依次基于读取到的各个日志序列号对应的第一事务日志记录对事务数据进行事务回滚,得到事务日志回滚结果数据。

在一种可能的实现方式中,将事务日志记录存储在WAL日志中,具体包括:

所述事务日志记录包括行信息、事务重做信息和事务撤销信息;

将所述行信息存储到所述WAL日志的行信息单元中;

将所述事务重做信息存储到所述WAL日志的事务重做信息单元中;

将所述事务撤销信息存储到所述WAL日志的事务撤销信息单元中。

在一种可能的实现方式中,在反向迭代过程中,依次基于读取到的各个日志序列号对应的第一事务日志记录对事务数据进行事务回滚,得到事务回滚结果数据,具体包括:

在反向迭代过程中,基于反向遍历顺序依次读取各个日志序列号对应的第一事务日志记录,并将读取到的所述第一事务日志记录依次作为待回滚事务日志记录;其中,所述待回滚事务日志记录包括待回滚行信息和待回滚事务撤销信息,所述待回滚行信息包括待回滚行号;

基于所述待回滚行号,遍历所述事务数据,获取所述事务数据中与所述待回滚行号相同的目标数据行号,并基于所述目标数据行号,确定目标数据行;

根据所述待回滚事务撤销信息与所述目标数据行进行数据回滚处理,得到目标事务回滚结果数据。

在一种可能的实现方式中,根据所述待回滚事务撤销信息与所述目标数据行进行数据回滚处理,得到目标事务回滚结果数据前,还包括:

获取所述待回滚事务日志记录对应的待回滚事务重做信息,其中,所述待回滚事务重做信息包括待回滚执行操作;

判断所述待回滚执行操作是否为插入执行操作,若是,则对所述目标数据行进行删除处理,否则,则根据所述待回滚事务撤销信息与所述目标数据行进行数据回滚处理,得到目标事务回滚结果数据。

在一种可能的实现方式中,根据所述待回滚事务撤销信息与所述目标数据行进行数据回滚处理,得到目标事务回滚结果数据,具体包括:

获取所述待回滚事务撤销信息,其中,所述待回滚事务撤销信息包括待回滚更新前值,同时获取所述目标数据行的目标数据值;

基于所述待回滚更新前值对所述目标数据值进行更新,以使将所述目标数据值更新为所述待回滚更新前值,得到目标事务回滚结果数据。

在一种可能的实现方式中,得到事务回滚结果数据后,还包括:

根据所述事务回滚结果数据,生成事务日志补偿记录,将所述事务日志补偿记录存储在WAL日志中,其中,所述事务日志补偿记录包括补偿行信息和补偿事务重做信息。

本发明还提供了一种数据库事务回滚装置,包括:事务日志存储模块、事务回滚指令监听模块、反向遍历模块和事务回滚模块;

其中,所述事务日志存储模块,用于将事务日志记录存储在WAL日志中;

所述事务回滚指令监听模块,用于在监听到事务回滚指令时,获取所述事务回滚指令中的回滚事务ID,以及所述WAL日志中的末位事务日志封存节点;

所述反向遍历模块,用于基于所述回滚事务ID,对所述WAL日志进行反向遍历,直至检测到与所述回滚事务ID相同的事务ID,将所述事务ID所在的事务日志记录的日志序列号作为当前日志序列号;

所述事务回滚模块,用于基于所述当前日志序列号对所述WAL日志进行反向迭代处理,直至检测到所述末位事务封存节点,并在反向迭代过程中,依次基于读取到的各个日志序列号对应的第一事务日志记录对事务数据进行事务回滚,得到事务日志回滚结果数据。

在一种可能的实现方式中,所述事务日志存储模块,用于将事务日志记录存储在WAL日志中,具体包括:

所述事务日志记录包括行信息、事务重做信息和事务撤销信息;

将所述行信息存储到所述WAL日志的行信息单元中;

将所述事务重做信息存储到所述WAL日志的事务重做信息单元中;

将所述事务撤销信息存储到所述WAL日志的事务撤销信息单元中。

在一种可能的实现方式中,所述事务回滚模块,用于在反向迭代过程中,依次基于读取到的各个日志序列号对应的第一事务日志记录对事务数据进行事务回滚,得到事务回滚结果数据,具体包括:

在反向迭代过程中,基于反向遍历顺序依次读取各个日志序列号对应的第一事务日志记录,并将读取到的所述第一事务日志记录依次作为待回滚事务日志记录;其中,所述待回滚事务日志记录包括待回滚行信息和待回滚事务撤销信息,所述待回滚行信息包括待回滚行号;

基于所述待回滚行号,遍历所述事务数据,获取所述事务数据中与所述待回滚行号相同的目标数据行号,并基于所述目标数据行号,确定目标数据行;

根据所述待回滚事务撤销信息与所述目标数据行进行数据回滚处理,得到目标事务回滚结果数据。

在一种可能的实现方式中,所述事务回滚模块,用于根据所述待回滚事务撤销信息与所述目标数据行进行数据回滚处理,得到目标事务回滚结果数据前,还包括:

获取所述待回滚事务日志记录对应的待回滚事务重做信息,其中,所述待回滚事务重做信息包括待回滚执行操作;

判断所述待回滚执行操作是否为插入执行操作,若是,则对所述目标数据行进行删除处理,否则,则根据所述待回滚事务撤销信息与所述目标数据行进行数据回滚处理,得到目标事务回滚结果数据。

在一种可能的实现方式中,所述事务回滚模块,用于根据所述待回滚事务撤销信息与所述目标数据行进行数据回滚处理,得到目标事务回滚结果数据,具体包括:

获取所述待回滚事务撤销信息,其中,所述待回滚事务撤销信息包括待回滚更新前值,同时获取所述目标数据行的目标数据值;

基于所述待回滚更新前值对所述目标数据值进行更新,以使将所述目标数据值更新为所述待回滚更新前值,得到目标事务回滚结果数据。

在一种可能的实现方式中,所述事务回滚模块,用于得到事务回滚结果数据后,还包括:

根据所述事务回滚结果数据,生成事务日志补偿记录,将所述事务日志补偿记录存储在WAL日志中,其中,所述事务日志补偿记录包括补偿行信息和补偿事务重做信息。

本发明还提供了一种终端设备,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述处理器执行所述计算机程序时实现如上述任意一项所述的数据库事务回滚方法。

本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质包括存储的计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在设备执行如上述任意一项所述的数据库事务回滚方法。

本发明还提供了一种计算机程序产品,所述计算机程序产品在计算机设备上运行时,使得所述计算机设备实现如上述任意一项所述的数据库事务回滚方法。

本发明实施例一种数据库事务回滚方法及装置,与现有技术相比,具有如下有益效果:

通过将事务日志记录存储在WAL日志中,避免了重复写入WAL日志和事务撤销段的操作,从而减少了对数据库更新、插入性能的影响,同时可以减少磁盘空间的占用;在监听到事务回滚指令时,获取所述WAL日志中的末位事务日志封存节点;基于所述当前日志序列号对所述WAL日志进行反向迭代处理,直至检测到所述末位事务封存节点,并在反向迭代过程中,依次基于读取到的各个日志序列号对应的第一事务日志记录对事务数据进行事务回滚,得到事务日志回滚结果数据;与现有技术方案相比,本发明的技术方案通过将事务日志记录存于WAL日志,来减少总的日志写入量,从而提高事务日志回滚效率,并减少日志磁盘占用空间。

附图说明

图1是本发明提供的一种数据库事务回滚方法的一种实施例的流程示意图;

图2是本发明提供的一种数据库事务回滚装置的一种实施例的结构示意图;

图3是本发明提供的一种实施例的WAL日志的格式示意图;

图4是本发明提供的一种实施例的反向迭代示意图;

图5是本发明提供的一种实施例的WAL日志示意图;

图6是本发明提供的一种实施例的事务回滚过程示意图。

具体实施方式

下面将结合本发明中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例1,参见图1,图1是本发明提供的一种数据库事务回滚方法的一种实施例的流程示意图,如图1所示,该方法包括步骤101-步骤102,具体如下:

步骤101:将事务日志记录存储在WAL日志中,在监听到事务回滚指令时,获取所述事务回滚指令中的回滚事务ID,以及所述WAL日志中的末位事务日志封存节点。

一实施例中,由于在对数据库进行数据更新和数据插入时,会基于对数据库中数据行的具体操作,生成相应操作的事务日志记录,其中,所述事务日志记录包括行信息、事务重做信息和事务撤销信息。

一实施例中,所述行信息为行唯一标识符;优选的,所述行信息为行号;所述事务重做信息记录了数据修改后的值,包括事务id、执行操作和更新后值;所述事务撤销信息记录了数据修改前的值,包括更新前事务id和更新前值;所述事务撤销信息用于保证事务的一致性,如果事务需要回滚,可以通过事务撤销信息将数据还原到修改前的状态。

一实施例中,所述WAL日志中包含有行信息单元、事务重做信息单元、事务撤销信息单元,如图3所示,图3是WAL日志的格式示意图。

一实施例中,所述将事务日志记录存储在WAL日志中,包括:将所述行信息存储到所述WAL日志的行信息单元格中;将所述事务重做信息存储到所述WAL日志的事务重做信息单元格中;将所述事务撤销信息存储到所述WAL日志的事务撤销信息单元格中,其中,所述事务重做信息为Redo信息,所述事务撤销信息为Undo信息。

具体的,在对数据库中的数据行执行相应操作时,将该操作对应的行信息单元格、事务重做信息和事务撤销信息统一存储在WAL日志的同一条事务日志记录里,且基于WAL日志能清楚的记录每个事务的操作序列,包括增删改等操作,以及每个操作对应的数据变更情况,区别于现有技术中,对数据库更新、插入数据时需先写WAL日志,再写入事务撤销段,对事务撤销段的修改还会生成其对应的WAL日志,导致磁盘空间占用大的问题。

对本实施例中将事务日志记录存储在WAL日志中进行举例说明:假设事务的操作序列为对在事务id为1的事务中第1行记录进行新增,对事务id为2的事务中第2行记录进行新增,对在事务id为1的事务中第1行记录进行修改,以及对事务id为2的事务中第2行记录进行修改;基于事务的操作序列,将得到的每个事务日志记录基于执行顺序依次填写到WAL日志中,如对在事务id为1的事务中第1行记录进行新增,其对应得到的事务日志记录的行信息为1,事务重做信息中事务id为1、执行操作为插入insert,更新后值为20,由于该执行操作为插入insert,因此,该事务日志记录没有对应的事务撤销信息;对在事务id为1的事务中第1行记录进行修改,对应得到的事务日志记录的行信息为1,事务重做信息为事务id为1、执行操作为更新update,更新后值为10,由于该执行操作为插入更新update,对应的事务撤销信息中更新前事务id为1,更新前值为20,对事务id为2的事务中第2行记录进行新增和修改的操作对应的事务日志记录的获取,同事务id为1的事务中第1行记录进行新增和修改的操作对应的事务日志记录的获取;基于上述操作,得到的WAL日志如图5所示,图5是WAL日志示意图。

一实施例中,由于当一个事务发生错误或异常时,它可能会引起数据不一致或中断其他事务的执行,在这种情况下,系统必须将事务回滚到先前的状态,以确保数据的一致性和完整性,因此,还需要监听事务回滚指令,当监听到事务回滚指令时,及时将数据库恢复到最近可靠的状态,并且可以保证数据库的一致性,从而避免数据的丢失和损坏。

优选的,需要进行回滚的场景有:当客户端发送回滚命令时,会监听到事务回滚指令;当事务中命令执行失败或异常关闭时,由于没有正确提交或回滚,导致checkpointLSN不等于endLSN,此时重启需要进行回滚,同样会监听到事务回滚指令。

一实施例中,对于监听到的事务回滚指令,每个事务回滚指令中均包含有需要回滚的回滚事务ID,以使基于回滚事务ID对WAL日志进行回滚。

优选的,checkpintLSN处会对应一笔事务日志末尾,表示在这个checkpointLSN对应的LSN处,所有事务状态存在完整性,可以进行封存,且该checkpointLSN前对应的事务日志记录不需要回滚;在事务提交和回滚时,如果当前时间点没有其他事务即事务集为空时,会将checkpointLSN更新为end所在值。

优选的,将所述checkpintLSN设置为事务日志封存节点。

一实施例中,通过获取所述事务日志记录在所述WAL日志中的排列顺序,基于所述排列顺序,获取所述事务日志记录设置对应的所述日志序列号LSN。

具体的,对于日志序列号LSN,是一个唯一标识事务日志中每个数据记录的数字,通常用于数据库恢复和复制等操作。在数据库的事务日志中,每个事务日志记录都有一个对应的LSN值,表示该事务日志记录在事务日志中的位置和顺序,LSN值越大表示该事务日志记录越靠后,优选的,日志序列号LSN由一个LONG表示。

一实施例中,获取所述WAL日志中每个事务日志末尾对应的事务日志封存节点,基于所述事务日志封存节点,获取每个事务日志封存节点对应的封存LSN值,得到封存LSN最大值,将所述封存LSN最大值对应的事务日志封存节点作为末位事务日志封存节点。

步骤102:基于所述回滚事务ID,对所述WAL日志进行反向遍历,直至首次检测到与所述回滚事务ID相同的事务ID,将所述事务ID所在的事务日志记录的日志序列号作为当前日志序列号。

一实施例中,获取所述WAL日志中LSN值的最大值,得到LSN最大值,基于所述LSN最大值对应的事务日志记录所在行开始对所述WAL日志进行反向遍历,检测所述WAL日志中的事务ID数据,当首次检测到所述WAL日志中与所述回滚事务ID相同的事务ID后,将所述事务ID所在的事务日志记录的日志序列号作为当前日志序列号。

步骤103:基于所述当前日志序列号对所述WAL日志进行反向迭代处理,直至检测到所述末位事务封存节点,并在反向迭代过程中,依次基于读取到的各个日志序列号对应的第一事务日志记录对事物数据进行事务回滚,得到事务日志回滚结果数据。

一实施例中,在得到当前日志序列号后,基于所述当前日志序列号从后向前对所述WAL日志进行反向遍历,如图4所示,图4是反向迭代示意图;并在反向遍历的过程中,依次获取遍历到的当前遍历日志序列号,在确定当前遍历日志序列号与所述末位事务封存节点对应的封存LSN值一致时,则认为检测到所述末位事务封存节点,需要停止对所述WAL日志的反向遍历,若确定当前遍历日志序列号与所述末位事务封存节点对应的封存LSN值不一致时,则继续对所述WAL日志的反向遍历,并在反向遍历过程中,基于遍历得到的各个日志序列号,读取各个日志序列号对应的第一事务日志记录。

作为本实施例中的一种举例说明:

如图5所示,图5中设置末位事务封存节点对应的checkpintLSN值为WAL日志中的第1条事务日志记录;且WAL日志中只有4条事务日志记录,若当前检测到的事务回滚指令中的回滚事务ID为1时,对WAL日志进行反向遍历,即从第4日条事务日志记录开始从后向前对所述WAL日志进行遍历,在反向遍历的过程中先遍历第4条事务日志记录中的事务ID,由于第4条事务日志记录中的事务ID为1,该事务ID与回滚事务ID相同,因此,直接将第4条事务日志记录对应的日志序列号4为当前日志序列号,并基于第4条事务日志记录开始从后向前对所述WAL日志进行反向遍历,基于第1条事务日志记录对应的日志序列号为1,为末位事务封存节点,因此在反向遍历过程中只能遍历到日志序列号4、日志序列号3、日志序列号2对应的第一事务日志记录,即所述WAL日志中的第4条事务日志记录、第3条事务日志记录和第2条事务日志记录。

一实施例中,在反向迭代过程中,依次基于读取到的各个日志序列号对应的第一事务日志记录对事务数据进行事务回滚,得到事务回滚结果数据;具体的,在反向迭代过程中,基于反向遍历顺序依次读取各个日志序列号对应的第一事务日志记录,并将读取到的所述第一事务日志记录依次作为待回滚事务日志记录;其中,所述待回滚事务日志记录包括待回滚行信息和待回滚事务撤销信息,所述待回滚行信息包括待回滚行号;基于所述待回滚行号,遍历所述事务数据,获取所述事务数据中与所述待回滚行号相同的目标数据行号,并基于所述目标数据行号,确定目标数据行;根据所述待回滚事务撤销信息与所述目标数据行进行数据回滚处理,得到目标事务回滚结果数据。

一实施例中,所述事务数据包括数据行号及每个数据行号对应的数据值,因此,基于所述待回滚行号,遍历所述事务数据,只需基于所述待回滚行号,遍历所述事务数据中的数据行号,当遍历到与所述事务数据中与所述待回滚行号相同的数据行号时,将其作为目标数据行号,并基于所述目标数据行号,获取其对应的数据行,作为目标数据行,所述目标数据行的数据值作为目标数据值。

一实施例中,根据所述待回滚事务撤销信息与所述目标数据行进行数据回滚处理,得到目标事务回滚结果数据;具体的,获取所述待回滚事务撤销信息,其中,所述待回滚事务撤销信息包括待回滚更新前值,同时获取所述目标数据行的目标数据值;基于所述待回滚更新前值对所述目标数据值进行更新,以使将所述目标数据值更新为所述待回滚更新前值,得到目标事务回滚结果数据。

一实施例中,根据所述待回滚事务撤销信息与所述目标数据行进行数据回滚处理,得到目标事务回滚结果数据前,还包括:获取所述待回滚事务日志记录对应的待回滚事务重做信息,其中,所述待回滚事务重做信息包括待回滚执行操作;判断所述待回滚执行操作是否为插入执行操作,若是,则对所述目标数据行进行删除处理,否则,则根据所述待回滚事务撤销信息与所述目标数据行进行数据回滚处理,得到目标事务回滚结果数据。

优选的,由于当待回滚执行操作为插入执行操作时,其对应的事务日志记录没有事务撤销信息,因此无法根据所述待回滚事务撤销信息与所述目标数据行进行数据回滚处理,得到目标事务回滚结果数据,基于此,对所述目标数据行中的数据值进行删除处理时,并修改为null值。

一实施例中,得到事务回滚结果数据后,还包括:根据所述事务回滚结果数据,生成事务日志补偿记录,将所述事务日志补偿记录存储在WAL日志中,其中,所述事务日志补偿记录包括补偿行信息和补偿事务重做信息。

作为本实施例中的一种举例说明:

如图6所示,图6为事务回滚过程示意图,依次对从所述WAL日志中读取到的第4条事务日志记录、第3条事务日志记录和第2条事务日志记录对事务数据进行事务回滚,如在基于读取到的第4条事务日志记录对事务数据进行回滚时,将所述第4条事务日志记录作为待回滚事务日志记录,基于所述第4条事务日志记录中的待回滚行信息,确定待回滚行信息为1,基于待回滚行信息1遍历所述事务数据,获取所述事务数据中数据行号为1的数据行,并将数据行号为1的数据行作为目标数据行,且由于第4条事务日志记录中对应的执行操作不为插入执行操作,即第4条事务日志记录中对应的待回滚事务撤销信息不为空,因此,通过获取第4条事务日志记录中对应的待回滚事务撤销信息,基于待回滚事务撤销信息中的更新前值对目标数据行的中的目标数据值记性回滚处理,即将目标数据行中的目标数据值30更新为第4条事务日志记录中记录的更新前值20,基于此,完成对第4条事务日志记录的回滚,并对于该回滚操作,生成对应的事务日志补偿记录,记录事务日志补偿记录中的补偿行信息为1,记录事务日志补偿记录中的补偿事务重做信息为补偿事务ID为1,执行操作为compensate,补偿更新后值为20。

完成第4条事务日志记录的回滚后,基于反向遍历顺序,读取第3条事务日志记录记录,基于读取到的第3条事务日志记录对事务数据进行回滚,此时,将所述第3条事务日志记录作为待回滚事务日志记录,基于所述第3条事务日志记录中的待回滚行信息,确定待回滚行信息为2,基于待回滚行信息2遍历所述事务数据,获取所述事务数据中数据行号为2的数据行,并将数据行号为2的数据行作为目标数据行,且由于第3条事务日志记录中对应的执行操作不为插入执行操作,即第3条事务日志记录中对应的待回滚事务撤销信息不为空,因此,通过获取第3条事务日志记录中对应的待回滚事务撤销信息,基于待回滚事务撤销信息中的更新前值对目标数据行的中的目标数据值记性回滚处理,即将目标数据行中的目标数据值10更新为第3条事务日志记录中记录的更新前值30,基于此,完成对第3条事务日志记录的回滚,并对于该回滚操作,生成对应的事务日志补偿记录,记录事务日志补偿记录中的补偿行信息为2,记录事务日志补偿记录中的补偿事务重做信息为补偿事务ID为2,执行操作为compensate,补偿更新后值为20。

完成第3条事务日志记录的回滚后,基于反向遍历顺序,读取第2条事务日志记录,基于读取到的第2条事务日志记录对事务数据进行回滚,此时,将所述第2条事务日志记录作为待回滚事务日志记录,基于所述第2条事务日志记录中的待回滚行信息,确定待回滚行信息为2,基于待回滚行信息2遍历所述事务数据,获取所述事务数据中数据行号为2的数据行,并将数据行号为2的数据行作为目标数据行,由于第2条事务日志记录中对应的执行操作为插入执行操作,即第3条事务日志记录中对应的待回滚事务撤销信息不为空,因此,将所述目标数据行中的目标数据值删除后,更新为null值,基于此,完成对第3条事务日志记录的回滚,并对于该回滚操作,生成对应的事务日志补偿记录,记录事务日志补偿记录中的补偿行信息为2,记录事务日志补偿记录中的补偿事务重做信息为补偿事务ID为2,执行操作为compensate,补偿更新后值为null。

综上,本实施例提供的一种数据库事务回滚方法,通过将事务日志记录存储WAL日志中,避免了重复写入WAL日志和事务撤销段的操作,从而减少了对数据库更新、插入性能的影响,且由于不再需要预留大量的磁盘空间用于存储事务撤销段,因此还可以减少磁盘空间的占用;在监听到事务回滚指令时,获取所述WAL日志中的末位事务日志封存节点;基于所述当前日志序列号对所述WAL日志进行反向迭代处理,直至检测到所述末位事务封存节点,并在反向迭代过程中,依次基于读取到的各个日志序列号对应的第一事务日志记录对事务数据进行事务回滚,得到事务日志回滚结果数据;与现有技术方案相比,本发明的技术方案通过将事务重做信息和事务撤销信息均存于WAL日志,来减少总的日志写入量,从而提高事务日志回滚效率,并减少日志磁盘占用空间,并通过反向迭代处理WAL日志,可以更快速地回滚事务,提高事务日志回滚效率。

实施例2,参见图2,图2是本发明提供的一种数据库事务回滚装置的一种实施例的结构示意图,如图2所示,该装置包括事务日志存储模块201、事务回滚指令监听模块202、反向遍历模块203和事务回滚模块204,具体如下:

所述事务日志存储模块201,用于将事务日志记录存储在WAL日志中。

所述事务回滚指令监听模块202,用于在监听到事务回滚指令时,获取所述事务回滚指令中的回滚事务ID,以及所述WAL日志中的末位事务日志封存节点。

所述反向遍历模块203,用于基于所述回滚事务ID,对所述WAL日志进行反向遍历,直至检测到与所述回滚事务ID相同的事务ID,将所述事务ID所在的事务日志记录的日志序列号作为当前日志序列号。

所述事务回滚模块204,用于基于所述当前日志序列号对所述WAL日志进行反向迭代处理,直至检测到所述末位事务封存节点,并在反向迭代过程中,依次基于读取到的各个日志序列号对应的第一事务日志记录对事务数据进行事务回滚,得到事务日志回滚结果数据。

一实施例中,所述事务日志存储模块201,用于将事务日志记录存储在WAL日志中,包括:所述事务日志记录包括行信息、事务重做信息和事务撤销信息;将所述行信息存储到所述WAL日志的行信息单元中;将所述事务重做信息存储到所述WAL日志的事务重做信息单元中;将所述事务撤销信息存储到所述WAL日志的事务撤销信息单元中;同时获取所述事务日志记录在所述WAL日志中的排列顺序,基于所述排列顺序,对所述事务日志记录设置对应的所述日志序列号。

一实施例中,所述事务回滚模块204,用于在反向迭代过程中,依次基于读取到的各个日志序列号对应的第一事务日志记录对事务数据进行事务回滚,得到事务回滚结果数据,具体包括:在反向迭代过程中,基于反向遍历顺序依次读取各个日志序列号对应的第一事务日志记录,并将读取到的所述第一事务日志记录依次作为待回滚事务日志记录;其中,所述待回滚事务日志记录包括待回滚行信息和待回滚事务撤销信息,所述待回滚行信息包括待回滚行号;基于所述待回滚行号,遍历所述事务数据,获取所述事务数据中与所述待回滚行号相同的目标数据行号,并基于所述目标数据行号,确定目标数据行;根据所述待回滚事务撤销信息与所述目标数据行进行数据回滚处理,得到目标事务回滚结果数据。

一实施例中,所述事务回滚模块204,用于根据所述待回滚事务撤销信息与所述目标数据行进行数据回滚处理,得到目标事务回滚结果数据前,还包括:获取所述待回滚事务日志记录对应的待回滚事务重做信息,其中,所述待回滚事务重做信息包括待回滚执行操作;判断所述待回滚执行操作是否为插入执行操作,若是,则对所述目标数据行进行删除处理,否则,则根据所述待回滚事务撤销信息与所述目标数据行进行数据回滚处理,得到目标事务回滚结果数据

一实施例中,所述事务回滚模块204,根据所述待回滚事务撤销信息与所述目标数据行进行数据回滚处理,得到目标事务回滚结果数据,具体包括:获取所述待回滚事务撤销信息,其中,所述待回滚事务撤销信息包括待回滚更新前值,同时获取所述目标数据行的目标数据值;基于所述待回滚更新前值对所述目标数据值进行更新,以使将所述目标数据值更新为所述待回滚更新前值,得到目标事务回滚结果数据。

一实施例中,所述事务回滚模块204,用于得到事务回滚结果数据后,还包括:根据所述事务回滚结果数据,生成事务日志补偿记录,将所述事务日志补偿记录存储在WAL日志中,其中,所述事务日志补偿记录包括补偿行信息和补偿事务重做信息。

所属领域的技术人员可以清楚的了解到,为描述的方便和简洁,上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不在赘述。

需要说明的是,上述数据库事务回滚装置的实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。

在上述的数据库事务回滚方法的实施例的基础上,本发明另一实施例提供了一种数据库事务回滚终端设备,该数据库事务回滚终端设备,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述处理器执行所述计算机程序时,实现本发明任意一实施例的数据库事务回滚方法。

示例性的,在这一实施例中所述计算机程序可以被分割成一个或多个模块,所述一个或者多个模块被存储在所述存储器中,并由所述处理器执行,以完成本发明。所述一个或多个模块可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序在所述数据库事务回滚终端设备中的执行过程。

所述数据库事务回滚终端设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述数据库事务回滚终端设备可包括,但不仅限于,处理器、存储器。

所称处理器可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器 (Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列 (Field-Programmable Gate Array,FPGA) 或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述数据库事务回滚终端设备的控制中心,利用各种接口和线路连接整个数据库事务回滚终端设备的各个部分。

所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述数据库事务回滚终端设备的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据手机的使用所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card, SMC),安全数字(Secure Digital, SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。

在上述数据库事务回滚方法的实施例的基础上,本发明另一实施例提供了一种存储介质,所述存储介质包括存储的计算机程序,其中,在所述计算机程序运行时,控制所述存储介质所在的设备执行本发明任意一实施例的数据库事务回滚方法。

在这一实施例中,上述存储介质为计算机可读存储介质,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。

进一步的,本发明实施例还提供了一种计算机程序产品,所述计算机程序产品在计算机设备上运行时,使得所述计算机设备实现如上述任意一项所述的数据库事务回滚方法。

综上,本发明提供的一种数据库事务回滚方法及装置,通过将事务日志记录存储在WAL日志中,在监听到事务回滚指令时,获取所述WAL日志中的末位事务日志封存节点;基于所述当前日志序列号对所述WAL日志进行反向迭代处理,直至检测到所述末位事务封存节点,并在反向迭代过程中,依次基于读取到的各个日志序列号对应的第一事务日志记录对事务数据进行事务回滚,得到事务日志回滚结果数据;与现有技术方案相比,本发明的技术方案通过将事务重做信息和事务撤销信息均存于WAL日志,来减少总的日志写入量,从而提高事务日志回滚效率,并减少日志磁盘占用空间。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和替换,这些改进和替换也应视为本发明的保护范围。

相关技术
  • 一种钢筋加工用折弯装置及其使用方法
  • 一种建筑施工用钢筋的提升装置
  • 一种建筑工地施工用钢筋切割装置
  • 一种方便调节的金属材料加工用折弯装置
  • 一种桥梁施工用钢筋绑缚装置
  • 一种具有防断裂钢筋迸溅的建筑施工用钢筋折弯装置
  • 一种建筑施工用具有防护功能的建筑钢筋折弯装置
技术分类

06120116521470