数据恢复的方法和装置与流程

文档序号:11690984阅读:242来源:国知局
数据恢复的方法和装置与流程

本发明涉及数据库领域,更具体的,涉及数据库领域中的数据恢复的方法和装置。



背景技术:

在云计算环境下,数据库支持多租户。租户信息隔离可以通过不同租户使用单独的服务器、不同租户使用同一服务器上的不同数据库和不同租户使用同一数据库三种途径实现。对于数据量较小的租户,为了减小维护成本,采用多个租户使用同一数据库的方式存储数据,并且该多个租户共享数据表。

为了避免在退回一个租户的误操作时影响数据库中的其他租户,可以在多个租户共享一个数据表的情况下,为每个租户建立独立的数据库访问账号。服务器在数据库上的数据表上记录每个租户的所有的数据操纵语言(datamanipulationlanguage,dml)操作。在生成一个dml操作之后,生成并记录该dml操作相应的反dml操作。例如,租户执行了一条插入(insert)操作,那么服务器会生成并记录对应该insert操作的删除(delete)操作。在执行该反dml操作后,数据库可以回到该执行dml操作之前的状态。

但是,当需要恢复的时间点和当前时刻之间执行了大量的dml操作时,需要逐条执行每个dml操作对应的反dml操作,恢复效率非常低。



技术实现要素:

本发明实施例提供了一种数据恢复的方法,通过执行简化的反dml操作,能够提高多租户共享数据表场景下将恢复数据的效率

第一方面,本发明实施例提供了一种数据恢复的方法,包括:获取租户输入的恢复时间点;在第一缓冲区中的至少一个第一时间戳中确定在所述恢复时间点和当前时间点之间的至少一个第二时间戳,其中,所述至少一个第 一时间戳中的每个第一时间戳对应一个第一反数据操纵语言dml操作,所述第一反dml操作为将至少一个第二反dml操作合并之后的反dml操作;按时间顺序反向依次执行与所述至少一个第二时间戳一一对应的至少一个所述第一反dml操作。

本发明实施例根据租户的恢复时间确定恢复数据需要执行的简化的反dml操作对应的时间戳,执行该时间戳对应的简化的反dml操作,能够提高多租户共享数据表场景下恢复数据的效率。

结合第一方面,在第一方面的第一种实现方式中,在所述获取租户输入的恢复时间点之前,还包括:在第二缓冲区中记录与至少一个dml操作一一对应的所述至少一个第二反dml操作,和与所述至少一个dml操作一一对应的至少一个第三时间戳,其中,所述至少一个第三时间戳与所述至少一个第二反dml操作一一对应;将所述至少一个第二反dml操作合并为所述第一反dml操作,所述第一反dml操作对应的第一时间戳为所述至少一个第三时间戳中的一个;将所述第一反dml操作和所述第一反dml操作对应的第一时间戳存储到所述第一缓冲区。

结合第一方面,在第一方面的第二种实现方式中,还包括:在所述第二缓冲区中的所述至少一个第三时间戳中确定在所述恢复时间点之后并且在所述至少一个第二时间戳之前的至少一个第四时间戳;按时间顺序反向依次执行与所述至少一个第四时间戳一一对应的至少一个所述第二反dml操作。

当执行完第二时间戳对应的反dml操作后,数据库不能恢复到恢复时间点时,可以继续执行上述第四时间戳对应的反dml操作,并且最终将数据库恢复至恢复时间点之前的状态。

结合第一方面,在第一方面的第三种实现方式中,所述将所述至少一个第二反dml操作合并为所述第一反dml操作,包括:记录所述至少一个第二反dml操作的数量;当所述数量超过第一阈值时,将所述至少一个第二反dml操作合并为一个所述第一反dml操作。

这里,合并之前的至少一个第二反dml操作的数量为该第一阈值,并且该第一阈值的数值大于或等于2,即将至少两个第二反dml操作合并为一个第一反dml操作。

结合第一方面,在第一方面的第四种实现方式中,所述将所述至少一个 第二反dml操作合并为所述第一反dml操作,包括:在记录所述至少一个第二反dml操作时,记录时间;当所述时间超过第二阈值时,将所述至少一个第二反dml操作合并为一个所述第一反dml操作。

