基于页面更新序号的数据库集群多节点重做日志恢复方法技术

技术编号:26762056 阅读:27 留言:0更新日期:2020-12-18 23:06
本发明专利技术涉及一种基于页面更新序号的数据库集群多节点重做日志恢复方法,包括以下步骤:在页面头部分配空间作为页面更新序号;集群中所有的节点在更新数据页面时,更新页面更新序号和本节点的重做日志;重新启动数据库集群,最先启动的节点成为主节点,由主节点进行实例恢复;主节点从共享磁盘加载控制文件,从控制文件中读取每一个节点的重做日志信息作为扫描句柄,保存在扫描句柄数组中;遍历所有的扫描句柄,恢复重做日志;所有扫描句柄已经扫描完毕,重做日志恢复结束。本发明专利技术在新增重做日志和在实例恢复时,利用页面更新序号判断页面是否连续,将相同页面在不同节点之间的修改按序恢复,保证数据的一致性,提高了系统运行的可靠性。

【技术实现步骤摘要】
基于页面更新序号的数据库集群多节点重做日志恢复方法
本专利技术属于数据库
,涉及数据库恢复,尤其是一种基于页面更新序号的数据库集群多节点重做日志恢复方法。
技术介绍
当某个事务想要修改数据库中的某一行数据的时候,数据库将相关的数据页面从磁盘读取到内存中进行修改。这个时候数据在内存中被修改,与磁盘中的页面内容相比就产生了差异,这种有差异的数据页面被称为脏页。数据库对脏页的处理不是每次生成脏页就将脏页刷新回磁盘,因为这样处理的话会产生大量的随机IO操作,严重影响数据库的处理性能。数据库中有专门的页面回刷线程,能够定时地将内存中的数据页面回刷到磁盘上,页面被回刷后成为干净页。在产生脏页到回刷变成干净页期间,若断电、系统故障、进程崩溃导致数据库意外宕机,就会造成数据错误,用户的修改丢失,从而无法保证事务的持久性。数据库通过重做(redo)日志解决上述问题,保证事务持久性。当事务需要修改数据页面时,首先要将此次的修改内容记录到重做日志文件中。当数据库宕机后重启时,通过恢复重做日志,可以将数据库恢复到一个正确的状态。在共享存储集群中,每个数据库节点都可以读写位于共享存储上的数据文件,独立地对外提供服务。如果这些节点共享一个重做日志文件,必然会产生竞争,影响数据库性能。因此,集群中每个数据库节点都有属于自己的重做日志文件。在运行过程中,各个节点只会访问自己的重做日志文件,不会访问其它节点的重做日志文件。当一个节点产生重做日志时,它只需要将日志写入属于自己的重做日志即可,不同节点之间在写日志这件事情上是完全不相干的。通过这样的方式减少了节点之间的交互与等待,从而提高集群整体性能。单机数据库环境下,恢复重做日志,只需要按照日志LSN(注:日志的逻辑序号号,随着日志的写入而递增)从小到大的顺序依次恢复即可。与单机环境不同,数据库集群多个节点有自己的重做日志,且各个日志之间的LSN无法直接比较大小,因此,在重做日志恢复的时候,就会遇到问题。举例如下:如图1a所示,在重做日志恢复时考虑如下情况,一个数据页面被多个实例修改过,图中两个节点交替进行页面修改。对于同一个数据页面,如果先恢复一个节点的重做日志,再恢复另外一个节点,则没有按照页面的修改次序进行恢复,导致最后恢复出的数据是错误数据,如图1b所示。对于同一个数据页面,修改页面的日志可能分布在不同的重做日志文件中,必须按照该页面的修改次序进行恢复,这样恢复才是正确的,如图1c所示。综上所述,如何将相同页面在不同节点之间的修改按序恢复以保证数据的一致性是目前迫切需要解决的问题。
技术实现思路
本专利技术的目的在于克服现有技术的不足,提出一种设计合理、效率高且能够有效保证集群数据库一致性的基于页面更新序号的数据库集群多节点重做日志恢复方法。本专利技术解决其技术问题是采取以下技术方案实现的:一种基于页面更新序号的数据库集群多节点重做日志恢复方法,包括以下步骤:步骤1、在页面头部分配空间作为页面更新序号;步骤2、集群中所有的节点在更新数据页面时,更新页面更新序号和本节点的重做日志;步骤3、重新启动数据库集群,最先启动的节点成为主节点,由主节点进行实例恢复;步骤4、主节点从共享磁盘加载控制文件,从控制文件中读取每一个节点的重做日志信息作为扫描句柄,保存在扫描句柄数组中;步骤5、遍历所有的扫描句柄,恢复重做日志;步骤6、所有扫描句柄已经扫描完毕,重做日志恢复结束。进一步,所述步骤1在页面头部分配8个字节空间作为页面更新序号。进一步,所述步骤2的具体实现方法为:当数据页面发生修改时,新增一条重做日志,将修改的内容和当前的页面更新序号写入到这条重做日志当中,然后将页面更新序号值加一。进一步,所述主节点从共享磁盘加载的控制文件为定义数据库集群物理状态的二进制文件。进一步,所述步骤5的具体实现方法包括以下步骤:⑴遍历扫描句柄,如果所有的扫描句柄已经扫描完毕,跳出循环,转到步骤6;⑵如果当前的扫描句柄已经扫描完毕,转到步骤5,开始下一个重做日志扫描;⑶从当前的扫描句柄循环读取、分析、恢复每一条重做日志。6、根据权利要求5所述的基于页面更新序号的数据库集群多节点重做日志恢复方法,其特征在于:所述步骤⑶的具体实现方法为:①如果已经扫描到重做日志末尾,当前重做日志恢复结束,标记当前扫描句柄扫描完毕,转到步骤5,开始下一个重做日志扫描;②从扫描句柄当前扫描位置获取一条重做日志,从重做日志中获取页面更新序号,与当前页面的更新序号做对比,进行如下处理:若重做日志中记录的序号小于当前页面的更新序号,则忽略这条日志,继续下一条日志的扫描;若重做日志中记录的序号等于当前页面的更新序号,则将日志的修改应用到数据页面,然后将当前页面更新序号值加一,继续下一条日志扫描;若重做日志中记录的序号大于当前页面的更新序号且页面不连续,则页面的顺序更新记录在其他节点的重做日志当中,转到步骤5,开始下一个重做日志扫描。本专利技术的优点和积极效果是:本专利技术设计合理,其为每个页面设置一个用于标记页面更新顺序的页面更新序号,在新增重做日志和在实例恢复时,对页面更新序号进行维护,通过遍历各个重做日志,利用页面更新序号判断页面是否连续,将相同页面在不同节点之间的修改按序恢复,保证数据的一致性,提高了系统运行的可靠性。附图说明图1a为一个数据页面被多个实例修改过程示意图;图1b为采用节点顺序进行恢复过程示意图;图1c为采用页面修改顺序进行恢复过程示意图;图2为本专利技术的写重做日志的流程图;图3为本专利技术的恢复重做日志的流程图。具体实施方式以下结合附图对本专利技术做进一步详述。本专利技术的设计思想是:为了能够标记页面的更新次序,需要给每个页面维护一个更新序号。因此,在页面头部分配8个字节作为页面更新序号,代表了页面上的修改次序。每次更新数据页面后,会将页面更新序号值加一。在新增重做日志时,将页面当前的更新序号也记录到重做日志中。在实例恢复时,选择一个节点的重做日志进行恢复,如果发现当前要恢复的页面不连续,则切换到下一个重做日志进行恢复。重复上述过程直到所有的重做日志都恢复完毕。通过遍历各个重做日志,利用页面更新序号判断页面是否连续,可以将相同页面在不同节点之间的修改按序恢复,保证数据的一致性。基于上述设计思想,本专利技术提供一种基于页面更新序号的数据库集群多节点重做日志恢复的方法,包括以下步骤:步骤1、在页面头部分配空间作为页面更新序号,该页面更新序号表示页面的更新顺序。在本实施例中,在页面头部分配8个字节空间作为页面更新序号。在新增重做日志时,将修改的内容和当前的页面更新序号写入到这条重做日志中。步骤2、集群中所有的节点在更新数据页面时,更新页面更新序号和本节点的重做日志。如图1所示,本步骤的具体实现方法为:当数据页面发生修改本文档来自技高网
...

