数据库修复方法及装置与流程

文档序号:11286414阅读:202来源:国知局
数据库修复方法及装置与流程

本发明涉及计算机技术领域,特别涉及一种数据库修复方法及装置。



背景技术:

目前,广泛应用于移动终端、pc客户端等领域的轻量级文件数据库,如,sqlite或sqlcipher等,在实际使用时,极易受到客户端文件系统损坏、设备断电等客观因素的影响,造成数据库损坏,从而丢失数据。并且,轻量级数据库由于具有轻量化的特点,其本身并未提供一种可靠的修复机制,不能从损坏的数据库读出数据,这将导致保存在数据库里的用户数据丢失,如联系人、聊天记录(微信),电话本、短信(手机基础功能)等丢失。

以sqlite或sqlcipher数据库为例,目前,对损坏的sqlite或sqlcipher数据库进行修复的方式是,通过使用sqlite命令行的“.dump”命令,来进行数据修复。其原理是使用sqlite等数据库现有的sql接口,通过执行sql语句来遍历所有数据表,并将现有数据转换为新的sql语句输出,在新的数据库上执行上述输出的sql语句即可构造出等效的数据库。

但是,采用目前的修复方式修复数据库之前,需要利用数据库自身的机制,打开数据库,而当数据库的文件头或者sqlite_master表损坏时,数据库将完全不可读,即无法打开数据库,从而也无法对数据库进行修复。且由于数据库本身的机制,数据库的文件头需要频繁的读写,从而使文件头的损坏率极高,从而使得现有的修复方式,修复的成功率较低。



技术实现要素:

本发明旨在至少在一定程度上解决相关技术中的技术问题之一。

为此,本发明的第一个目的在于提出一种数据库修复方法,实现了在数据库损坏甚至是数据库的文件头损坏时,对数据库进行修复,提高了数据库修复的成功率,改善了数据库修复的效果,从而提高了数据库的可靠性和实用性。

本发明的第二个目的在于提出一种数据库修复装置。

本发明的第三个目的在于提出一种终端。

本发明的第四个目的在于提出一种计算机可读存储介质。

本发明的第五个目的在于提出一种计算机程序产品。

为达上述目的,本发明第一方面实施例提供一种数据库修复方法,该方法包括:

根据数据库上报的损坏错误码,确定所述数据库满足修复条件;

获取已备份的元数据,其中,所述已备份的元数据中,包括第一表名组,和与第一表名组分别对应的第一根节点组;

根据所述已备份的元数据,获取所述数据库中包括的第一用户数据组;

根据所述第一表名组和第一用户数据组,对所述数据库进行修复处理。

本发明实施例提供的数据库修复方法,首先根据数据库上报的损坏错误码,确定数据库满足修复条件,然后获取已备份的元数据,并根据已备份的元数据,获取数据库中包括的第一用户数据组,最后根据第一表名组和第一数据组,对数据库进行修复处理。由此,通过对解析数据所需的元数据进行备份,实现了在数据库损坏甚至是数据库的文件头损坏时,对数据库进行修复,提高了数据库修复的成功率,改善了数据库修复的效果,从而提高了数据库的可靠性和实用性。

为达上述目的,本发明第二方面实施例提供一种数据库修复装置,该装置包括:

第一确定模块,用于根据数据库上报的损坏错误码,确定所述数据库满足修复条件;

第一获取模块,用于获取已备份的元数据,其中,所述已备份的元数据中,包括第一表名组,和与第一表名组分别对应的第一根节点组;

第二获取模块,用于根据所述已备份的元数据,获取所述数据库中包括的第一用户数据组;

处理模块,用于根据所述第一表名组和第一用户数据组,对所述数据库进行修复处理。

本发明实施例提供的数据库修复装置,首先根据数据库上报的损坏错误码,确定数据库满足修复条件,然后获取已备份的元数据,并根据已备份的元数据,获取数据库中包括的第一用户数据组,最后根据第一表名组和第一数据组,对数据库进行修复处理。由此,通过对解析数据所需的元数据进行备份,实现了在数据库损坏甚至是数据库的文件头损坏时,对数据库进行修复,提高了数据库修复的成功率,改善了数据库修复的效果,从而提高了数据库的可靠性和实用性。

为达上述目的,本发明第三方面实施例提供一种终端,包括:

存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,当所述处理器执行所述程序时实现如第一方面所述的数据库修复方法。

本发明实施例提供的终端,首先根据数据库上报的损坏错误码,确定数据库满足修复条件,然后获取已备份的元数据,并根据已备份的元数据,获取数据库中包括的第一用户数据组,最后根据第一表名组和第一数据组,对数据库进行修复处理。由此,通过对解析数据所需的元数据进行备份,实现了在数据库损坏甚至是数据库的文件头损坏时,对数据库进行修复,提高了数据库修复的成功率,改善了数据库修复的效果,从而提高了数据库的可靠性和实用性。

为达上述目的,本发明第四方面实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如第一方面所述的数据库修复方法。

本发明实施例提供的计算机可读存储介质,首先根据数据库上报的损坏错误码,确定数据库满足修复条件,然后获取已备份的元数据,并根据已备份的元数据,获取数据库中包括的第一用户数据组,最后根据第一表名组和第一数据组,对数据库进行修复处理。由此,通过对解析数据所需的元数据进行备份,实现了在数据库损坏甚至是数据库的文件头损坏时,对数据库进行修复,提高了数据库修复的成功率,改善了数据库修复的效果,从而提高了数据库的可靠性和实用性。

为达上述目的,本发明第五方面实施例提出了一种计算机程序产品,当所述计算机程序产品中的指令处理器执行时,执行如第一方面所述的数据库修复方法。

本发明实施例提供的计算机程序产品,首先根据数据库上报的损坏错误码,确定数据库满足修复条件,然后获取已备份的元数据,并根据已备份的元数据,获取数据库中包括的第一用户数据组,最后根据第一表名组和第一数据组,对数据库进行修复处理。由此,通过对解析数据所需的元数据进行备份,实现了在数据库损坏甚至是数据库的文件头损坏时,对数据库进行修复,提高了数据库修复的成功率,改善了数据库修复的效果,从而提高了数据库的可靠性和实用性。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。

图1是根据一示例性实施例示出的一种数据库修复方法的流程示意图;

图1a是根据一示例性实施例示出的b-tree的结构示意图;

图1b是根据一示例性实施例示出的一种数据库修复方法的应用场景图;

图2是根据另一示例性实施例示出的一种数据库修复方法的流程示意图;

图3是根据另一示例性实施例示出的一种数据库修复方法的流程示意图;

图4是根据另一示例性实施例示出的一种数据库修复方法的流程示意图;

图5是根据另一示例性实施例示出的一种数据库修复方法的流程示意图;

图5a是根据一示例性实施例示出的一种数据库修复方法的应用场景图;