这里,合并之前的至少一个第二反dml操作的数量可以为一个,也可以为多个。即当记录的一个时间周期内的第二反dml只有一个时,将该一个第二反dml操作可以直接作为合并后的第一反dml操作,当记录的时间周期内的第二反dml操作有多个时,将该多个第二反dml操作合并为一个第一反dml操作。

结合第一方面,在第一方面的第五种实现方式中,所述第一反dml操作对应的第一时间戳为所述至少一个第三时间戳中最早的一个。

结合第一方面,在第一方面的第六种实现方式中,在所述在第一缓冲区中的至少一个第一时间戳中确定在所述恢复时间点和当前时间点之间的至少一个第二时间戳之前,还包括:对所述租户进行加锁,禁止所述租户对数据库请求dml操作。

结合第一方面,在第一方面的第七种实现方式中,在将数据恢复至所述恢复时间点的状态时,还包括:对所述租户进行解锁,允许所述租户对数据库请求dml操作。

结合第一方面,在第一方面的第八种实现方式中,所述反dml操作包括插入操作、删除操作或反向更新操作,所述插入操作的dml操作为删除操作,所述删除操作的dml操作为插入操作,所述反向更新操作的dml操作为更新操作。

第二方面,提供了一种数据恢复的装置,用于执行上述第一方面或第一方面的任意可能的实现方式中的方法。具体地,该装置包括用于执行上述第一方面或第一方面的任意可能的实现方式中的方法的模块。

第三方面,提供了一种数据恢复的装置,该装置包括:存储器、处理器和总线系统。其中,该存储器和该处理器通过该总线系统相连,该存储器用于存储指令,该处理器用于执行该存储器存储的指令,并且当该处理器执行该存储器存储的指令时,该执行使得该处理器执行第一方面或第一方面的任意可能的实现方式中的方法。

第四方面,提供了一种计算机可读介质,用于存储计算机程序,该计算机程序包括用于执行第一方面或第一方面的任意可能的实现方式中的方法 的指令。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍,显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例的数据恢复的方法的合并反dml操作的示意性流程图。

图2是本发明实施例的数据恢复的方法的缓冲区示意图。

图3是本发明实施例的数据恢复的方法的示意性流程图。

图4是本发明一个实施例的数据恢复的装置的示意性框图。

图5是本发明另一个实施例的数据恢复的装置的示意性框图。

具体实施方式

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

如图1所示,服务器在处理用户请求的结构化查询语言(structuredquerylanguage,sql)语句时,解析器(parser)11将sql语句解析为数据库识别的内部数据结构,重写器(rewrite)12转换解析器生成的数据结构,以便优化器进行优化。然后优化器(optimizer)13将重写器转换的数据结构生成最优的执行计划,然后执行器(runtime)14运行这个最优的执行计划,处理用户发出的sql请求,返回执行结果。

这里,多个租户共享一张数据表,每个租户使用独立的数据库访问账号,根据每个租户的权限处理租户的请求。本发明实施例中,在执行器14执行最优的执行计划时,可以根据租户的数据库访问账号,分别获取多个租户的sql语句。反dml语句处理线程分别在各个租户的访问账号中存储各个租户的反dml语句。

在执行器执行sql语句时,反dml语句处理线程执行图1中s110至 s150的流程。

s110,判断sql语句是否为dml操作。当该sql语句为dml操作时,下一步执行s120,当该sql语句不是dml操作时,流程结束,不对该sql语句作处理,并继续获取下一条sql语句。

这里,dml操作为插入操作、删除操作或更新操作。当sql语句为dml操作时,才会对数据库的内容产生影响。

s120,记录该dml操作的反dml操作和该dml操作的第一时间戳。

具体的,该第一时间戳表示该dml操作在系统中被执行的时间,该第一时间戳与dml操作一一对应。这里,可以将s120中确定的反dml操作和第一时间戳存储至缓冲区1中,该缓冲区1具体可以为存储器,本发明对此不作限定。

当dml操作为插入操作时,反dml操作为删除操作。当dml操作为删除操作时,反dml操作为插入操作。当dml操作为更新操作时,反dml操作为反向更新操作。

