一种分类提取ACCESS数据库中碎片数据的方法与流程

文档序号:17160567发布日期:2019-03-20 00:38阅读:286来源:国知局
一种分类提取ACCESS数据库中碎片数据的方法与流程

本发明属于数据恢复领域,具体涉及一种分类提取access数据库中碎片数据的方法。



背景技术:

随着信息时代的来临,对数据的管理和应用都离不开数据库。数据库系统是计算机应用系统的重要组成部分之一。数据库技术已广泛应用于数据处理、信息检索、人工智能等诸多方面,数据库应用技术是从事计算机工作的人员必备的技术之一。

access数据库管理系统是microsoftoffice套件的重要组成部分。access适用于小型商务活动,用以存储和管理商务活动所需要的数据access不仅是一个数据库,而且它具有强大的数据管理功能,它可以方便地利用各种数据源生成窗体、表单、查询、报表、应用程序等。

access的用途体现在两个:

一、进行数据分析:access有强大的数据处理、统计分析能力,利用access的查询功能,可以方便地进行各类汇总、平均等统计。并可灵活设置统计的条件。比如在统计分析上万条记录、十几万条记录及以上的数据时速度快且操作方便。

二、开发软件:access用来开发软件,比如生产管理、销售管理、库存管理等各类企业管理软件,其最大的优点是:易学!非计算机专业的人员,也能学会。低成本地满足了那些从事企业管理工作的人员的管理需要,通过软件来规范同事、下属的行为,推行其管理思想。

access数据库中,数据的最小访问单位是字段,由多个定长字段/多个变长字段组成一张表,且相同存储格式的表存放同一类的数据。

在access数据库的使用过程中,难免会遇到误操作、人为恶意破坏、软硬件故障等原因对数据库造成损坏,丢失重要数据。此时,从碎片数据中对access数据库进行恢复并找回数据,就显得至关重要,但现有技术中,尚无一种能够分类提取access数据库中碎片数据的方法。



技术实现要素:

本发明针对现有技术的不足问题,提出了一种分类提取access数据库中碎片数据的方法,根据同一表的数据其存储格式相同的原理,将access数据库的碎片数据中列数、变长字段个数及位图长度均相同的数据项集合提取为access数据库中同一表的数据,换言之,不同的列数、变长字段个数及位图长度为不同表的数据,从而达到分类提取数据及恢复数据的目的,包括以下步骤:

s001:获取数据源,所述数据源包含access数据库和/或access数据库的碎片数据;

s002:将所述数据源均分为多个数据页并寻址第一数据页,其中,每一所述数据页的长度为n扇区,n为大于1的自然数;

s003:寻址下一数据页并对地址addr赋初值0;

s004:判断是否成功获取数据页,如果是,执行步骤s005,否则执行步骤s010;

s005:判断当前数据页是否符合access数据库的数据页标准,如果是,执行步骤s006,否则,执行步骤s003;

s006:从当前数据页中读取连续2字节的值,所述2字节的值以小端格式存储;

s007:判断是否能够读取连续2字节的值,如果是,执行步骤s008,否则,执行步骤s003;

s008:判断所述2字节的值是否符合access数据库的数据项的列数规则,如果是,执行步骤s009,否则,执行步骤s006,其中,所述数据项包括列数、数据体、数据体长度、n个偏移地址、变长字段个数n及位图长度,n为不小于0的整数;

s009:判断所述2字节的值是否符合access数据库的数据项的定位规则,如果是,执行步骤s010,否则,执行步骤s006;

s010:获取当前数据项集合h,将当前数据项集合h并入数据项数据体集合h中;

s011:根据所述数据项数据体集合h的列数、变长字段个数n、位图长度,分类提取access数据库中的碎片数据:将列数、变长字段个数n及位图长度均相同的数据项集合h提取为access数据库中同一表的数据。

优选地,n等于8。

优选地,所述步骤s004的具体步骤如下:

判断数据页数是否为0,如果是,表示获取数据页失败,执行步骤s005,否则,表示获取数据页成功,执行步骤s010。

优选地,所述步骤s005的具体步骤如下:

s0051:从当前数据页中随机获取10个字节的值;

s0052:判断所述10字节的值是否具有9个以上的值为0x00,如果是,执行步骤s003,否则,执行步骤s0053;