图6是根据另一示例性实施例示出的一种数据库修复方法的流程示意图;

图7是根据一示例性实施例示出的一种数据库修复装置的结构框图;

图8是根据另一示例性实施例示出的一种数据库修复装置的结构框图。

通过上述附图,已示出本发明明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本发明构思的范围,而是通过参考特定实施例为本领域技术人员说明本发明的概念。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。

下面参考附图描述本发明实施例的数据库修复方法及装置。

现有的对损坏的数据库进行修复时,以sqlite或sqlcipher数据库为例,修复方式是通过使用sqlite命令行的“.dump”命令,来进行数据修复。其原理是使用sqlite等数据库现有的sql接口,通过执行sql语句来遍历所有数据表,并将现有数据转换为新的sql语句输出,在新的数据库上执行上述输出的sql语句即可构造出等效的数据库。

但是,采用上述方式修复数据库时,在修复数据库前需要使用数据库自身的机制打开数据库,而当数据库的文件头或者sqlite_master表损坏时,数据库将完全不可读。且,由于数据库本身的机制,数据库的文件头需要频繁的读写,这就导致了数据库的文件头损坏率极高,从而使得数据库在损坏时,无法打开的几率极高,也无法对数据库进行修复,因此采用现有的方式修复数据库时,修复的成功率较低。

另外,由于数据库的数据之间存在层级关系,层级低的数据所处的位置,需要从层级高的解析数据中找到,通过逐层向下寻找,修复位于最底层的用户数据。而目前的数据库修复方式,在遍历表的过程中,遇到错误将终止遍历,这就导致了现有的数据库修复方式,仅能修复表开头到损坏处的数据,剩余的数据将丢失。

例如,若一张表的前20%的数据是完好的,在20%处的节点被损坏,后80%的数据也是完好的。则利用现有的修复方式,修复数据库时,只能遍历前20%的数据,遍历到20%处的损坏处,将终止遍历,这就导致了只能修复前20%的数据,尽管后80%的数据是完好的,仍然无法修复。

本发明针对采用目前的修复方式修复数据库时,需要打开数据库,但由于数据库的文件头或者sqlite_master表损坏率极高,而文件头损坏时,无法打开数据库,从而也无法对数据库进行修复,导致修复的成功率较低的问题,提出一种数据库修复方法,该方法通过对解析数据所需的元数据进行备份,从而实现了在数据库损坏甚至是数据库的文件头损坏时,对数据库进行修复,提高了数据库修复的成功率,改善了数据库修复的效果,从而提高了数据库的可靠性和实用性。

下面结合附图,对本申请提供的数据库修复方法、装置及终端进行详细说明。

图1是根据一示例性实施例示出的一种数据库修复方法的流程示意图。

如图1所示,该数据库修复方法,包括以下步骤:

步骤101,根据数据库上报的损坏错误码,确定数据库满足修复条件。

具体的,本发明实施例提供的数据库修复方法,可以由本发明实施例提供的数据库修复装置执行。其中,数据库修复装置,可以被配置在任意终端中,如手机、电脑等,以对终端中被损坏的数据库进行修复。或者,也可以由本发明实施例提供的计算机程序产品执行,其中,该计算机程序产品,可以被配置在数据库中,以对被损坏的数据库进行修复。

可以理解的是,如sqlite或sqlcipher等轻量级文件数据库,在实际使用时,极易受到客户端文件系统损坏、设备断电等客观因素的影响,造成数据库损坏,而根据数据库本身的机制,数据库损坏时,会返回损坏错误码。

比如,以sqlite或sqlcipher数据库为例,当数据库发生不同的损坏时,会上报不同的损坏错误码。例如,当数据库被损坏后,可能会上报sqlite_corrupt,表示数据库磁盘映像不正确;或者上报sqlite_notade,表示被打开的不是一个数据库文件;或者上报sqlite_cantopen,表示无法打开数据库文件;或者上报sqlite_internal,表示sqlite内部逻辑错误;或者上报sqlite_protocol,表示数据库锁定协议错误;或者上报sqlite_error,表示sql错误或丢失数据库,等等。

因此,在本发明实施例中,可以根据数据库上报的损坏错误码,确定数据库是否满足修复条件。

具体实现时,可以根据数据库上报的损坏错误码的数量和/或类型,确定数据库是否满足修复条件,从而确定数据库是否需要修复。

具体的,可以预先设置一个阈值,当数据库上报的损坏错误码的数量达到预设的阈值时,则确定数据库满足修复条件。

比如,可以预先设置当数据库上报的损坏错误码达到2个时,确定数据库满足修复条件。则若数据库上报了任意2个损坏错误码,即可确定数据库满足修复条件,从而确定数据库需要修复。

或者,可以预先设置一个损坏错误码的类型,当数据库上报的损坏错误码的类型与预先设置的类型相同时,则确定数据库满足修复条件。

比如,可以预先设置数据库上报的损坏错误码为sqlite_corrupt类型时,确定数据库满足修复条件,则若数据库上报了该类型的损坏错误码后,即可确定数据库满足修复条件,从而确定数据库需要修复。

或者,可以预先设置损坏错误码的类型及数量,当数据库上报的损坏错误码的类型及数量与预先设置的类型及数量相同时,则确定数据库满足修复条件。

比如,可以预先设置数据库上报的损坏错误码为sqlite_corrupt和sqlite_notade2个时,确定数据库满足修复条件。则若数据库上报了sqlite_corrupt和sqlite_notade2个损坏错误码时,即可确定数据库满足修复条件,从而确定数据库需要修复。若数据库上报的错误码为sqlite_corrupt和sqlite_protocol2个损坏错误码时,则确定数据库不满足修复条件,不需要修复。

或者,可以预先设置数据库上报的损坏错误码为2个,其中一个为sqlite_corrupt时,确定数据库满足修复条件,则若数据库上报了sqlite_corrupt和sqlite_notade2个损坏错误码时,或sqlite_corrupt和sqlite_protocol2个损坏错误码时,都可确定数据库满足修复条件,从而确定数据库需要修复等等。

需要说明的是,上述判断数据库是否满足修复条件的实例,仅是示意性说明,不能作为对本申请技术方案的限制,本领域技术人员在此基础上,可以根据需要任意设置数据库修复条件,此处对此不作限定。

步骤102,获取已备份的元数据。

其中,已备份的元数据中,包括第一表名组,和与第一表名组分别对应的第一根节点组。

步骤103,根据已备份的元数据,获取数据库中包括的第一用户数据组。

其中,第一用户数据组,指数据库中,第一表名组对应的各表中的全部用户数据。

需要说明的是,第一表名组中可以包括一个或多个表的名称,相应的第一根节点组中,也可以包括一个或多个根节点。