s130,记录反dml操作的数量或时间,并判断该数量或时间是否超过阈值。

具体的,s130可以由触发器实现。作为一例,该触发器可以包括一个计数器。该计数器的初始值可以为0,当反dml语句处理线程中记录一个反dml操作时,该计数器的计数值加1。例如,当计数器为初始值0的时候,反dml语句处理线程记录了一个删除操作,此时,将计数器的值加1,即将计数器的值设置为1。该触发器中可以预设置阈值为数字n,当计数器的计数值超过n时,下一步执行s140。

作为另一例,该触发器还可以包括一个计时器,该计时器的初始值也可以为0。该计数器记录的时间为该反dml操作处理线程的统计时间,在该统计时间中反dml操作处理线程可以记录一个或多个反dml操作。可以为该触发器设置一个时间周期值m,当计时器记录的时间超过m时,下一步执行s140。

s140,合并至少一个反dml操作,并将s140中的计数器或计时器的计数清零。

本发明实施例中,合并操作可以由dml操作合并器实现。dml操作合并器将s120中缓存的多个反dml操作中的冗余操作去掉,生成简化的反 dml操作,并将该合并后的反dml操作存储到缓冲区2中。并且本发明实施例在合并时将s130中的计数清零,以便计数器或计时器进入下一个合并周期。

具体而言,当s130中计数器的数量超过n时,将缓存中最后存入的n个反dml操作合并为一个反dml操作。这里,合并之前的至少一个反dml操作的数量为该数量n,并且n大于或等于2,即将至少两个反dml操作合并为一个第一反dml操作。

或者当计时器的记录的时间超过m时,将缓存中的最后的m时间周期内存入的至少一个反dml操作合并为一个反dml操作。这里,合并之前的至少一个反dml操作的数量可以为一个,也可以为多个。即当记录的一个时间周期内的反dml只有一个时,将该一个反dml操作可以直接作为合并后的反dml操作,当记录的时间周期内的反dml操作有多个时,将该多个反dml操作合并为一个反dml操作。

本发明实施例中,当至少一个反dml操作包含对同一个记录的多个反向更新操作时,将多个反向更新操作合并为一个反向更新操作,合并之后可以只保留最后一个反向更新操作之后的数据。

本发明实施例中,当至少一个反dml操作包括对同一个记录的多个插入操作时,可以将多个插入操作合并为一个插入操作,合并之后的插入操作包括该多个插入操作插入的所有内容。

本发明实施例中,当至少一个反dml操作包括对同一个记录的多个插入操作和删除操作时,可以将多个插入操作和删除操作合并为一个反dml操作,合并之后的反dml操作包括该多个插入操作和删除操作所插入和删除的所有内容。

本发明实施例中,当至少一个反dml操作包括对同一个记录的多个插入操作、删除操作和反向更新操作时,可以将多个插入操作、删除操作和反向更新操作合并为一个反dml操作,合并之后的反dml操作包括该多个插入操作和删除操作所插入和删除的所有内容以及反向更新操作之后的数据。

s150,确定合并后的反dml操作的第二时间戳,并将该第二时间戳存储到缓冲区2中。

具体的,在s120中的至少两个第一时间戳中确定至少一个第二时间戳, 该至少一个第二时间戳与至少一个合并后的反dml操作一一对应。该至少两个第一时间戳对应的至少一个dml操作的反dml操作在s140中被合并为一个反dml操作,该合并后的反dml操作对应的第二时间戳为该至少一个第一时间戳中的一个。

可选的,该合并后的反dml操作对应的第二时间戳为该至少一个第一时间戳中的时间最早的一个时间戳。

作为一例,如图2所示,当该触发器中包括一个计时器时,在该计时器的统计时间达到周期m时,合并缓冲区1中存储的反dml操作。图2中第一时间戳t1对应的反dml操作为a1,第一时间戳t2对应的反dml操作为a2。dml操作合并器将a1和a2合并为b1,b1对应的第二时间戳为t1,即b1对应的第二时间戳为a1和a2对应的第一时间戳中时间最早的时间戳。同样的,合并后的b2和b3对应的第二时间戳分别为t3和t6。而a6、a9和a10所在的统计周期中只有一个反dml操作,因此可以认为b3、b5和b6分别为a6、a9和a10,并且b3、b5和b6对应的第二时间戳分别为a6、a9和a10对应的第一时间戳。