s0053:判断所述10字节的值是否具有6个以上且8个以下的值为0x00,如果是,执行步骤s006,否则,执行步骤s0054;

s0054:判断所述10字节的值是否具有6个以上的非0x00的相同值,如果是,执行步骤s003,否则,执行步骤s006。

优选地,所述步骤s007的具体步骤如下:

如果地址addr大于或等于4095,则表示连续读取2字节的值失败,执行步骤s003,否则,执行步骤s008。

优选地,所述步骤s008的具体步骤如下:

s0081:判断所述2字节中第一字节的值为非0x00,如果是,执行步骤s0082,否则,执行步骤s0083;

s0082:判断所述2字节中第二字节的值为0x00,如果是,执行步骤s009,否则,执行步骤s0083;

s0083:地址addr=地址addr+1,并执行步骤s006。

优选地,所述步骤s009的具体步骤如下:

s0091:定义变量m、b、c,均赋初值为0,定义变量d,初始赋值为地址addr,定义变量e,初始赋值为步骤s006中所述连续2字节的值,其中,变量m、b、c、d、e均为十六进制数;

s0092:判断当前的地址addr是否小于4095,如果是,执行步骤s0093,否则,执行步骤s006;

s0093:寻址当前的地址addr并读取连续2字节的值,将当前连续2字节的值赋给变量b;

s0094:判断变量b是否等于变量m,如果是,执行步骤s0096,否则,执行步骤s0095;

s0095:地址addr=地址addr+1,m=m+1,并执行步骤s0092;

s0096:地址addr=地址addr+2,寻址当前的地址addr并读取连续2字节的值,将当前连续2字节的值赋给变量c;

s0097:判断变量c是否小于变量b,如果是,执行步骤s010,否则,执行步骤s006。

优选地,所述步骤s010的具体步骤如下:

s0101:定义数据项集合h{列数:e;变长字段个数n:value1;位图长度:value2;数据项:value3},数据项集合h中各元素均赋初值为0;

将当前变量e的值放入数据项集合h{列数:e;变长字段个数n:value1;位图长度:value2;数据项:value3};

数据项起始地址用变量d表示,数据项数据体中变长字段相对于数据项起始地址d的偏移地址用当前的地址addr表示,数据项数据体长度为a-4-d;

s0102:定义变量p、q,均赋初值为0;

s0103:判断当前的地址addr是否小于4095,如果是,执行步骤s0104,否则,执行步骤s0108;

s0104:寻址当前的地址addr并读取连续2字节的值,并将当前连续2字节的值赋给变量q;

s0105:判断变量q、p的值是否相等,如果是,执行步骤s0107,否则,执行步骤s0106;

s0106:地址addr=地址addr+2,p=p+1,执行步骤s0103;

s0107:将当前变量q的值作为变长字段个数n的值value1并放入数据项集合h{列数:e;变长字段个数n:value1;位图长度:value2;数据项:value3};

s0108:地址addr=地址addr+2,当前的地址addr作为位图的起始地址,位图的长度=(e+7)/8的商,将(e+7)/8的商作为位图的长度的值value2并放入数据项集合h{列数:e;变长字段个数n:value1;位图长度:value2;数据项:value3};

s0109:根据步骤s0101数据项起始地址d及数据项数据体长度a-4-d,获得数据项的起始地址addr_start为d、结束地址addr_end为d+4+a-d+value1*2+value2,以addr_start为起始地址、以addr_end为结束地址,在数据页中读取数据作为数据项的值value3并放入数据项集合h{列数:e;变长字段个数n:value1;位图长度:value2;数据项:value3};。

优选地,所述步骤s011的具体步骤如下:

s0111:定义变量l,将数据项数据体集合h的长度赋给l,定义变量j、i并均赋初值为0,定义集合cj用以存放不同表的数据;

s0112:判断数据项数据体集合h的长度l是否大于0,如果是,执行步骤s0113,否则,结束流程;

s0113:顺序获取数据项数据体集合h中的一个数据项集合h,l=l-1,j=i;

s0114:判断j是否大于0,如果是,执行步骤s0115,否则执行步骤s0119;