可以理解的是,以sqlite或sqlcipher数据库为例,sqlite_master是sqlite或sqlcipher数据库自带的系统表,它存储了其它所有表的元数据,元数据中的表名组和根节点组存在对应关系,根据对应关系,即可找到表名对应的表的位置。而表的结构是开发人员自己定义的,表由多个页组成,每一页为一个节点,页之间构成b-tree,如图1a所示。b-tree有中间页和叶子页两种类型,树底部的页为叶子页,除此之外都为中间页。中间页存储了其下层节点的key(密钥)所在的范围和在数据库中的页码,相当于索引,叶子页存储了该表真正的数据。根据元数据包括的表名组和根节点组,确定了表的位置后,即可打开相应的表,进而通过表的中间页逐层向下查找,获取叶子页中的数据组。

具体实现时,可以在数据库未损坏时,对数据库中,sqlite_master存储的其它所有表的元数据进行备份,从而在数据库需要修复时,可以从已备份的数据库中获取元数据,并根据已备份的元数据中的第一表名组和第一根节点组,找到第一表名组对应的表的位置,从而获取数据库中包括的第一用户数据组。

需要说明的是,具体的对元数据进行备份的过程,将在下述实施例中进行详细介绍,此处不作说明。

步骤104,根据第一表名组和第一用户数据组,对数据库进行修复处理。

可以理解的是,除了表名组和用户数据组之外,数据库的索引和表结构,对数据库起着至关重要的作用。索引含有关键字段的值和指向实际记录位置的指针,这些值和指针按照特定的顺序存储,从而可以以较快的速度查找到所需要的用户数据。而表结构包括一个表的字段、类型等基本属性。因此,获取了数据库中的第一表名组和第一用户数据组后,还可以恢复数据库的索引和表结构。

具体实现时,由于表是由开发人员自行定义的,因此在进行数据库修复时,业务层可以根据表名直接获得表的数据结构和索引。在本发明实施例中,确定了第一表名组和第一用户数据组后,即可根据第一表名组中的各表名,获得各个表的表结构和索引,并将第一用户数据组根据表结构和索引,写入数据库,从而完成对数据库的修复处理。

可以理解的是,利用现有技术,进行数据库修复时,由于数据库本身的机制,数据库的文件头需要频繁的读写,这就导致了数据库的文件头损坏率极高,从而使得无法打开数据库,也无法对数据库进行修复,因此采用现有的方式修复数据库时,修复的成功率较低。而本发明实施例提供的数据库修复方法,通过对数据库中的元数据进行备份,从而在数据库的文件头损坏时,仍然可以根据已备份的元数据中的第一表名组及第一根节点组,获取第一用户数据组,以对数据库进行修复,提高了数据库修复的成功率。

另外,利用现有技术,进行数据库修复时,由于数据之间存在层级关系,层级低的数据所处的位置,需要从层级高的解析数据找到,通过逐层向下寻找,修复位于最底层的用户数据,被损坏的节点层级越高,丢失的数据越多,修复效果越差。而本发明实施例提供的数据库修复方法,通过对数据库中的元数据进行备份,从而在数据库的高层级节点被损坏时,也可以根据备份的元数据,获取被损坏的节点下层的数据,而不至于丢失大量的数据,提高了数据库修复的成功率,改善了数据库修复的效果。

举例来说,假设若一张表的前20%的数据是完好的,在20%处的节点被损坏,后80%的数据也是完好的,则利用现有的修复方式,修复数据库时,只能遍历前20%的数据,遍历到20%处的损坏处,将终止遍历,这就导致了只能修复前20%的数据,尽管后80%的数据是完好的,仍然无法修复。而本发明实施例提供的数据库修复方法,可以对数据库中的元数据进行备份,只要第一表名组及第一根节点组中包括了数据中的所有表名,那么根据已备份的元数据进行数据修复时,不仅可以获取前20%的用户数据,还可以获取20%的节点后的80%的用户数据,从而对整个表的用户数据进行修复,提高了数据库修复的成功率,改善了数据库修复的效果。

需要说明的是,在本发明实施例中,利用第一表名组和第一用户数据组,对数据库进行修复处理时,还可以根据待修复数据的重要性,预先设置对数据库进行修复处理的方式。例如,可以根据待修复数据的重要性,将待修复数据分成不同的等级,并预先设置待修复数据的等级与对数据库进行修复处理的方式之间的对应关系,从而在确定数据库满足修复条件时,根据已备份的元数据,获取了第一表名组和第一用户数据组后,可以根据待修复数据的不同等级,以对应的修复方式,对数据库进行修复处理。

比如,可以根据待修复数据的重要性,设置重要性高的待修复数据,对应的数据库修复处理方式为,在不打扰用户的情况下,通过弹窗提示用户进行数据修复;重要性低的待修复数据,对应的数据库修复处理方式为,不通知用户,在后台修复。则在确定数据库满足修复条件后,若待修复数据重要性高,则通过弹窗提示用户进行修复。

举例来说,若数据库中的文件发生损坏,可能导致用户的部分聊天记录丢失,而用户的聊天记录属于重要数据,则可以通过如图1b所示的弹窗,提示用户进行修复。在用户通过点击或滑动等操作触控“开始修复”的按钮后,即可对待修复数据进行修复。或者,若数据库中的文件发生损坏,可能导致用户的账号头像发生变化,而用户的账号头像属于不重要的数据,则可以不通知用户,直接在后台进行修复,等等。

另外,还可以根据用户的需要,由用户设置对数据库进行修复处理的方式。例如,若用户认为对数据库进行修复时,通过弹窗进行提示,会影响用户对终端的使用,则可以设置对任意待修复数据进行修复时,都在后台进行,从而避免被打扰。或者,用户希望了解对数据库的修复过程,则可以设置数据库发生任意损坏时,都通过弹窗提示用户,等等。从而在确定数据库满足修复条件时,根据已备份的元数据,获取了第一表名组和第一用户数据组后,根据用户设置的修复方式,对数据库进行修复处理。

本发明实施例提供的数据库修复方法,首先根据数据库上报的损坏错误码,确定数据库满足修复条件,然后获取已备份的元数据,并根据已备份的元数据,获取数据库中包括的第一用户数据组,最后根据第一表名组和第一数据组,对数据库进行修复处理。由此,通过对解析数据所需的元数据进行备份,实现了在数据库损坏甚至是数据库的文件头损坏时,对数据库进行修复,提高了数据库修复的成功率,改善了数据库修复的效果,从而提高了数据库的可靠性和实用性。

图2是根据另一示例性实施例示出的一种数据库修复方法的流程示意图。

如图2所示,该数据库修复方法,包括以下步骤:

步骤201,在数据库启动后,以预设的时间间隔对数据库中的元数据进行备份。

其中,元数据包括表名组和根节点组。

