发明内容
有鉴于此,本发明要解决的技术问题是,如何减少事务日志所占用的磁盘空间。
为了解决上述技术问题,第一方面,本发明提供了一种日志管理方法,包括:
在数据库的数据页发生更新时,检查所述数据库的事务日志中是否存在所述数据页对应的全页日志记录;
若所述事务日志中存在所述数据页对应的全页日志记录,则在所述事务日志中记录所述数据页对应的更新日志记录。
结合第一方面,在第一种可能的实现方式中,包括:
若所述事务日志中不存在所述数据页对应的全页日志记录,则在所述事务日志中记录对所述数据页更新后的数据页对应的全页日志记录。
结合第一方面或第一方面的第一种可能的实施方式,在第二种可能的实施方式中,所述检查所述数据库的事务日志中是否存在所述数据页对应的全页日志记录,包括:
根据所述数据页记录的所述全页日志记录对应的序列号,查找所述数据库的事务日志中是否存在所述数据页对应的全页日志记录。
结合第一方面的第二种可能的实施方式,在第三种可能的实施方式中,根据所述数据页中记录的所述全页日志记录对应的序列号,查找所述数据库的事务日志中是否存在所述数据页对应的全页日志记录,包括:
若所述数据页中记录的所述全页日志记录对应的序列号大于或等于所述事务日志中的所有日志记录序列号中的最小序列号,则确定所述事务日志中存在所述数据页对应的全页日志记录;
若所述数据页中记录的所述全页日志记录对应的序列号小于所述事务日志中的所有日志记录序列号中的最小序列号,则确定所述事务日志中不存在所述数据页对应的全页日志记录。
结合第一方面以及第一方面的第一种可能的实施方式至第三种可能的实施方式中的任意一个,在第四种可能的实施方式中,在检查所述数据库的事务日志中是否存在所述数据页对应的全页日志记录之后,还包括:
若所述事务日志中存在所述数据页对应的全页日志记录,且所述事务日志满足重新记录全页日志记录的条件,则在所述事务日志中重新记录所述数据页当前的全页日志记录,并在所述数据页中将所述序列号更新为所述数据页当前的全页日志记录的序列号;
其中,所述重新记录全页日志记录的条件包括以下任意一种:
从所述数据页对应的全页日志记录开始到当前正在更新的数据页对应的日志记录之间的日志数据量大于或等于设定的数据量阈值;
从所述数据页对应的全页日志记录开始到当前正在更新的数据页对应的日志记录之间的日志数目大于或等于设定的日志数目阈值;
从所述数据页对应的全页日志记录开始到当前正在更新的数据页对应的日志记录之间的时间间隔大于或等于设定的时长阈值。
结合第一方面以及第一方面的第一种可能的实施方式至第四种可能的实施方式中的任意一个,在第五种可能的实施方式中,还包括:
在对所述数据页进行恢复时,在所述事务日志中查找所述数据页的恢复起点,所述恢复起点为所述事务日志中记录的最后一次检查点;
若采用所述事务日志在所述恢复起点之后的更新日志记录对所述数据页的恢复出现错误,则从所述恢复起点之后的所述数据页对应的更新日志记录中查找所述数据页最近一次全页日志记录对应的序列号;
根据查找到的序列号,在所述事务日志中查找所述数据页对应的全页日志记录;
根据所述数据页对应的全页日志记录,对所述数据页进行恢复。
结合第一方面以及第一方面的第一种可能的实施方式至第五种可能的实施方式中的任意一个,在第六种可能的实施方式中,所述事务日志为在线日志,所述方法还包括:
统计所述数据库中未刷新到硬盘中的脏页;
从所有未刷新到硬盘中的脏页中记录的全页日志记录的序列号中,确定最小序列号;
在所述在线日志中删除日志记录序列号比所述最小序列号小的日志记录。
为了解决上述技术问题,第二方面,本发明提供了一种日志管理装置,包括:
检查模块,用于在数据库的数据页发生更新时,检查所述数据库的事务日志中是否存在所述数据页对应的全页日志记录;
更新模块,与所述检查模块相通信,用于若所述事务日志中存在所述数据页对应的全页日志记录,则在所述事务日志中记录所述数据页对应的更新日志记录。
结合第二方面,在第一种可能的实现方式中,所述更新模块还用于若所述事务日志中不存在所述数据页对应的全页日志记录,则在所述事务日志中记录对所述数据页更新后的数据页对应的全页日志记录。
结合第二方面或第二方面的第一种可能的实施方式,在第二种可能的实施方式中,所述检查模块还用于根据所述数据页记录的所述全页日志记录对应的序列号,查找所述数据库的事务日志中是否存在所述数据页对应的全页日志记录。
结合第二方面的第二种可能的实施方式,在第三种可能的实施方式中,所述检查模块还用于若所述数据页中记录的所述全页日志记录对应的序列号大于或等于所述事务日志中的所有日志记录序列号中的最小序列号,则确定所述事务日志中存在所述数据页对应的全页日志记录;
所述检查模块还用于若所述数据页中记录的所述全页日志记录对应的序列号小于所述事务日志中的所有日志记录序列号中的最小序列号,则确定所述事务日志中不存在所述数据页对应的全页日志记录。
结合第二方面以及第二方面的第一种可能的实施方式至第三种可能的实施方式中的任意一个,在第四种可能的实施方式中,所述更新模块还用于若所述事务日志中存在所述数据页对应的全页日志记录,且所述事务日志满足重新记录全页日志记录的条件,则在所述事务日志中重新记录所述数据页当前的全页日志记录,并在所述数据页中将所述序列号更新为所述数据页当前的全页日志记录的序列号;
所述更新模块还用于判定从所述数据页对应的全页日志记录开始到当前正在更新的数据页对应的日志记录之间的日志数据量是否大于或等于设定的数据量阈值;或
所述更新模块还用于判定从所述数据页对应的全页日志记录开始到当前正在更新的数据页对应的日志记录之间的日志数目是否大于或等于设定的日志数目阈值;或
所述更新模块还用于判定从所述数据页对应的全页日志记录开始到当前正在更新的数据页对应的日志记录之间的时间间隔是否大于或等于设定的时长阈值。
结合第二方面以及第二方面的第一种可能的实施方式至第四种可能的实施方式中的任意一个,在第五种可能的实施方式中,还包括:
恢复模块,与所述检查模块和所述更新模块相通信,用于在对所述数据页进行恢复时,在所述事务日志中查找所述数据页的恢复起点,所述恢复起点为所述事务日志中记录的最后一次检查点;
所述恢复模块还用于若采用所述事务日志在所述恢复起点之后的更新日志记录对所述数据页的恢复出现错误,则从所述恢复起点之后的所述数据页对应的更新日志记录中查找所述数据页最近一次全页日志记录对应的序列号;
所述恢复模块还用于根据查找到的序列号,在所述事务日志中查找所述数据页对应的全页日志记录;
所述恢复模块还用于根据所述数据页对应的全页日志记录,对所述数据页进行恢复。
结合第二方面以及第二方面的第一种可能的实施方式至第五种可能的实施方式中的任意一个,在第六种可能的实施方式中,还包括:
删除模块,与所述检查模块和所述更新模块相通信,用于统计所述数据库中未刷新到硬盘中的脏页;
所述删除模块还用于从所有未刷新到硬盘中的脏页中记录的全页日志记录的序列号中,确定最小序列号;
所述删除模块还用于在所述在线日志中删除日志记录序列号比所述最小序列号小的日志记录。
本实施例的日志管理方法,如果事务日志中存在数据页中的全页日志记录,可以只记录该数据页的更新日志记录,在通过事务日志中的全页日志记录保证数据的正常恢复的同时,可以减少事务日志中全页日志记录的数量,减少事务日志所占用的磁盘空间。
根据下面参考附图对示例性实施例的详细说明,本发明的其它特征及方面将变得清楚。
具体实施方式
以下将参考附图详细说明本发明的各种示例性实施例、特征和方面。附图中相同的附图标记表示功能相同或相似的元件。尽管在附图中示出了实施例的各种方面,但是除非特别指出,不必按比例绘制附图。
在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。
另外,为了更好的说明本发明,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本发明同样可以实施。在一些实例中,对于本领域技术人员熟知的方法、手段、元件和电路未作详细描述,以便于凸显本发明的主旨。
实施例1
图1a、1b为本发明实施例一的日志管理方法的流程图。如图1a所示,该日志管理方法主要包括:
步骤S110、在数据库的数据页发生更新时,检查所述数据库的事务日志中是否存在所述数据页对应的全页日志记录。
步骤S120、若所述事务日志中存在所述数据页对应的全页日志记录,则在所述事务日志中记录所述数据页对应的更新日志记录。
具体地,步骤S110之后还可以包括,若所述事务日志中不存在所述数据页对应的全页日志记录,则在所述事务日志中记录对所述数据页更新后的数据页对应的全页日志记录。
数据库的数据结构可以由事务日志、事务表、脏页表与数据页结构四部分组成。其中,事务日志既可为己提交事务的重做(redo)和未提交事务的撤消(undo)提供信息源,也为介质恢复提供途径。数据库要对任何事务的可能引起可恢复数据对象发生改变的操作作事务日志,并采用先记后写的WAL协议,事务日志的数据结构可以包括以下数据域:序列号(log sequencenumber,LSN),数据页标识符(Page ID):用于标识“更新”与“补偿”记录中的更新所作用的页,通常由对象标识符与页在对象中的页序号两部分组成。数据(Data):用以记录所实施的更新的redo/undo数据。
事务表主要用于在系统失效后的重启动恢复时跟踪记录活动事务的状态,从而为该过程要进行的撤消提供依据。脏页表中的每一数据项包含页标识符(Page ID)和恢复序列号(Recovery LSN)两个数据域。前者用于标识相应的脏页,后者用于指明有关该页的可能未存到稳定存储器中的更新在日志中的开始位置。
在数据库的每一数据页中可以辟出一些空间作为页序列号(PageLSN)域,用以描述在该页上所作的最近的更新或补偿操作所对应的日志记录的LSN,该日志记录可以是全页日志或更新日志。所述页序列号域可以记录该数据页对应的更新日志的序列号。
数据库系统还可以在数据页中记录其对应的全页日志记录的序列号,该序列号对应的全页日志记录可以恢复出一个完整的数据页,数据库系统还可以在每个检测点之后的第一次出现的数据页的更新日志中记录该数据页的全页日志的序列号。
具体地,数据库系统在某些场景下需要更新数据页对应的全页日志记录的序列号,例如:
(1)当数据页第一次被分配时,此时数据页中没有任何数据信息;
(2)当数据页的更新操作导致数据页中的所有记录都被删除时,此时数据页的数据记录数目为0;
(3)当数据页记录全页日志记录时,此时可以在数据页中记录全页日志记录对应的LSN(也可以称为initLSN),后续通过该initLSN对应的全页日志记录可以恢复完整的数据页。
具体地,步骤S110可以包括:
根据所述数据页记录的所述全页日志记录对应的序列号,查找所述数据库的事务日志中是否存在所述数据页对应的全页日志记录,具体可以包括以下情况:
情况一、若所述数据页中记录的所述全页日志记录对应的序列号大于或等于所述事务日志中的所有日志记录序列号中的最小序列号,则确定所述事务日志中存在所述数据页对应的全页日志记录;
情况二、若所述数据页中记录的所述全页日志记录对应的序列号小于所述事务日志中的所有日志记录序列号中的最小序列号,则确定所述事务日志中不存在所述数据页对应的全页日志记录。
具体地,当数据库系统执行更新操作时,导致数据页由干净页变为脏页时,数据库系统会检查该数据页中的全页日志记录的序列号,当发现其对应全页日志记录在事务日志(如归档日志或在线日志)中存在,则不记录全页日志记录,而是记录更新日志记录,同时在该脏页中记录其对应全页日志记录的序列号。
数据库系统也可以检查点之后第一次出现的数据页对应的更新日志中记录其全页日志记录对应的序列号。一种可能的实施方式中,数据库系统可以根据所述数据页中记录的所述更新日志记录对应的序列号,查找所述更新日志记录;若所述更新日志记录中记录的所述全页日志记录对应的序列号大于或等于所述事务日志的最小序列号,则确定所述事务日志中存在所述数据页对应的全页日志记录;若所述更新日志记录中记录的所述全页日志记录对应的序列号小于所述事务日志的最小序列号,则确定所述事务日志中不存在所述数据页对应的全页日志记录。
进一步的,为了减少恢复时间,即使之前已经记录了某一数据页对应的全页日志记录,也可以在满足某些条件下,重新记录全页日志记录,因此,如图1b所示,在步骤S110或步骤S120之后,该日志管理方法还可以包括:
步骤S130、若所述事务日志中存在所述数据页对应的全页日志记录,且所述事务日志满足重新记录全页日志记录的条件,则在所述事务日志中重新记录所述数据页当前的全页日志记录,并在所述数据页中将所述序列号更新为所述数据页当前的全页日志记录的序列号;
其中,所述重新记录全页日志记录的条件包括以下任意一种:
从所述数据页对应的全页日志记录开始到当前正在更新的数据页对应的日志记录之间的日志数据量大于或等于设定的数据量阈值;
从所述数据页对应的全页日志记录开始到当前正在更新的数据页对应的日志记录之间的日志数目大于或等于设定的日志数目阈值;
从所述数据页对应的全页日志记录开始到当前正在更新的数据页对应的日志记录之间的时间间隔大于或等于设定的时长阈值。
举例而言,图1c为本发明实施例一的重新记录全页日志记录的示意图。如图1c所示,具体做法可以为判断从数据页对应的全页日志记录开始到当前记录的事务日志的数据量是否大于设定的数据量阈值。若当前数据页对应的日志的检查点为101,数据库系统查找到上一次全页日志记录对应的检查点为102,数据库系统检测到两个检查点之间事务日志的数据量大于设定的数据量阈值时,例如数据量阈值可以为16M,就记录一次全页日志记录,并把这次全页日志记录的序列号记录在后续修改的数据页中。这样,在数据库的数据页发生更新时,检查数据库的事务日志中是否存在所述数据页对应的全页日志记录时,此时,该事务日志中存在数据页对应的全页日志记录有多个,在该事务日志中记录数据页对应的更新日志记录时,在数据页中记录重新记录的全页日志记录的序列号。若数据页刷新时发生部分写错误,数据库系统进行数据恢复时,则可以从离该数据页的更新日志记录最近的一次全页日志记录进行恢复。
需要说明的是,尽管以数据量阈值为示例等介绍了重新记录全页日志记录的条件,但本领域技术人员能够理解,本发明应不限于此。事实上,用户完全可根据个人喜好和/或实际应用场景灵活设定重新记录全页日志记录的条件,只要能重新记录数据页的全页日志记录即可。
需要说明的是,本发明的日志管理方法还可以适用于基于WAL日志的采用全量检查点或增量检查点的数据库系统。
本实施例的日志管理方法,如果事务日志中存在数据页中的全页日志记录,可以只记录该数据页的更新日志记录,在通过事务日志中的全页日志记录保证数据的正常恢复的同时,可以减少事务日志中全页日志记录的数量,减少事务日志所占用的磁盘空间。
实施例2
数据库的事务日志可以包括归档日志或在线日志。其中,归档日志是备份在其他磁盘或其他主机的日志,一般不会删除归档日志中的日志记录,所以数据页的对应全页日志记录通常可以在归档日志中找到。而在线日志存放在数据库系统本地的日志文件中,系统在执行检查点时可能会删除在线日志中较早的部分日志记录以确保本地有足够的磁盘空间。为了保证在线日志中存在某一数据页的全页日志记录,在对在线日志的日志记录进行删除时,需要按照一定的删除策略进行删除。
在线日志中日志记录的序列号为单调递增数列,在线日志最早的日志记录的序列号为最小日志序列号,在线日志的边界为该最小日志序列号对应的日志记录。图2a和图2b为本发明实施例二的日志管理方法中在线日志中查找全页日志记录的示意图,图2a和图2b中带反斜线的框表示的日志记录为全页日志记录,空白框表示的日志记录为更新日志记录。如图2a所示,当数据页P1从最近的检查点起第一次被修改时,检查数据页P1是否存在全页日志记录。如果数据库系统检查到数据页P1中保存的其全页日志记录的序列号(initLSN)没有超过在线日志的边界,则在记录在线日志时不需要记录全页日志记录,可以仅记录更新日志记录,同时在数据页P1中记录其对应的全页日志记录的序列号(initLSN),该initLSN可以代表数据页P1最近一次全页日志记录的位置,该位置的全页日志记录可以恢复出一个完整的数据页P1。如图2b所示,如果数据库系统检测到数据页P1中的全页日志记录的序列号(initLSN)已经超过在线日志的边界,即在线日志中已经不存在数据页P1的全页日志记录,因此,在线日志当前的日志记录中需要记录数据页P1的全页日志记录。
在数据页被刷新到磁盘之前,如果在线日志中其对应的全页日志记录被删除,数据页刷新时如果发生部分写问题会造成数据库无法恢复。为了避免部分写带来的恢复失败的问题,数据库在删除在线日志中的日志记录时,需要避免删除当前未刷新脏页的全页日志记录。图2c为本发明实施例二的日志管理方法中删除在线日志的日志记录的流程图。如图2c所示,该日志志管理方法中,删除在线日志的日志记录的步骤主要可以包括:
步骤S210、统计所述数据库中未刷新到硬盘中的脏页;
步骤S220、从所有未刷新到硬盘中的脏页中记录的全页日志记录的序列号中,确定最小序列号;
步骤S230、在所述在线日志中删除日志记录序列号比所述最小序列号小的日志记录。
具体地,在线日志中事务日志的数据线型排列,从前向后的序列号依次增大。图2d为本发明实施例二的事务日志删除方法的示意图。如图2d所示,删除在线日志201中日志记录时,需要检查数据库内存中还没有刷新到磁盘的脏页,如P3和P2为没有刷新到磁盘的脏页,统计该P3和P2的全页日志记录的序列号,如果P3的全页日志记录的序列号为“90”,P2的全页日志记录的序列号为“95”,则最小的全页日志记录的序列号为“90”。数据库系统可以仅删除该最小的序列号“90”对应的全页日志记录之前的日志记录,即删除检查点203之前的所有日志记录。一旦数据页的对应的全页日志记录被删除时,当数据页下一次变为脏页时就需要重新记录全页日志记录,因此,在删除事务日志时,在满足上面的删除要求下,可以尽量多保留一些在线日志。例如数据库系统只有在线日志的大小超过设定阈值如1G时再删除部分日志记录。
本实施例的日志管理方法,如果事务日志中存在数据页中的全页日志记录,可以只记录该数据页的更新日志记录,在通过事务日志中的全页日志记录保证数据的正常恢复的同时,可以减少事务日志中全页日志记录的数量,减少事务日志所占用的磁盘空间。
实施例3
图3a为本发明实施例三的数据库恢复方法的流程图,图3b为本发明实施例三的数据库恢复方法的示意图。如图3a所示,该数据库恢复方法主要包括:
步骤S310、在对所述数据页进行恢复时,在所述事务日志中查找所述数据页的恢复起点,所述恢复起点为所述事务日志中记录的最后一次检查点;
步骤S320、若采用所述事务日志在所述恢复起点之后的更新日志记录对所述数据页的恢复出现错误,则从所述恢复起点之后的所述数据页对应的更新日志记录中查找所述数据页最近一次全页日志记录对应的序列号;
步骤S330、根据查找到的序列号,在所述事务日志中查找所述数据页对应的全页日志记录;
步骤S340、根据所述数据页对应的全页日志记录,对所述数据页进行恢复。
具体地,当数据库系统发生故障或当系统崩溃后重启时,数据库系统恢复管理器将被激活,并按以下三个阶段进行数据恢复:分析(Analysis):鉴别崩溃发生时,缓冲区中的脏页和当时仍活跃的事务。重做(Redo):重做从日志的适当起点(比如,被修改的最早脏页对应事务日志)开始的所有动作,恢复系统到崩溃时的数据库(data base,DB)状态。撤消(Undo):撤消上次崩溃时所有未提交事务的动作效果,使数据库只反映已提交事务的影响。
然而,如果在数据恢复过程中,搜索整个日志将耗费大量的时间,redo处理要重新执行所有事务,浪费了大量时间。为了降低以上开销,在日志中增加新的记录检查点记录,系统周期性地执行检查点,具体动作为:将当前日志缓冲中的所有事务日志写入日志文件上(日志文件都存储在稳定存储器上)。把所有修改了的数据记录写入到磁盘的数据库中。将检查点记录写入到日志文件上。检查点在执行过程中,一般不允许事务执行任何更新动作,如写缓冲块或写事务日志,等待所有的事务都完成再进行更新操作。当事务在检查点之前提交,则该事务对数据库所做的修改已写入数据库,此时恢复时不必再对该事务进行redo操作。具有检查点的恢复技术,可以在日志文件中增加检查点记录,增加重新开始文件,使得恢复子系统在登录日志文件期间动态地维护日志。
如图3b所示,在对数据页进行恢复时,在事务日志中查找数据页的恢复起点,该恢复起点为可以为所述事务日志中记录的最后一次检查点204。从检查点204位置开始恢复时,当恢复到事务日志205对应的数据页P1时,发现数据页P1发生错误。由于当前的日志记录中记录了数据页P1对应的最近一次全页日志记录的序列号initLSN,此时数据库系统可以根据该日志序列号找到数据页P1对应的事务日志206,所述如果该事务日志206是全页日志记录,从该全页日志记录206重构数据页P1或跳转到当前位置进行重新恢复,然后执行后续该页面的redo操作;否则,构造空数据页,执行后续页面的redo操作。
本实施例的日志管理方法,如果事务日志中存在数据页中的全页日志记录,可以只记录该数据页的更新日志记录,在通过事务日志中的全页日志记录保证数据的正常恢复的同时,可以减少事务日志中全页日志记录的数量,减少事务日志所占用的磁盘空间。
实施例4
图4为本发明实施例四的日志管理装置的结构框图。如图4所示,该日志管理装置主要包括:
检查模块410,用于在数据库的数据页发生更新时,检查所述数据库的事务日志中是否存在所述数据页对应的全页日志记录;
更新模块420,与所述检查模块410相通信,用于若所述事务日志中存在所述数据页对应的全页日志记录,则在所述事务日志中记录所述数据页对应的更新日志记录。
所述更新模块420还用于若所述事务日志中不存在所述数据页对应的全页日志记录,则在所述事务日志中记录对所述数据页更新后的数据页对应的全页日志记录。
所述检查模块410还用于根据所述数据页记录的所述全页日志记录对应的序列号,查找所述数据库的事务日志中是否存在所述数据页对应的全页日志记录。
所述检查模块410还用于若所述数据页中记录的所述全页日志记录对应的序列号大于或等于所述事务日志中的所有日志记录序列号中的最小序列号,则确定所述事务日志中存在所述数据页对应的全页日志记录;
所述检查模块410还用于若所述数据页中记录的所述全页日志记录对应的序列号小于所述事务日志中的所有日志记录序列号中的最小序列号,则确定所述事务日志中不存在所述数据页对应的全页日志记录。
所述更新模块420还用于若所述事务日志中存在所述数据页对应的全页日志记录,且所述事务日志满足重新记录全页日志记录的条件,则在所述事务日志中重新记录所述数据页当前的全页日志记录,并在所述数据页中将所述序列号更新为所述数据页当前的全页日志记录的序列号;
所述更新模块420还用于判定从所述数据页对应的全页日志记录开始到当前正在更新的数据页对应的日志记录之间的日志数据量是否大于或等于设定的数据量阈值;
所述更新模块420还用于判定从所述数据页对应的全页日志记录开始到当前正在更新的数据页对应的日志记录之间的日志数目是否大于或等于设定的日志数目阈值;
所述更新模块420还用于判定从所述数据页对应的全页日志记录开始到当前正在更新的数据页对应的日志记录之间的时间间隔是否大于或等于设定的时长阈值。
本实施例的日志管理装置,如果事务日志中存在数据页中的全页日志记录,可以只记录该数据页的更新日志记录,在通过事务日志中的全页日志记录保证数据的正常恢复的同时,可以减少事务日志中全页日志记录的数量,减少事务日志所占用的磁盘空间。
实施例5
图5为本发明实施例五的日志管理装置的结构框图。图5中标号与图4相同的组件具有相同的功能,为简明起见,省略对这些组件的详细说明。
如图5所示,图5所示的日志管理装置与图4所示日志管理装置的主要区别在于,还包括:
恢复模块510,可以与所述检查模块410和更新模块420相通信,用于在对所述数据页进行恢复时,在所述事务日志中查找所述数据页的恢复起点,所述恢复起点为所述事务日志中记录的最后一次检查点;
所述恢复模块510还用于若采用所述事务日志在所述恢复起点之后的更新日志记录对所述数据页的恢复出现错误,则从所述恢复起点之后的所述数据页对应的更新日志记录中查找所述数据页最近一次全页日志记录对应的序列号;
所述恢复模块510还用于根据查找到的序列号,在所述事务日志中查找所述数据页对应的全页日志记录;
所述恢复模块510还用于根据所述数据页对应的全页日志记录,对所述数据页进行恢复。
所述日志管理装置还包括删除模块520,可以与所述检查模块410和所述更新模块420相通信,用于统计所述数据库中未刷新到硬盘中的脏页;
所述删除模块520还用于从所有未刷新到硬盘中的脏页中记录的全页日志记录的序列号中,确定最小序列号;
所述删除模块520还用于在所述在线日志中删除比所述最小序列号小的日志记录。
本实施例的日志管理装置,如果事务日志中存在数据页中的全页日志记录,可以只记录该数据页的更新日志记录,在通过事务日志中的全页日志记录保证数据的正常恢复的同时,可以减少事务日志中全页日志记录的数量,减少事务日志所占用的磁盘空间。
实施例6
图6为本发明实施例六的日志管理装置的结构框图。所述日志管理装置600可以是具备计算能力的主机服务器、个人计算机PC、或者可携带的便携式计算机或终端等。本发明具体实施例并不对计算节点的具体实现做限定。
所述日志管理装置600包括处理器(processor)610、通信接口(Communications Interface)620、存储器(memory)630和总线640。其中,处理器610、通信接口620、以及存储器630通过总线640完成相互间的通信。
通信接口620用于与网络设备通信,其中网络设备包括例如虚拟机管理中心、共享存储等。
处理器610用于执行程序。处理器610可能是一个中央处理器CPU,或者是专用集成电路ASIC(Application Specific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。
存储器630用于存放文件。存储器630可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。存储器630也可以是存储器阵列。存储器630还可能被分块,并且所述块可按一定的规则组合成虚拟卷。
在一种可能的实施方式中,上述程序可为包括计算机操作指令的程序代码。该程序具体可用于:
在数据库的数据页发生更新时,检查所述数据库的事务日志中是否存在所述数据页对应的全页日志记录;
若所述事务日志中存在所述数据页对应的全页日志记录,则在所述事务日志中记录所述数据页对应的更新日志记录。
在一种可能的实施方式中,还包括:
若所述事务日志中不存在所述数据页对应的全页日志记录,则在所述事务日志中记录对所述数据页更新后的数据页对应的全页日志记录。
在一种可能的实施方式中,所述检查所述数据库的事务日志中是否存在所述数据页对应的全页日志记录,包括:
根据所述数据页记录的所述全页日志记录对应的序列号,查找所述数据库的事务日志中是否存在所述数据页对应的全页日志记录。
在一种可能的实施方式中,根据所述数据页中记录的所述全页日志记录对应的序列号,查找所述数据库的事务日志中是否存在所述数据页对应的全页日志记录,包括:
若所述数据页中记录的所述全页日志记录对应的序列号大于或等于所述事务日志中的所有日志记录序列号中的最小序列号,则确定所述事务日志中存在所述数据页对应的全页日志记录;
若所述数据页中记录的所述全页日志记录对应的序列号小于所述事务日志中的所有日志记录序列号中的最小序列号,则确定所述事务日志中不存在所述数据页对应的全页日志记录。
在一种可能的实施方式中,在检查所述数据库的事务日志中是否存在所述数据页对应的全页日志记录之后,还包括:
若所述事务日志中存在所述数据页对应的全页日志记录,且所述事务日志满足重新记录全页日志记录的条件,则在所述事务日志中重新记录所述数据页当前的全页日志记录,并在所述数据页中将所述序列号更新为所述数据页当前的全页日志记录的序列号;
其中,所述重新记录全页日志记录的条件包括以下任意一种:
从所述数据页对应的全页日志记录开始到当前正在更新的数据页对应的日志记录之间的日志数据量大于或等于设定的数据量阈值;
从所述数据页对应的全页日志记录开始到当前正在更新的数据页对应的日志记录之间的日志数目大于或等于设定的日志数目阈值;
从所述数据页对应的全页日志记录开始到当前正在更新的数据页对应的日志记录之间的时间间隔大于或等于设定的时长阈值。
在一种可能的实施方式中,还包括:
在对所述数据页进行恢复时,在所述事务日志中查找所述数据页的恢复起点,所述恢复起点为所述事务日志中记录的最后一次检查点;
若采用所述事务日志在所述恢复起点之后的更新日志记录对所述数据页的恢复出现错误,则从所述恢复起点之后的所述数据页对应的更新日志记录中查找所述数据页最近一次全页日志记录对应的序列号;
根据查找到的序列号,在所述事务日志中查找所述数据页对应的全页日志记录;
根据所述数据页对应的全页日志记录,对所述数据页进行恢复。
在一种可能的实施方式中,所述事务日志为在线日志,所述方法还包括:
统计所述数据库中未刷新到硬盘中的脏页;
从所有未刷新到硬盘中的脏页中记录的全页日志记录的序列号中,确定最小序列号;
在所述在线日志中删除日志记录序列号比所述最小序列号小的日志记录。
本领域普通技术人员可以意识到,本文所描述的实施例中的各示例性单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件形式来实现,取决于技术方案的特定应用和设计约束条件。专业技术人员可以针对特定的应用选择不同的方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
如果以计算机软件的形式来实现所述功能并作为独立的产品销售或使用时,则在一定程度上可认为本发明的技术方案的全部或部分(例如对现有技术做出贡献的部分)是以计算机软件产品的形式体现的。该计算机软件产品通常存储在计算机可读取的非易失性存储介质中,包括若干指令用以使得计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本发明各实施例方法的全部或部分步骤。而前述的存储介质包括U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。