s0115:判断集合cj中的列数与数据项集合h中的列数的值是否相等,如果是,执行步骤s0116,否则,j=j-1,执行步骤s0114;

s0116:判断集合cj中的变长字段个数n与数据项集合h中的变长字段个数n的值是否相等,如果是,执行步骤s0117,否则,j=j-1,执行步骤s0114;

s0117:判断集合cj中的位图长度与数据项集合h中的位图长度的值是否相等,如果是,执行步骤s0118,否则,j=j-1,执行步骤s0114;

s0118:将数据项集合h并入集合cj中,执行步骤s0112;

s0119:i=i+1,生成一个新的集合ci,将数据项集合h并入新的集合ci中。

本发明的有益效果是:解决了现有技术中尚无一种能够分类提取access数据库中碎片数据的方法的技术问题。

附图说明

图1为本发明所提供的方法的总流程图;

图2为本发明实施例中access数据库的数据项的数据格式示意图;

图3为本发明实施例中判断是否符合access数据库的数据项的定位规则的具体流程图;

图4为本发明实施例中获取数据项的具体流程图;

图5为本发明实施例中提取同一表的数据的具体流程图。

具体实施方式

下面结合附图和实施例对本发明作进一步阐述。

图1示出了本发明所提供的方法的总流程图,如图1所示,包括以下步骤:

s001:获取数据源,数据源包含access数据库和/或access数据库的碎片数据,即,数据源可以是access的完整数据库和/或被删除、被损坏的access数据库的碎片数据;

s002:将数据源均分为多个数据页并寻址第一数据页,其中,每一数据页的长度为8扇区;

s003:寻址下一数据页并对地址addr赋初值0;

s004:判断是否成功获取数据页,如果是,执行步骤s005,否则执行步骤s010;具体地,判断数据页数是否为0,如果是,表示获取数据页失败,执行步骤s005,否则,表示获取数据页成功,执行步骤s010;

s005:判断当前数据页是否符合access数据库的数据页标准,如果是,执行步骤s006,否则,执行步骤s003;步骤s005的具体步骤如下:

s0051:从当前数据页中随机获取10个字节的值;

s0052:判断该10字节的值是否具有9个以上的值为0x00,如果是,执行步骤s003,否则,执行步骤s0053;

s0053:判断该10字节的值是否具有6个以上且8个以下的值为0x00,如果是,执行步骤s006,否则,执行步骤s0054;

s0054:判断该10字节的值是否具有6个以上的非0x00的相同值,如果是,执行步骤s003,否则,执行步骤s006;

s006:从当前数据页中读取连续2字节的值,该2字节的值以小端格式存储;

s007:判断是否能够读取连续2字节的值,如果是,执行步骤s008,否则,执行步骤s003;具体地,如果地址addr大于或等于4095,则表示连续读取2字节的值失败,执行步骤s003,否则,执行步骤s008;

s008:判断2字节的值是否符合access数据库的数据项的列数规则,如果是,执行步骤s009,否则,执行步骤s006;

图2示出了本发明实施例中access数据库的数据项的数据格式,如图2所示,数据项包括列数、数据体、数据体长度、n个偏移地址、变长字段个数n及位图长度,n为不小于0的整数;

步骤s008的具体步骤如下:

s0081:判断2字节中第一字节的值为非0x00,如果是,执行步骤s0082,否则,执行步骤s0083;

s0082:判断2字节中第二字节的值为0x00,如果是,执行步骤s009,否则,执行步骤s0083;

s0083:地址addr=地址addr+1,并执行步骤s006;

s009:判断2字节的值是否符合access数据库的数据项的定位规则,如果是,执行步骤s010,否则,执行步骤s006;

图3示出了本发明实施例中判断是否符合access数据库的数据项的定位规则的具体流程图,如图3所示,步骤s009的具体步骤如下:

s0091:定义变量m、b、c,均赋初值为0,定义变量d,初始赋值为地址addr,定义变量e,初始赋值为步骤s006中所述连续2字节的值,其中,变量m、b、c、d、e均为十六进制数;

s0092:判断当前的地址addr是否小于4095,如果是,执行步骤s0093,否则,执行步骤s006;

s0093:寻址当前的地址addr并读取连续2字节的值,将当前连续2字节的值赋给变量b;