具体的,本发明实施例提供的数据库修复方法,可以由本发明实施例提供的数据库修复装置执行。其中,数据库修复装置,可以被配置在任意终端中,如手机、电脑等,以对终端中被损坏的数据库进行修复。或者,也可以由本发明实施例提供的计算机程序产品执行,其中,该计算机程序产品,可以被配置在数据库中,以对被损坏的数据库进行修复。

其中,预设的时间间隔,可以是由开发人员预先设定的,或者,也可以是由用户根据需要,自行定义的。

例如,开发人员可以预先设置对数据库中所有的元数据以相同时间间隔进行备份;或者,开发人员可以预先设置以不同的时间间隔对不同数据对应的元数据进行备份;或者,开发人员可以根据各数据的损坏频率,设置对损坏频率较高的数据对应的元数据以较短的时间间隔进行备份,设置对损坏频率较低的数据对应的元数据以较长的时间间隔进行备份;或者,用户也可以根据数据的重要性,设置对数据库中重要数据对应的元数据以较短的时间间隔进行备份,对数据库中不太重要的数据对应的元数据以较长的时间间隔进行备份,等等。从而在数据库启动后,以预设的时间间隔,自动对数据库中的元数据进行备份。

例如,假设数据库中包括用户使用某应用过程中的浏览记录、通讯录、聊天记录等等的数据,则开发人员可以预先设置在数据库启动后,对浏览记录、通讯录、聊天记录分别对应的元数据都以2小时的时间间隔进行备份。或者,开发人员可以预先设置在数据库启动后,对浏览记录对应的元数据以3小时的时间间隔进行备份,对通讯录对应的元数据以2小时的时间间隔进行备份,对聊天记录对应的元数据以1小时的时间间隔进行备份。或者,开发人员可以根据各数据的损坏频率,设置对损坏频率较高的数据对应的元数据以30分钟的时间间隔进行备份,设置对损坏频率较低的数据对应的元数据以2小时的时间间隔进行备份。或者,用户认为通讯录很重要,聊天记录和浏览记录不重要,也可以设置以30分钟的时间间隔对通讯录对应的元数据进行备份,以2小时的时间间隔对聊天记录和浏览记录分别对应的元数据进行备份,等等。从而在数据库启动后,以预设的时间间隔,自动对数据库中的元数据进行备份。

步骤202,根据数据库上报的损坏错误码的数量和/或类型,确定数据库满足修复条件。

步骤203,获取已备份的元数据。

其中,已备份的元数据中,包括第一表名组,和与第一表名组分别对应的第一根节点组。

步骤204,根据已备份的元数据,获取数据库中包括的第一用户数据组。

步骤205,根据第一表名组和第一用户数据组,对数据库进行修复处理。

其中,上述步骤202-步骤205的具体实现过程和原理,可以参照上述实施例中步骤101-步骤104的详细描述,此处不再赘述。

本发明实施例提供的数据库修复方法,首先在数据库启动后,以预设的时间间隔对数据库中的元数据进行备份,然后根据数据库上报的损坏错误码的数量和/或类型,确定数据库满足修复条件,再获取已备份的元数据,并根据已备份的元数据,获取数据库中包括的第一用户数据组,最后根据第一表名和第一用户数据组,对数据库进行修复处理。通过对解析数据所需的元数据进行备份,实现了在数据库损坏甚至是数据库的文件头损坏时,对数据库进行修复,提高了数据库修复的成功率,改善了数据库修复的效果,从而提高了数据库的可靠性和实用性。

通过上述分析可知,可以在数据库启动后,以预设的时间间隔对数据库中的元数据进行备份,从而在数据库损坏时,根据已备份的元数据,对数据库进行修复处理。在实际运用中,还可以在数据库中的用户数据发生改变时,对新新写入的用户数据进行备份,下面结合图3,对本发明实施例提供的数据库修复方法进行进一步说明。

图3是根据另一示例性实施例示出的一种数据库修复方法的流程示意图。

如图3所示,该数据库修复方法,包括以下步骤:

步骤301,在确定数据库有新的叶子页数据写入时,对叶子页数据进行备份。

需要说明的是,为实现本实施例提供的数据库修复方法,可以通过在数据库中增加一个备份接口,并设置当数据库中有新的叶子页数据写入时,即可将写入的叶子页数据发送至备份接口,从而本申请提供的数据库修复装置,即可通过监控数据库的备份接口,来确定是否有新的叶子页数据写入。

具体的,数据库可以通过回调函数的形式,向备份接口发送新的叶子页数据。也就是说,当数据库写入一个新的页时,数据库即可向备份接口发送回调函数,在本发明实施例中,可以截获数据库发送的回调函数,并根据回调函数中包括的页数据的类型,判断页数据类型是否为叶子页,若是,则确定数据库有新的叶子页数据写入,从而对新写入的叶子页数据进行备份。

即,步骤301,具体可以包括:

一,截获数据库发送的回调函数,回调函数中包括页数据的类型。

二,判断页数据的类型,是否为叶子页。

三,若是,则确定数据库有新的叶子页数据写入。

四,对叶子页数据进行备份。

举例来说,假设数据库中,用户的通讯录新增加了联系人及其个人信息,则数据库即可向备份接口发送回调函数,本发明实施例提供的数据库修复装置,即可截获数据库发送的回调函数,并在确定新写入的数据为叶子页数据后,对新写入的叶子页数据,即用户的联系人数据进行备份。

另外,由于数据库中不同的表,通常都包含叶子页,因此,在本发明实施例中,数据库发送的回调函数中,还可以包括表名,从而在确定数据库有新的叶子页数据写入时,可以根据表名,将叶子页数据存储在表名对应的表中。

即,步骤301中,对叶子页数据进行备份,具体可以包括:

将叶子页数据存储在表名对应的表中。

举例来说,假设用户的通讯录为数据库中的一个表,用户的通讯录新增加了联系人及其个人信息时,数据库即可向备份接口发送包含表名为“通讯录”的回调函数,数据修复装置截获该回调函数,并确定新写入的数据为叶子页数据后,即可根据表名,将叶子页数据存储在通讯录对应的表中。

步骤302,根据数据库上报的损坏错误码的数量和/或类型,确定数据库满足修复条件。

步骤303,获取已备份的元数据及叶子页数据。

其中,已备份的元数据中,包括第一表名组,和与第一表名组分别对应的第一根节点组。

步骤304,根据已备份的元数据,获取数据库中包括的第一用户数据组。

步骤305,根据第一表名组、第一用户数据组和叶子页数据,对数据库进行修复处理。

其中,上述步骤302-步骤305的具体实现过程和原理,可以参照上述实施例中步骤101-步骤104的详细描述,此处不再赘述。

具体的,通过在数据库有新的叶子页数据写入时,对叶子页数据进行备份,则可以在叶子页数据发生损坏时,直接从备份中,获取叶子页数据,以直接根据叶子页数据,对数据库进行修复。