【技术保护点】
1.一种基于页面更新序号的数据库集群多节点重做日志恢复方法,其特征在于:包括以下步骤:/n步骤1、在页面头部分配空间作为页面更新序号;/n步骤2、集群中所有的节点在更新数据页面时,更新页面更新序号和本节点的重做日志;/n步骤3、重新启动数据库集群,最先启动的节点成为主节点,由主节点进行实例恢复;/n步骤4、主节点从共享磁盘加载控制文件,从控制文件中读取每一个节点的重做日志信息作为扫描句柄,保存在扫描句柄数组中;/n步骤5、遍历所有的扫描句柄,恢复重做日志;/n步骤6、所有扫描句柄已经扫描完毕,重做日志恢复结束。/n

【技术特征摘要】
1.一种基于页面更新序号的数据库集群多节点重做日志恢复方法,其特征在于:包括以下步骤:
步骤1、在页面头部分配空间作为页面更新序号;
步骤2、集群中所有的节点在更新数据页面时,更新页面更新序号和本节点的重做日志;
步骤3、重新启动数据库集群,最先启动的节点成为主节点,由主节点进行实例恢复;
步骤4、主节点从共享磁盘加载控制文件,从控制文件中读取每一个节点的重做日志信息作为扫描句柄,保存在扫描句柄数组中;
步骤5、遍历所有的扫描句柄,恢复重做日志;
步骤6、所有扫描句柄已经扫描完毕,重做日志恢复结束。


2.根据权利要求1所述的基于页面更新序号的数据库集群多节点重做日志恢复方法,其特征在于:所述步骤1在页面头部分配8个字节空间作为页面更新序号。


3.根据权利要求1所述的基于页面更新序号的数据库集群多节点重做日志恢复方法,其特征在于:所述步骤2的具体实现方法为:当数据页面发生修改时,新增一条重做日志,将修改的内容和当前的页面更新序号写入到这条重做日志当中,然后将页面更新序号值加一。


4.根据权利要求1所述的基于页面更新序号的数据库集群多节点重做日志恢复方法,其特征在于:所述主节点从共享磁盘加载的控制文件为定义数据库集群物理状态...

【专利技术属性】
技术研发人员:刘碧楠周勇亮吴嵩蒋旭于凯马岳李彬陈振巍
申请(专利权)人:天津神舟通用数据技术有限公司
类型:发明
国别省市:天津;12

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1