当有租户进行了误操作,需要恢复数据时,可以执行图3所示的恢复数据的进程。在s310之前,可以对该租户加锁,不允许该租户再请求dml操作。

s310,获取恢复时间点。具体的,服务器获取租户输入的恢复时间点。该恢复时间点可以为在当前时刻之前任意时刻的时间点。

s320,确定至少一个第三时间戳。

具体的,可以确定缓冲区2中的第二时间戳中在恢复时间点之后的时间戳为第三时间戳。当用户确定恢复时间点之后,服务器可以在缓冲区2中确定上述第三时间戳。应注意,此时,至少一个第三时间戳与缓冲区2中的在恢复时间点之后的合并后的反dml操作一一对应。

例如,在图2中,当用户输入的恢复时间点为时间点t1时,在缓冲区2中在时间点t1之后的第二时间戳为t6、t7、t9和t10,因此可以确定t6、t7、t9和t10为第三时间戳。

s330,执行第三时间戳对应的合并后的反dml操作。

具体的,按至少一个第三时间戳的时间顺序反向依次执行该第三时间戳对应的反dml操作。例如,当确定的至少一个第三时间戳为t6、t7、t9和 t10时,依次执行缓冲区2中缓存的t10、t9、t7和t6对应的合并后的反dml操作b6、b5、b4和b3。

可选的,当缓冲区1中在恢复时间点和恢复时间点之后的时间最早的第三时间戳之间还存在第一时间戳时,本发明实施例还包括图3中的s340和s350。

s340,确定至少一个第四时间戳。

具体的,该至少一个第四时间戳为在缓冲区1中在恢复时间点之后、并且在时间最早的第三时间戳之前的时间戳。

例如,在图3中,当恢复时间点为时间点t2时,首先执行s320和s330的步骤,即确定第三时间戳为t6、t7、t9和t10,并依次执行反dml操作b6、b5、b4和b3。在执行完反dml操作b3之后,因为第一时间戳t4和t5在时间点t2之后,并且在第三时间戳t6之前,可以确定第四时间戳为t4和t5。

s350,执行第四时间戳对应的合并后的反dml操作。

具体的,按至少一个第四时间戳的时间顺序反向依次执行该第四时间戳对应的反dml操作。例如,当确定的至少一个第四时间戳为t4和t5之后,依次执行缓冲区1中缓存的t5和t4对应的反dml操作a4和a5。

当将数据库恢复到租户误操作之前的状态时,针对该租户解锁,该租户可以触发新的dml操作。

因此,本发明实施例通过合并多个dml操作对应的反dml操作,生成简化的反dml操作和与该反dml操作对应的时间戳,并根据租户的恢复时间确定恢复数据需要执行的简化的反dml操作对应的时间戳,执行该时间戳对应的简化的反dml操作。本发明实施例通过执行简化的反dml操作,能够提高多租户共享数据表场景下将恢复数据的效率。

图4示出了本发明实施例的一种数据恢复的装置500的示意性框图,该装置500包括:

获取模块510,用于获取租户输入的恢复时间点;

确定模块520,用于在第一缓冲区中的至少一个第一时间戳中确定在所述恢复时间点和当前时间点之间的至少一个第二时间戳,其中,所述至少一个第一时间戳中的每个第一时间戳对应一个第一反数据操纵语言dml操作,所述第一反dml操作为将至少一个第二反dml操作合并之后的反dml 操作;

恢复模块530,用于按时间顺序反向依次执行与所述至少一个第二时间戳一一对应的至少一个所述第一反dml操作。

可选的,所述装置500还包括合并模块,用于在所述获取租户输入的恢复时间点之前,在第二缓冲区中记录与至少一个dml操作一一对应的所述至少一个第二反dml操作,和与所述至少一个dml操作一一对应的至少一个第三时间戳,其中,所述至少一个第三时间戳与所述至少一个第二反dml操作一一对应;将所述至少一个第二反dml操作合并为所述第一反dml操作,所述第一反dml操作对应的第一时间戳为所述至少一个第三时间戳中的一个;将所述第一反dml操作和所述第一反dml操作对应的第一时间戳存储到所述第一缓冲区。