需要说明的是,在本发明实施例中,可以仅在确定数据库有新的叶子页数据写入时,对新写入的叶子页数据进行备份,也可以将上述实施例中,步骤201的对数据库中的元数据进行备份的方法,与本发明实施例步骤301中,对叶子页数据进行备份的方法结合,即,在数据库启动后,以预设的时间间隔,对数据库中的元数据进行备份,并在每次元数据备份后,下次元数据备份前,数据库中新增的叶子页数据进行备份,从而尽量保证根据备份数据可以最大限度的对数据库进行修复。

进一步的,由于根据元数据,即可获取该元数据中包括的所有叶子页数据,因此,为了节省内存,还可以在每次元数据备份后,将此次元数据备份之前存储的叶子页数据删除,仅保留最后一次进行元数据备份之后,数据库中新增的叶子页数据,从而在占有最小内存的情况下,实现对数据库的最大限度的修复。

本发明实施例提供的数据库修复方法,首先在确定数据库有新的叶子页数据写入时,对叶子页数据进行备份,然后根据数据库上报的损坏错误码的数量和/或类型,确定数据库满足修复条件,再获取已备份的元数据及叶子页数据,并根据已备份的元数据,获取数据库中包括的第一用户数据组,最后根据第一表名、第一用户数据组和叶子页数据,对数据库进行修复处理。通过对解析数据所需的元数据及新写入的叶子页数据进行备份,实现了在数据库损坏甚至是数据库的文件头损坏时,对数据库进行修复,提高了数据库修复的成功率,改善了数据库修复的效果,从而提高了数据库的可靠性和实用性。

通过上述分析可知,可以在数据库运行时,通过对数据库中的元数据进行备份,进而在数据库损坏时,根据备份的元数据,对数据库进行修复。在本申请一种可能的实现形式中,若备份的元数据并不包括数据库中所有的元数据,那么根据备份的数据进行数据库修复时,得到的修复后的数据库中,也仅包括部分数据。为了实现对数据的最大限度的修复,本申请实施例中,还可以采用图4所示的形式,对数据库进行修复。

图4是根据另一示例性实施例示出的一种数据库修复方法的流程示意图。

如图4所示,该数据库修复方法,包括以下步骤:

步骤401,根据数据库上报的损坏错误码,确定数据库满足修复条件。

步骤402,获取数据库的系统表。

其中,数据库的系统表,指数据库自带的表。以sqlite或sqlcipher数据库为例,数据库自带的sqlite_master即为数据库的系统表。

具体实现时,可以根据数据库的文件头,获取数据库的系统表。

举例来说,以sqlite数据库为例,sqlite数据库在第一页0偏移地址处存储了100字节的文件头记录,文件头记录描述了数据库文件的数据结构,在本发明实施例中,确定数据库满足修复条件后,若数据库的文件头未发生损坏,则可根据数据库的文件头,获取数据库的系统表。

可以理解的是,当数据库的文件头损坏时,将导致数据库完全不可读,也无法获取数据库的系统表,针对上述情况,在本发明实施例中,还可以根据预设的默认值,获取数据库的系统表。

其中,预设的默认值,可以是根据数据库所在的终端对应的操作系统类型确定的,也可以是由开发人员根据经验,预先设置的,此处不作限制。

相应的,在进行数据库修复时,若数据库的文件头已损坏,则在上述步骤402之前,还可以包括:

根据数据库所在的终端对应的操作系统类型,确定预设的默认值。

举例来说,假设数据库所在的终端对应的操作系统为安卓系统,则可以根据安卓系统中数据库的文件头,预先设置默认值,从而在操作系统为安卓系统的终端中,数据库文件头损坏时,以预设的默认值代替数据库的文件头,用以获取数据库的系统表。

步骤403,根据系统表,确定数据库中包括的第二表名组和与第二表名组分别对应的第二根节点组。

其中,上述第二表名组与第一表名组可能不同,也可能相同。

举例来说,若在数据库运行过程中,以每30分钟为间隔,对数据库进行了元数据备份,在最后一次备份后的20分钟后,数据库损坏了。且在最后一次备份后,数据库中增加了新的表文件a,那么备份的第一表名组中,就未包括新增的表文件a对应的表名和根节点,而此时,若数据库中损坏的节点并非表a,那么根据系统表,确定的第二表名组中,就包括表a的名称和对应的根节点。

步骤404,根据第二表名组和第二根节点组,获取第二用户数据组。

其中,第二用户数据组,指数据库中,第二表名组对应的各表中的全部用户数据。

可以理解的是,以sqlite或sqlcipher数据库为例,sqlite_master是sqlite或sqlcipher数据库自带的系统表,它存储了其它所有表的元数据,元数据中的表名组和根节点组存在对应关系,根据对应关系,即可找到表名对应的表的位置。而表的结构是开发人员自己定义的,表由多个页组成,每个页为一个节点,页之间构成b-tree。b-tree有中间页和叶子页两种类型,中间页存储了其下层节点的key(密钥)所在的范围和在数据库中的页码,相当于索引,叶子页存储了该表真正的数据。根据元数据包括的表名组和根节点组,确定了表的位置后,即可打开相应的表,进而通过表的中间页逐层向下查找,获取叶子页中的数据组。

具体实现时,在本发明实施例中,确定数据库满足修复条件后,可以首先获取数据库的系统表,从而根据系统表,获取数据库中包括的第二表名组和与第二表名组分别对应的第二根节点组,并根据第二表名组和第二根节点组,找到第二表名组对应的表的位置,从而通过表的中间页逐层向下查找,获取数据库中的第二用户数据。

步骤405,根据第二表名组和第二用户数据组,对数据库进行修复处理。

可以理解的是,除了表名组和用户数据组之外,数据库的索引和表结构,对数据库起着至关重要的作用。索引含有关键字段的值和指向实际记录位置的指针,这些值和指针按照特定的顺序存储,从而可以以较快的速度查找到所需要的用户数据。而表结构包括一个表的字段、类型等基本属性。因此,获取了数据库中的第二表名组和第二用户数据组后,还可以恢复数据库的索引和表结构。

具体实现时,由于表是由开发人员自行定义的,因此数据库的业务层可以根据表名直接获得表的数据结构和索引。在本发明实施例中,确定了第二表名组和第二用户数据组后,即可根据第二表名组中的各表名,获得各个表的表结构和索引,并将第二用户数据组根据表结构和索引,写入数据库,从而完成对数据库的修复处理。

需要说明的是,在本发明实施例中,利用第二表名组和第二用户数据组,对数据库进行修复处理时,还可以根据待修复数据的重要性,预先设置对数据库进行修复处理的方式。例如,可以根据待修复数据的重要性,将待修复数据分成不同的等级,并预先设置待修复数据的等级与对数据库进行修复处理的方式之间的对应关系。从而在确定数据库满足修复条件时,可以根据数据库的系统表,获取了第二表名组和第二用户数据后,可以根据待修复数据的不同等级,以对应的修复方式,对数据库进行修复处理。具体的实现过程和原理,可以参照上诉实施例步骤104的详细描述,此处不再赘述。

