一种SQLite空闲页上被删数据表的记录分析方法和装置的制造方法

文档序号:9667491阅读:436来源:国知局
一种SQLite空闲页上被删数据表的记录分析方法和装置的制造方法
【技术领域】
[0001]本发明涉及计算机数据处理技术领域,特别涉及一种SQLite空闲页上被删数据表的记录分析方法和装置。
【背景技术】
[0002]SQLite是一款轻型的数据库。它的设计目标是嵌入式的,广泛运用于各种嵌入式设备中,具有占用资源小的特点。相比于MysqUPostgreSQL这两款开源的世界著名数据库管理系统,具有更快的处理速度。
[0003]传统的SQLite删除数据解析方法是根据记录数据的特征来识别记录关键数据的起始和终止标志,从而解析某些关键数据,但是这种方法的弊端是只能针对某一类数据库文件的某些关键数据,而无法提取全部数据,并且对于其他的数据库文件则需要重新提取数据特征并重新解析,无法保证通用性。
[0004]SQLite数据库删除数据的通用解析,当前国内外研究比较少;目前市场上的通用解析产品具有很大的局限性,其空闲页删除记录挖掘,由于对于记录特征提取不够精确,对于整表删除的数据,基本无法恢复出任何数据,这样影响了删除记录解析的准确性和全面性。
[0005]目前现有专利中对于删除数据的通用解析均为对于未删除数据表的恢复,如专利CN201110266852.1以及CN201110266852.1,而不适用于已删除数据表。

【发明内容】