可选的,所述确定模块还用于在所述第二缓冲区中的所述至少一个第三时间戳中确定在所述恢复时间点之后并且在所述至少一个第二时间戳之前的至少一个第四时间戳;所述恢复模块还用于按时间顺序反向依次执行与所述至少一个第四时间戳一一对应的至少一个所述第二反dml操作。

可选的,所述合并模块具体用于:记录所述至少一个第二反dml操作的数量;当所述数量超过第一阈值时,将所述至少一个第二反dml操作合并为一个所述第一反dml操作。

可选的,所述合并模块具体用于:在记录所述至少一个第二反dml操作时,记录时间;当所述时间超过第二阈值时,将所述至少一个第二反dml操作合并为一个所述第一反dml操作。

可选的,所述第一反dml操作对应的第一时间戳为所述至少一个第三时间戳中最早的一个。

可选的,该装置500还包括加锁模块,用于在所述确定模块在第一缓冲区中的至少一个第一时间戳中确定在所述恢复时间点和当前时间点之间的至少一个第二时间戳之前,对所述租户进行加锁,禁止所述租户对数据库请求dml操作。

可选的,该装置500还包括解锁模块,用于在将数据恢复至所述恢复时间点的状态时,对所述租户进行解锁,允许所述租户对数据库请求dml操作。

可选的,本发明实施例中,所述反dml操作包括插入操作、删除操作 或反向更新操作,所述插入操作的dml操作为删除操作,所述删除操作的dml操作为插入操作,所述反向更新操作的dml操作为更新操作。

因此,本发明实施例通过合并多个dml操作对应的反dml操作,生成简化的反dml操作和与该反dml操作对应的时间戳,并根据租户的恢复时间确定恢复数据需要执行的简化的反dml操作对应的时间戳,执行该时间戳对应的简化的反dml操作。本发明实施例通过执行简化的反dml操作,能够提高多租户共享数据表场景下将恢复数据的效率。

应注意,本发明实施例中,获取模块510、确定模块520和恢复单元530可以由处理器实现。如图5所示,装置600可以包括处理器610、存储器620和总线系统630。其中,存储器620可以用于存储处理器610执行的代码等。

装置600中的各个组件通过总线系统630耦合在一起,其中总线系统630除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。

图4所示的装置500或图5所示的装置600能够实现前述图1至图3所示的方法实施例中的各个过程,为避免重复,这里不再赘述。

应注意,处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法实施例的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(fieldprogrammablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。

可以理解,本发明实施例中的存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-onlymemory,rom)、可编程只读存储器(programmablerom,prom)、可擦除可编程只读存储器(erasableprom,eprom)、电 可擦除可编程只读存储器(electricallyeprom,eeprom)或闪存。易失性存储器可以是随机存取存储器(randomaccessmemory,ram),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的ram可用,例如静态随机存取存储器(staticram,sram)、动态随机存取存储器(dynamicram,dram)、同步动态随机存取存储器(synchronousdram,sdram)、双倍数据速率同步动态随机存取存储器(doubledataratesdram,ddrsdram)、增强型同步动态随机存取存储器(enhancedsdram,esdram)、同步连接动态随机存取存储器(synchlinkdram,sldram)和直接内存总线随机存取存储器(directrambusram,drram)。应注意,本文描述的系统和方法的存储器旨在包括但不限于这些和任意其它适合类型的存储器。

本领域普通技术人员可以意识到,结合本文中所公开的实施例中描述的各方法步骤和单元,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各实施例的步骤及组成。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。本领域普通技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或步骤可以用硬件、处理器执行的软件程序,或者二者的结合来实施。软件程序可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

尽管通过参考附图并结合优选实施例的方式对本发明进行了详细描述,但本发明并不限于此。在不脱离本发明的精神和实质的前提下,本领域普通技术人员可以对本发明的实施例进行各种等效的修改或替换,而这些修改或替换都应在本发明的涵盖范围内。

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