可以理解的是,本发明实施例中,通过根据预设的默认值,获取数据库的系统表,从而在文件头损坏时,仍然可以获取数据库的系统表,并根据数据库的系统表,获取第二表名组和第二用户数据组,从而对数据库进行修复处理。相比现有技术对数据库进行修复的方式,在数据库的文件头损坏时,无法对数据库进行修复,本发明实施例提供的数据库修复方式,提高了数据库修复的成功率。

本发明实施例提供的数据库修复方法,根据数据库上报的损坏错误码,确定数据库满足修复条件后,首先获取数据库的系统表,然后根据系统表,确定数据库中包括的第二表名组和与第二表名组分别对应的第二根节点组,再根据第二表名组和第二根节点组,获取第二用户数据组,最后根据第二表名组和第二用户数据组,对数据库进行修复处理。通过根据数据库的系统表,对数据库进行修复处理,实现了在数据库损坏甚至是数据库的文件头损坏时,对数据库进行修复,提高了数据库修复的成功率,从而提高了数据库的可靠性和实用性。

通过上述分析可知,既可以对数据库中的元数据进行备份,从而在数据库损坏时,根据已备份的元数据,对数据库进行修复处理。或者,也可以根据预设的文件头,打开数据库的系统表,来确定数据库中的元数据,进而对数据库进行修复处理。然而,在实际运用中,在数据库损坏之前,可能并没有将所有的元数据都进行备份,并且,利用预设的文件头,打开的数据库的系统表中,可能也未包括完整的元数据。因此,在本申请一种较优的实现形式中,还可以利用备份的元数据和打开的数据库的系统表,同时对数据库进行修复,下面结合图5,对上述情况进行详细说明。

图5是根据另一示例性实施例示出的一种数据库修复方法的流程示意图。

如图5所示,该数据库修复方法,可以包括以下步骤:

步骤501,根据数据库上报的损坏错误码,确定数据库满足修复条件。

步骤502,获取已备份的元数据。

其中,已备份的元数据中,包括第一表名组,和与第一表名组分别对应的第一根节点组。

步骤503,根据已备份的元数据,获取数据库中包括的第一用户数据组。

具体实现时,可以在数据库未损坏时,对数据库中,sqlite_master存储的其它所有表的元数据进行备份,从而在确定数据库需要修复时,可以从已备份的数据库中获取元数据,并根据已备份的元数据中的第一表名组和第一根节点组,找到第一表名组对应的表的位置,从而通过表的中间页逐层向下查找,获取数据库中包括的第一用户数据组。

步骤504,获取数据库的系统表。

步骤505,根据系统表,确定数据库中包括的第二表名组和与第二表名组分别对应的第二根节点组。

步骤506,根据第二表名组和第二根节点组,获取第二用户数据组。

具体实现时,在本发明实施例中,可以首先获取数据库的系统表,从而根据系统表,获取数据库中包括的第二表名组和与第二表名组分别对应的第二根节点组,并根据第二表名组和第二根节点组,找到第二表名组对应的表的位置,从而通过表的中间页逐层向下查找,获取数据库中的第二用户数据。

需要说明的是,步骤502-步骤503,也可以在步骤506之后执行,或者同步骤504-步骤506同时执行,此处不作限制。

其中,上述步骤501-步骤503的具体实现过程和原理,可以参照上述实施例中步骤101-步骤103的详细描述,步骤504-步骤506的具体实现过程和原理,可以参照上述实施例中步骤402-步骤404的详细描述,此处不再赘述。

步骤507,根据第二表名组和第二用户数据组,及第一表名组和第一用户数据组对数据库进行修复处理。

可以理解的是,除了表名组和用户数据组之外,数据库的索引和表结构,对数据库起着至关重要的作用,索引含有关键字段的值和指向实际记录位置的指针,这些值和指针按照特定的顺序存储,从而可以以较快的速度查找到所需要的用户数据,而表结构包括一个表的字段、类型等基本属性。因此,获取了数据库中的第一表名组、第二表名组、第一用户数据组和第二用户数据组后,还可以恢复数据库的索引和表结构。

具体实现时,由于表是由开发人员自行定义的,因此数据库的业务层可以根据表名直接获得表的数据结构和索引。在本发明实施例中,确定了第一表名组、第二表名组、第一用户数据组和第二用户数据组后,即可根据第一表名组和第二表名组的并集,获得数据库对应的表结构和索引,并根据创建的数据库的表结构和索引,将第一用户数据组和第二用户数据组的并集,写入数据库,从而完成对数据库的修复处理。

值得注意的是,在本发明实施例中,第一表名组和第二表名组,可能是不同的,也可能是部分相同,或全部相同的,对应的,第一用户数据和第二用户数据,也可能是不同的,也可能是部分相同,或全部相同的。

可以理解的是,对数据库中的元数据进行备份时,可能存在在数据库损坏前,未将所有的元数据都进行备份的情况,则根据已备份的元数据,获取第一表名组和第一用户数据组后,利用第一表名组和第一用户数据组,修复的可能仅是数据库中的一部分。而通过获取数据库的系统表,获取第二表名组和第二用户数据组后,若第一表名组、第二表名组和第一用户数据组、第二用户数据组,不是分别全部相同时,通过第一表名组、第二表名组、第一用户数据组、第二用户数据组,对数据库进行修复,即可对数据库中的更多数据进行修复。

举例来说,如图5a所示,假设数据库共包括100个表名和1000个用户数据,对数据库中的元数据进行备份时,在数据库损坏之前,仅备份了数据库中一部分的元数据。根据已备份的元数据,可以获取数据库中的第一表名组和第一用户数据组,其中,第一表名组包括50个表名,第一用户数据组包括500个用户数据,利用第一表名组和第一用户数据组,可能仅可以修复50%的数据库。若根据数据库的系统表,获取了数据库包括的的第二表名组和第二用户数据组,其中,第二表名组包括数据库中的40个表名,而40个表名和第一表名组中的表名是相同的,第二用户数据组包括数据库中的400个用户数据,而400个用户数据和第一用户数据组中的用户数据是相同的。则根据第一表名组、第二表名组、第一用户数据组和第二用户数据组,可以修复50%的数据库。

