1.一种数据恢复的方法,其特征在于,所述方法包括:
判断是否满足预设的检查点条件,所述的检查点条件包括在预写日志WAL文件满足清空条件之前;
如果预设的检查点条件成立,则判断第一数据库是否有删除记录,如果是,则根据所述WAL文件恢复已删除的记录至第二数据库的表中;
在确定需要数据恢复时候,根据所述的第二数据库恢复数据至第一数据库中。
2.如权利要求1所述的数据恢复方法,其特征在于,所述方法还包括:
在所述的步骤在确定需要数据恢复时候,根据所述的第二数据库恢复数据至第一数据库的表中之前还包括:
如果预设的检查点条件成立,则判断第一数据库是否有修改记录,如果是,则根据所述WAL文件恢复已修改的记录至第二数据库的表中。
3.如权利要求1所述的方法,其特征在于,所述判断第一数据库是否有删除记录,包括:
获取第一数据库变化前的B+tree叶子页键值对列表大小;
监听第一数据库中的数据是否发生变化;
当监听到第一数据库中的数据发生变化时,获取第一数据库变化后的B+tree叶子页键值对列表大小;
将第一数据库变化前后获取到的B+tree叶子页键值对列表大小进行比较,如果第一数据库变化后的B+tree叶子页键值对列表大小小于第一数据库变化前的B+tree叶子页键值对列表大小,则判定第一数据库有删除记录。
4.如权利要求3所述的方法,其特征在于,所述监听第一数据库中的数据是否发生变化,包括:
通过函数ContentResolver.registerContentObserver()注册需要监听的第一数 据库;
当监听到回调函数onChange()被执行时,判定所监听的第一数据库中的数据发生变化。
5.如权利要求3所述的方法,其特征在于,所述获取第一数据库变化前后的B+tree叶子页键值对列表大小,包括:
获取第一数据库文件,所述第一数据库文件是所述第一数据库的表对应的数据库文件;
获取所述第一数据库文件中的系统表;
根据第一数据库表的表名在所述系统表中查询,得到第一数据库表的根页编号;
根据所述根页编号定位到相应的根页后,分析Btree中所有的页节点,根据页头中的页类型标志查找到第一数据库表的B+tree叶子页;
获取所述B+tree叶子页的键值对列表大小。
6.如权利要求5所述的方法,其特征在于,所述获取所述B+tree叶子页的键值对列表大小,包括:
创建一个指向所述B+tree叶子页的游标;
获取所述游标从第一条记录移动到最后一条记录所迭代的次数,将所述迭代的次数作为所述B+tree叶子页的键值对列表大小。
7.如权利要求5所述的方法,其特征在于,所述系统表中包括第一数据库表的表名和建立所述第一数据库表的语句,所述根据所述WAL文件恢复已删除的记录至第二数据库的表中,包括:
根据所述第一数据库表的表名、所述建立所述第一数据库表的语句以及所述WAL日志文件,构建第二数据库文件,所述第二数据库文件是所述第二数据库的表对应的数据库文件;
对比第一数据库文件和所述第二数据库文件,根据所述第二数据库文件找到第一数据库文件中已删除的记录,并将所述第二数据库表中在第一数据库文 件中存储在记录删除。
8.一种数据恢复的装置,其特征在于,所述装置包括:
第一判断单元,用于判断是否满足预设的检查点条件,所述的检查点条件在预写日志WAL文件满足清空条件之前;
第二判断单元,用于如果预设的检查点条件成立,则判断第一数据库是否有删除记录;
第一恢复单元,用于如果第一数据库有删除记录,则根据所述WAL文件恢复已删除的记录至第二数据库的表中;
第二恢复单元,用于在确定需要数据恢复时候,根据所述的第二数据库恢复数据至第一数据库中。
9.如权利要求8所述的装置,其特征在于,所述装置,还包括:
第三恢复单元,用于如果预设的检查点条件成立,则判断第一数据库是否有修改记录,如果是,则根据所述WAL文件恢复已修改的记录至第二数据库的表中。
10.如权利要求8所述的装置,其特征在于,所述第二判断单元,包括:
第一获取模块,用于获取第一数据库变化前的B+tree叶子页键值对列表大小;
监听模块,用于监听第一数据库中的数据是否发生变化;
第二获取模块,用于当监听到第一数据库中的数据发生变化时,获取第一数据库变化后的B+tree叶子页键值对列表大小;
判断模块,用于将第一数据库变化前后获取到的B+tree叶子页键值对列表大小进行比较,如果第一数据库变化后的B+tree叶子页键值对列表大小小于第一数据库变化前的B+tree叶子页键值对列表大小,则判定第一数据库有删除记录。
11.如权利要求10所述的装置,其特征在于,所述监听模块,包括:
注册子模块,用于通过函数ContentResolver.registerContentObserver()注册 需要监听的第一数据库;
判断子模块,用于当监听到回调函数onChange()被执行时,判定所监听的第一数据库中的数据发生变化。
12.如权利要求10所述的装置,其特征在于,所述获取模块,包括:
第一获取子模块,用于获取第一数据库文件,所述第一数据库文件是所述第一数据库的表对应的数据库文件;
第二获取子模块,用于获取所述第一数据库文件中的系统表;
第三获取子模块,用于根据第一数据库表的表名在所述系统表中查询,得到第一数据库表的根页编号;
第四获取子模块,用于根据所述根页编号定位到相应的根页后,分析Btree中所有的页节点,根据页头中的页类型标志查找到第一数据库表的B+tree叶子页;
第五获取子模块,用于获取所述B+tree叶子页的键值对列表大小。
13.如权利要求12所述的装置,其特征在于,所述第五获取子模块,包括:
创建微模块,用于创建一个指向所述B+tree叶子页的游标;
获取微模块,用于获取所述游标从第一条记录移动到最后一条记录所迭代的次数,将所述迭代的次数作为所述B+tree叶子页的键值对列表大小。
14.如权利要求12所述的装置,其特征在于,所述系统表中包括第一数据库表的表名和建立所述第一数据库表的语句,所述第一恢复单元,包括:
构建模块,用于根据所述第一数据库表的表名、所述建立所述第一数据库表的语句以及所述WAL日志文件,构建第二数据库文件,所述第二数据库文件是所述第二数据库的表对应的数据库文件;
恢复模块,用于对比第一数据库文件和所述第二数据库文件,根据所述第二数据库文件找到第一数据库文件中已删除的记录,并将所述第二数据库的表中在第一数据库文件中存储在记录删除。
15.一种Android设备,其特征在于,所述Android设备包括如权利要求8至 14任一项所述的数据恢复的装置。