s0094:判断变量b是否等于变量m,如果是,执行步骤s0096,否则,执行步骤s0095;

s0095:地址addr=地址addr+1,m=m+1,并执行步骤s0092;

s0096:地址addr=地址addr+2,寻址当前的地址addr并读取连续2字节的值,将当前连续2字节的值赋给变量c;

s0097:判断变量c是否小于变量b,如果是,执行步骤s010,否则,执行步骤s006;

s010:获取当前数据项集合h,将当前数据项集合h并入数据项数据体集合h中;图4示出了本发明实施例中获取数据项的具体流程图,如图4所示,步骤s010的具体步骤如下:

s0101:定义数据项集合h{列数:e;变长字段个数n:value1;位图长度:value2;数据项:value3},数据项集合h中各元素均赋初值为0;

将当前变量e的值放入数据项集合h{列数:e;变长字段个数n:value1;位图长度:value2;数据项:value3};

数据项起始地址用变量d表示,数据项数据体中变长字段相对于数据项起始地址d的偏移地址用当前的地址addr表示,数据项数据体长度为a-4-d;

s0102:定义变量p、q,均赋初值为0;

s0103:判断当前的地址addr是否小于4095,如果是,执行步骤s0104,否则,执行步骤s0108;

s0104:寻址当前的地址addr并读取连续2字节的值,并将当前连续2字节的值赋给变量q;

s0105:判断变量q、p的值是否相等,如果是,执行步骤s0107,否则,执行步骤s0106;

s0106:地址addr=地址addr+2,p=p+1,执行步骤s0103;

s0107:将当前变量q的值作为变长字段个数n的值value1并放入数据项集合h{列数:e;变长字段个数n:value1;位图长度:value2;数据项:value3};

s0108:地址addr=地址addr+2,当前的地址addr作为位图的起始地址,位图的长度=(e+7)/8的商,将(e+7)/8的商作为位图的长度的值value2并放入数据项集合h{列数:e;变长字段个数n:value1;位图长度:value2;数据项:value3};

s0109:根据步骤s0101数据项起始地址d及数据项数据体长度a-4-d,获得数据项的起始地址addr_start为d、结束地址addr_end为d+4+a-d+value1*2+value2,以addr_start为起始地址、以addr_end为结束地址,在数据页中读取数据作为数据项的值value3并放入数据项集合h{列数:e;变长字段个数n:value1;位图长度:value2;数据项:value3};

s011:根据数据项数据体集合h的列数、变长字段个数n、位图长度,分类提取access数据库中的碎片数据:将列数、变长字段个数n及位图长度均相同的数据项集合h提取为access数据库中同一表的数据,换言之,不同的列数、变长字段个数及位图长度为不同表的数据,从而达到分类提取数据及恢复数据的目的;

图5示出了本发明实施例中提取同一表的数据的具体流程图,如图5所示,步骤s011的具体步骤如下:

s0111:定义变量l,将数据项数据体集合h的长度赋给l,定义变量j、i并均赋初值为0,定义集合cj用以存放不同表的数据;

s0112:判断数据项数据体集合h的长度l是否大于0,如果是,执行步骤s0113,否则,结束流程;

s0113:顺序获取数据项数据体集合h中的一个数据项集合h,l=l-1,j=i;

s0114:判断j是否大于0,如果是,执行步骤s0115,否则执行步骤s0119;

s0115:判断集合cj中的列数与数据项集合h中的列数的值是否相等,如果是,执行步骤s0116,否则,j=j-1,执行步骤s0114;

s0116:判断集合cj中的变长字段个数n与数据项集合h中的变长字段个数n的值是否相等,如果是,执行步骤s0117,否则,j=j-1,执行步骤s0114;

s0117:判断集合cj中的位图长度与数据项集合h中的位图长度的值是否相等,如果是,执行步骤s0118,否则,j=j-1,执行步骤s0114;

s0118:将数据项集合h并入集合cj中,执行步骤s0112;

s0119:i=i+1,生成一个新的集合ci,将数据项集合h并入新的集合ci中。

通过本发明提供的方法,解决了现有技术中尚无一种能够分类提取access数据库中碎片数据的方法的技术问题。

应当理解的是,本发明不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。

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