或者,假设数据库共包括100个表名和1000个用户数据,对数据库中的元数据进行备份时,在数据库损坏之前,仅备份了数据库中一部分的元数据。根据已备份的元数据,可以获取数据库中的第一表名组和第一用户数据组,其中,第一表名组包括50个表名,第一用户数据组包括500个用户数据,利用第一表名组和第一用户数据组,可能仅可以修复50%的数据库。若根据数据库的系统表,获取了数据库包括的的第二表名组和第二用户数据组,其中,第二表名组包括数据库中的40个表名,其中,10个表名和第一表名组中的表名是相同的,第二用户数据组包括数据库中的400个用户数据,其中100个用户数据和第一用户数据组中的用户数据是相同的。则根据第一表名组、第二表名组、第一用户数据组和第二用户数据组的并集,可以修复80%的数据库。

或者,假设数据库共包括100个表名和1000个用户数据,对数据库中的元数据进行备份时,在数据库损坏之前,仅备份了数据库中一部分的元数据。根据已备份的元数据,可以获取数据库中的第一表名组和第一用户数据组,其中,第一表名组包括50个表名,第一用户数据组包括500个用户数据,利用第一表名组和第一用户数据组,可能仅可以修复50%的数据库。若根据数据库的系统表,获取了数据库包括的的第二表名组和第二用户数据组,其中,第二表名组包括数据库中的40个表名,其中,所有的表名和第一表名组中的表名都是不相同的,第二用户数据组包括数据库中的400个用户数据,其中所有的用户数据和第一用户数据组中的用户数据都是不相同的。则根据第一表名组、第二表名组、第一用户数据组和第二用户数据组,可以修复90%的数据库。

需要说明的是,在本发明实施例中,利用第一表名组、第一用户数据组、第二表名组、第二用户数据组,对数据库进行修复处理时,还可以根据待修复数据的重要性,预先设置对数据库进行修复处理的方式。例如,可以根据待修复数据的重要性,将待修复数据分成不同的等级,并预先设置待修复数据的等级与对数据库进行修复处理的方式之间的对应关系,从而在确定数据库满足修复条件时,根据已备份的元数据,获取了第一表名组和第一用户数据组,根据数据库的系统表,获取了第二表名组和第二用户数据后,可以根据待修复数据的不同等级,以对应的修复方式,对数据库进行修复处理。具体的实现过程和原理,可以参照上诉实施例步骤104的详细描述,此处不再赘述。

本发明实施例提供的数据库修复方法,首先根据数据库上报的损坏错误码,确定数据库满足修复条件,然后获取已备份的元数据,并根据已备份的元数据,获取数据库中包括的第一用户数据组,再获取数据库的系统表,然后根据系统表,确定数据库中包括的第二表名组和与第二表名组分别对应的第二根节点组,再根据第二表名组和第二根节点组,获取第二用户数据组,最后根据第二表名组和第二用户数据组、及第一表名组和第一用户数据组,对数据库进行修复处理。通过根据数据库的系统表及已备份的元数据,对数据库进行修复处理,实现了在数据库损坏甚至是数据库的文件头损坏时,对数据库进行修复,提高了数据库修复的成功率,改善了数据库修复的效果,从而提高了数据库的可靠性和实用性。

图6是根据另一示例性实施例示出的一种数据库修复方法的流程示意图。

如图6所示,该数据库修复方法,可以包括以下步骤:

步骤601,根据数据库上报的损坏错误码的数量和/或类型,确定数据库满足修复条件。

步骤602,获取已备份的元数据。

其中,已备份的元数据中,包括第一表名组,和与第一表名组分别对应的第一根节点组。

步骤603,根据已备份的元数据,获取数据库中包括的第一用户数据组。

步骤604,根据数据库所在的终端对应的操作系统类型,确定预设的默认值。

步骤505,根据预设的默认值,获取数据库的系统表。

步骤606,根据系统表,确定数据库中包括的第二表名组和与第二表名组分别对应的第二根节点组。

步骤607,根据第二表名组和第二根节点组,获取第二用户数据组。

需要说明的是,步骤602-步骤603,也可以在步骤607之后执行,或者同步骤604-步骤607同时执行,此处不作限制。

其中,上述步骤601-步骤603的具体实现过程和原理,可以参照上述实施例中步骤101-步骤103的详细描述,步骤604-步骤607的具体实现过程和原理,可以参照上述实施例中步骤402-步骤404的详细描述,此处不再赘述。

步骤608,根据第一表名组和第二表名组的并集,创建数据库对应的表结构和索引。

步骤609,根据创建的数据库的表结构和索引,将第一用户数据组和第二用户数据组的并集,分别写入创建的数据库中。

其中,上述步骤601-步骤609的具体实现过程和原理,可以参照上述实施例中的详细描述此处不再赘述。

本发明实施例提供的数据库修复方法,首先根据数据库上报的损坏错误码的数量和/或类型,确定数据库满足修复条件,然后获取已备份的元数据,并根据已备份的元数据,获取数据库中包括的第一用户数据组,再根据预设的默认值,获取数据库的系统表,然后根据系统表,确定数据库中包括的第二表名组和与第二表名组分别对应的第二根节点组,再根据第二表名组和第二根节点组,获取第二用户数据组,最后根据第二表名组和第二用户数据组、及第一表名组和第一用户数据组,对数据库进行修复处理。通过根据数据库的系统表及已备份的元数据,对数据库进行修复处理,实现了在数据库损坏甚至是数据库的文件头损坏时,对数据库进行修复,提高了数据库修复的成功率,改善了数据库修复的效果,从而提高了数据库的可靠性和实用性。

下述为本发明装置实施例,可以用于执行本发明方法实施例。对于本发明装置实施例中未披露的细节,请参照本发明方法实施例。

图7是根据一示例性实施例示出的一种数据库修复装置的结构框图。该数据库修复装置700,可以包括:

第一确定模块701,用于根据数据库上报的损坏错误码,确定所述数据库满足修复条件;

第一获取模块702,用于获取已备份的元数据,其中,所述已备份的元数据中,包括第一表名组,和与第一表名组分别对应的第一根节点组;

第二获取模块703,用于根据所述已备份的元数据,获取所述数据库中包括的第一用户数据组;

处理模块704,用于根据所述第一表名组和第一用户数据组,对所述数据库进行修复处理。

具体的,本发明实施例提供的数据库修复装置,可以用来执行本发明实施例提供的数据库修复方法,其中,该装置可以被配置在任意终端中,如手机、电脑等。

在一种可能的实现形式中,上述第一确定模块701,具体用于:

根据所述数据库上报的损坏错误码的数量和/或类型,确定所述数据库满足修复条件。

可选地,该数据库修复装置700,还可以包括:

第一备份模块,用于在所述数据库启动后,以预设的时间间隔对所述数据库中的元数据进行备份;

或者,

第二备份模块,用于在确定所述数据库有新的叶子页数据写入时,对所述叶子页数据进行备份。

在另一种可能的实现形式中,上述第二备份模块,具体用于:

截获数据库发送的回调函数,所述回调函数中包括页数据的类型;

判断所述页数据的类型,是否为叶子页;