[0006]本发明提出一种SQLite空闲页上被删数据表的记录分析方法和装置,可以快速、准确地挖掘SQLite的空闲页上删除记录,主要包括被删除的数据表上的记录。
[0007]具体方案如下:
[0008]一种SQLite空闲页上被删数据表的记录分析方法,包括以下步骤:
[0009]S1:读取主表的B+tree树以及空闲页链表;
[0010]S2:若被删数据表已知,直接手动构造FTLIST,若被删数据表未知,则从步骤S1得到的主表B+tree和空闲页链表中,解析得到删除的完整的建表记录集合FTLIST ;
[0011]S3:读取FTLIST中的下一个未读节点,记为FTN0DE,并将该节点标记为已读;
[0012]S4:分析FTNODE节点中的建表SQL语句,得到该被删除的数据表的结构FTS ;
[0013]S5:获取空闲页中符合该FTS结构的删除记录。
[0014]进一步的,所述的步骤S2中解析得到删除的完整的建表记录集合FTLIST的具体步骤是:
[0015]S21:从主表B+tree和空闲页链表中,解析得到初步的删除建表记录集合FTLIST1 ;
[0016]S22:从FTLIST1排除重复记录并且过滤掉碎片记录和非建表记录,得到集合FTLIST2 ;
[0017]S23:从数据库主表中查询得到所有未删除的建表记录集合TLIST ;
[0018]S24:在FTLIST2中排除与TLIST中重复的记录,得到的集合FTLIST,该集合FTLIST即为最终的删除建表记录集合。
[0019]进一步的,所述的步骤S5的具体步骤是:
[0020]S51:读取SQLite空闲页链表节点;
[0021]S52:从空闲页链表节点中查找所有与FTS相匹配的记录关键点;
[0022]S53:对关键点进行记录重组。
[0023]其中,所述的步骤S24中FTLIST2中排除与TLIST中重复的记录根据为表名字、根页号和建表SQL语句的一种或多种。
[0024]其中,所述步骤S52中所述记录关键点为4个字节组成为二元组〈NFP, FTL>或<TL, HL>,其中〈NFP,FTL>对应记录头部4个字节被覆盖的情况,NFP表示指向下一个空闲节点的指针,由2个字节组成,FTL是NFP后面的2个字节,表示该空闲节点的大小,而<TL,HL>对应的是记录头部完整的情况,TL表示记录总长度,是记录的第一个变长整数,HL表示头部总长度,是记录的第三个变长整数。一种SQLite空闲页上被删数据表的记录分析装置,所述的装置包括:
[0025]读取单元,用于读取主表的B+tree树以及空闲页链表;
[0026]建表记录获取单元,用于若被删数据表已知,直接手动构造FTLIST,若被删数据表未知,则从读取单元得到的主表B+tree和空闲页链表中,解析得到删除的完整的建表记录集合 FTLIST ;
[0027]节点读取标记单元,用于读取FTLIST中的下一个未读节点,记为FTN0DE,并将该节点标记为已读;
[0028]数据表的结构FTS获取单元,用于分析FTNODE节点中的建表SQL语句,得到该被删除的数据表的结构FTS ;
[0029]删除记录获取单元,用于获取空闲页中符合该FTS结构的删除记录。
[0030]进一步的,所述的建表记录获取单元包括:
[0031]第一记录获取单元,用于从主表B+tree和空闲页链表中,解析得到初步的删除建表记录集合FTLIST 1 ;
[0032]第二记录获取单元,用于从FTLIST1排除重复记录并且过滤掉碎片记录和非建表记录,得到集合FTLIST2 ;
[0033]第三记录获取单元,用于从数据库主表中查询得到所有未删除的建表记录集合TLIST ;
[0034]最终记录获取单元,用于在FTLIST2中排除与TLIST中重复的记录,得到的集合,该集合FTLIST即为最终的删除建表记录集合。
[0035]进一步的,所述的删除记录获取单元包括:
[0036]空闲页链表节点读取单元,用于读取SQLite空闲页链表节点;
[0037]记录关键点查找单元:用于从空闲页链表节点中查找所有与FTS相匹配的记录关键点;
[0038]关键点重组单元:用于对关键点进行记录重组。
[0039]其中,所述的最终记录获取单元中排除与TLIST中重复的记录根据可以为表名字、根页号和建表SQL语句的一种或多种。
[0040]其中,所述记录关键点查找单元中所述记录关键点为4个字节组成的二元组〈NFP,FTL>或<TL,HL>,其中〈NFP,FTL>对应记录头部4个字节被覆盖的情况,NFP表示指向下一个空闲节点的指针,由2个字节组成,FTL是NFP后面的2个字节,表示该空闲节点的大小,而<TL,HL>对应的是记录头部完整的情况,TL表示记录总长度,是记录的第一个变长整数,HL表示头部总长度,是记录的第三个变长整数。
[0041]与现有技术相比,本发明具有以下优点:
[0042]实用性:无需人工分析介入,自动识别主表上删除的数据表的建表记录并分析数据表的结构,并且根据分析到的数据表的结构来解析空闲页上的删除记录;由于SQLite的使用呈广泛化趋势,该方法的重要性不言而喻,预计该方法将对数据库信息安全技术产生一定影响,也为其它相近数据库类型的自由空间记录挖掘提供崭新思路。
[0043]创新性:该方法创造性的从主表去分析被删除的数据表的建表记录,并且根据建表记录来分析空闲页,增强空闲页上删除记录挖掘的准确性和全面性,尤其是对于数据表被删除的情况;该方法不仅在算法上体现出简洁明了的特点,更凭借其出色的环境适应性,大大增加了程序的健壮度;并且该方法不局限于某一个数据库,而是对所有SQLite数据库的自由空间的删除记录挖掘都适用,具有很强的通用性。
【附图说明】
[0044]图1为一个SQLite页面结构示意图;
[0045]图2为一个实施例的数据库展示图;
[0046]图3为本发明的主流程图;
[0047]图4为该实施例的主表数据截图;
[0048]图5为该实施例的food表残留数据截图;
[0049]图6为该实施例的主表恢复结果图;
[0050]图7为该实施例的food表的删除记录图。
【具体实施方式】
[0051]在结合附图和【具体实施方式】对本发明作进一步详细的说明之前,首先介绍一下与SQLite数据库有关的几个概念。
[0052]SQLite数据库由系列的数据表组成的,而这一系列的数据表表及其对应的索引表(index)和触发器(trigger)均由主表(sqlite_master)来管理,而主表和普通的数据表没有区别,由一系列页面来记录数据表、索引表和触发器等的变更(创建、删除等),并且这些页面组织由B+tree来管理,每个B+tree节点对应一个SQLite页面。
[0053]SQLite主表具有以下3个特征:
[0054]1)以一棵 B+tree 组织;
[0055]2)以第一页为根页;
[0056]3)由 5 个字段组成:(type text, name text,tbl—name text,rootpageinteger, sql text)
[0057]SQLite主表及其管理的数据表由B+tree来组织页面管理,而数据表对应的索引表有B-tree来组织页面管理,在这一系列Btree (包括B+tree和B-tree)之外的页面统称为空闲页。
[0058]空闲页以链表形式组织起来,图1为SQLite页面结构示意图,其中
[0059]a.链表首指针存放在文件头32字节偏移处的4个字节;
[0060]b.若只有一个空闲页,则没有主干页,仅有的一个空闲页是叶子页;
[0061]c.每个主干页的第0-3字节,指向下一个主干页的页号,0表示链表结束;
[0062]d.每个主干页的第4-7字节,表示该主干页的叶子页的数量;
[0063]e.每个主干页的第8个字节开始,分别以4字节表示一个空闲页的页号。
[0064]空闲页上被删数据表的分析:
[0065]如上述所描述,空闲页已经脱离了 B+tree的管理范围,已经无法得知某一个空闲页是归属于哪个B+tree或者归属于哪张数据表,不过对于数据库中存在的数据表,依然可以用尝试的方式来分析空闲页,从而把空闲页中的删除记录解析出来,但是对于数据库中已删除的数据表,就无法尝试分析了。
[0066]基于上述主表的三个特征可得知,数据库中表格的删除,依然可以通过主表的B+tree来分析出被删表格的名称、根页和创建表的SQL语句等,其恢复的方式与一般的表格的删除记录恢复方式类似。
[0067]因此,我们可以通过主表的记录解析(包括删除记录)并且排重得到删除的表格的基本属性,包括表格名字、根页和SQL语句等,然后根据SQL语句分析出该删除的数据表的表结构属性,并且根据分析得到的表结构去解析空闲页链表,从而解决数据库中已删除数据表无法删除恢复的问题。
[0068]此外,对于某些特定的已知数据库(比如Android手机的QQ数据库等),我们可以跳过主表的记录分析,直接自行构造建表记录来达到解析空闲页的目的。
[0069]为进一步说明各实施例,本发明提供有附图。这些附图为本发明揭露内容的一部分,其主要用以说明实施例,并可配合说明书的相关描述来解释实施例的运作原理。配合参考这些内容,本领域普通技术人员应能理解其他可能的实施方式以及本发明的优点。现结合附图和【具体实施方式】对本发明进一步说明。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1