若是,则确定所述数据库有新的叶子页数据写入。

在另一种可能的实现形式中,上述回调函数中还包括:表名;

进一步的,上述第二备份模块,还用于:

将所述叶子页数据存储在所述表名对应的表中。

需要说明的是,前述对数据库修复方法实施例的解释说明也适用于该实施例的数据库修复装置,此处不再赘述。

本发明实施例提供的数据库修复装置,首先根据数据库上报的损坏错误码,确定数据库满足修复条件,然后获取已备份的元数据,并根据已备份的元数据,获取数据库中包括的第一用户数据组,最后根据第一表名组和第一数据组,对数据库进行修复处理。由此,通过对解析数据所需的元数据进行备份,实现了在数据库损坏甚至是数据库的文件头损坏时,对数据库进行修复,提高了数据库修复的成功率,改善了数据库修复的效果,从而提高了数据库的可靠性和实用性。

图8是根据另一示例性实施例示出的一种数据库修复装置的结构框图。

如图8所示,在图7所示的基础上,该数据库修复装置700,还可以包括:

第三获取模块801,用于获取所述数据库的系统表;

第二确定模块802,用于根据所述系统表,确定所述数据库中包括的第二表名组和与第二表名组分别对应的第二根节点组;

第四获取模块803,用于根据所述第二表名组和第二根节点组,获取第二用户数据组;

具体的,本发明实施例提供的数据库修复装置,可以用来执行本发明实施例提供的数据库修复方法,其中,该装置可以被配置在任意终端中,如手机、电脑等。

相应的,上述处理模块704,还用于:

根据所述第二表名组和第二用户数据组、及第一表名组和第一用户数据组,对所述数据库进行修复处理。

进一步的,上述处理模块704,还用于:

根据所述第一表名组和第二表名组的并集,创建所述数据库对应的表结构和索引;

根据所述创建的所述数据库的表结构和索引,将所述第一用户数据组和第二用户数据组的并集,分别写入创建的数据库中。

在一种可能的实现形式中,上述第三获取模块801,具体用于:

根据所述数据库的文件头,获取所述数据库的系统表;

或者,

根据预设的默认值,获取所述数据库的系统表。

进一步的,上述第三获取模块801,还用于:

根据所述数据库所在的终端对应的操作系统类型,确定所述预设的默认值。

需要说明的是,前述对数据库修复方法实施例的解释说明也适用于该实施例的数据库修复装置,此处不再赘述。

本发明实施例提供的数据库修复装置,首先根据数据库上报的损坏错误码,确定数据库满足修复条件,然后获取已备份的元数据,并根据已备份的元数据,获取数据库中包括的第一用户数据组,最后根据第一表名组和第一数据组,对数据库进行修复处理。由此,通过对解析数据所需的元数据进行备份,实现了在数据库损坏甚至是数据库的文件头损坏时,对数据库进行修复,提高了数据库修复的成功率,改善了数据库修复的效果,从而提高了数据库的可靠性和实用性。

在示例性实施例中,还提供了一种终端,包括:

存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行所述程序时实现如上述实施例所述的数据库修复方法。

具体的,数据库修复方法包括:

根据数据库上报的损坏错误码,确定所述数据库满足修复条件;

获取已备份的元数据,其中,所述已备份的元数据中,包括第一表名组,和与第一表名组分别对应的第一根节点组;

根据所述已备份的元数据,获取所述数据库中包括的第一用户数据组;

根据所述第一表名组和第一用户数据组,对所述数据库进行修复处理。

需要说明的是,前述对数据库修复方法实施例的解释说明也适用于该实施例的终端,此处不再赘述。

本发明实施例提供的终端,首先根据数据库上报的损坏错误码,确定数据库满足修复条件,然后获取已备份的元数据,并根据已备份的元数据,获取数据库中包括的第一用户数据组,最后根据第一表名组和第一数据组,对数据库进行修复处理。由此,通过对解析数据所需的元数据进行备份,实现了在数据库损坏甚至是数据库的文件头损坏时,对数据库进行修复,提高了数据库修复的成功率,改善了数据库修复的效果,从而提高了数据库的可靠性和实用性。

在示例性实施例中,还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述实施例所述的数据库修复方法。

具体的,数据库修复方法包括:

根据数据库上报的损坏错误码,确定所述数据库满足修复条件;

获取已备份的元数据,其中,所述已备份的元数据中,包括第一表名组,和与第一表名组分别对应的第一根节点组;

根据所述已备份的元数据,获取所述数据库中包括的第一用户数据组;

根据所述第一表名组和第一用户数据组,对所述数据库进行修复处理。

需要说明的是,前述对数据库修复方法实施例的解释说明也适用于该实施例的计算机可读存储介质,此处不再赘述。

本发明实施例提供的计算机可读存储介质,首先根据数据库上报的损坏错误码,确定数据库满足修复条件,然后获取已备份的元数据,并根据已备份的元数据,获取数据库中包括的第一用户数据组,最后根据第一表名组和第一数据组,对数据库进行修复处理。由此,通过对解析数据所需的元数据进行备份,实现了在数据库损坏甚至是数据库的文件头损坏时,对数据库进行修复,提高了数据库修复的成功率,改善了数据库修复的效果,从而提高了数据库的可靠性和实用性。

在示例性实施例中,还提供了一种计算机程序产品,当所述计算机程序产品中的指令处理器执行时,执行如上述实施例所述的数据库修复方法。

具体的,数据库修复方法包括:

根据数据库上报的损坏错误码,确定所述数据库满足修复条件;

获取已备份的元数据,其中,所述已备份的元数据中,包括第一表名组,和与第一表名组分别对应的第一根节点组;

根据所述已备份的元数据,获取所述数据库中包括的第一用户数据组;

根据所述第一表名组和第一用户数据组,对所述数据库进行修复处理。

需要说明的是,前述对数据库修复方法实施例的解释说明也适用于该实施例的计算机程序产品,此处不再赘述。

本发明实施例提供的计算机程序产品,首先根据数据库上报的损坏错误码,确定数据库满足修复条件,然后获取已备份的元数据,并根据已备份的元数据,获取数据库中包括的第一用户数据组,最后根据第一表名组和第一数据组,对数据库进行修复处理。由此,通过对解析数据所需的元数据进行备份,实现了在数据库损坏甚至是数据库的文件头损坏时,对数据库进行修复,提高了数据库修复的成功率,改善了数据库修复的效果,从而提高了数据库的可靠性和实用性。

在本发明的描述中,需要理解的是,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。

流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。

在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(ram),只读存储器(rom),可擦除可编辑只读存储器(eprom或闪速存储器),光纤装置,以及便携式光盘只读存储器(cdrom)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。

应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(pga),现场可编程门阵列(fpga)等。

本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。

此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。

上述提到的存储介质可以是只读存储器,磁盘或光盘等。尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1