CN109710462A - 一种基于access样本数据库的碎片数据恢复方法 - Google Patents
一种基于access样本数据库的碎片数据恢复方法 Download PDFInfo
- Publication number
- CN109710462A CN109710462A CN201811587989.5A CN201811587989A CN109710462A CN 109710462 A CN109710462 A CN 109710462A CN 201811587989 A CN201811587989 A CN 201811587989A CN 109710462 A CN109710462 A CN 109710462A
- Authority
- CN
- China
- Prior art keywords
- steps
- value
- length
- follow
- variable
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种分类提取ACCESS数据库中碎片数据的方法,其特征在于包括以下步骤:S001:获取数据源;S002:将数据源均分为多个数据页并寻址第一数据页;S003:寻址下一数据页并对地址addr赋初值0;S004:判断是否成功获取数据页,如果是,执行步骤S005,否则执行步骤S010;S005:判断当前数据页是否符合数据页标准,如果是,执行步骤S006,否则,执行步骤S003;S006:从当前数据页中读取连续2字节的值;S007:判断是否能够读取连续2字节的值,如果是,执行步骤S008,否则,执行步骤S003;S008:判断2字节的值是否符合列数规则,如果是,执行步骤S009,否则,执行步骤S006;S009:判断2字节的值是否符合定位规则,如果是,执行步骤S010,否则,执行步骤S006;S010:获取当前数据项集合h;S011:分类提取ACCESS数据库中的碎片数据。
Description
技术领域
本发明属于数据恢复领域,具体涉及一种基于ACCESS样本数据库的碎片数据恢复方法。
背景技术
随着信息时代的来临,对数据的管理和应用都离不开数据库。数据库系统是计算机应用系统的重要组成部分之一。数据库技术已广泛应用于数据处理、信息检索、人工智能等诸多方面,数据库应用技术是从事计算机工作的人员必备的技术之一。
ACCSEE数据库管理系统是Microsoft Office套件的重要组成部分。ACCSEE 适用于小型商务活动,用以存储和管理商务活动所需要的数据ACCSEE不仅是一个数据库,而且它具有强大的数据管理功能,它可以方便地利用各种数据源生成窗体、表单、查询、报表、应用程序等。
ACCSEE的用途体现在两个:
一、进行数据分析:ACCSEE有强大的数据处理、统计分析能力,利用ACCSEE 的查询功能,可以方便地进行各类汇总、平均等统计。并可灵活设置统计的条件。比如在统计分析上万条记录、十几万条记录及以上的数据时速度快且操作方便。
二、开发软件:ACCSEE用来开发软件,比如生产管理、销售管理、库存管理等各类企业管理软件,其最大的优点是:易学。非计算机专业的人员,也能学会。低成本地满足了那些从事企业管理工作的人员的管理需要,通过软件来规范同事、下属的行为,推行其管理思想。
ACCESS数据库中,数据的最小访问单位是字段,由多个定长字段/多个变长字段组成一张表,且相同存储格式的表存放同一类的数据。
在ACCESS数据库的使用过程中,难免会遇到误操作、人为恶意破坏、软硬件故障等原因对数据库造成损坏,丢失重要数据。此时,从碎片数据中对 ACCESS数据库进行恢复、找回并解析数据,就显得至关重要,但现有技术中,题为《一种分类提取ACCESS数据库中碎片数据的方法》、申请号为 201810727829X、申请日为2018年07月05日的发明申请公开了恢复并找回数据的方法,但未涉及如何将恢复并找回的原始数据进行解析、从而最终实现用户可读的技术方案。
发明内容
本发明针对现有技术的不足问题,提出了一种基于ACCESS样本数据库的碎片数据恢复方法,当数据被损坏、删除后,根据仅有的碎片数据和ACCESS样本数据库(例如用户的备份数据库文件等由用户自行传入的已知条件的样本数据) 提供表的结构,扫描01页来恢复和解析表记录数据,实现用户对恢复、找回的数据可读的目的,包括以下步骤:
S1加载数据项集合;
S2解析样本数据库中的表结构,包括如下步骤:
S2.1寻址并解析所述样本数据库的02页:读取所述样本数据库起始位置为0x2000、标记为0x02、长度为0x1000的值为所述02页,所述02页存储数据库中04页的页号,;
S2.2判断步骤S2.1中获取的04页是否有效,如果是,则执行步骤S2.3,否则执行步骤S3;具体步骤为:判断步骤S2.1中获得的04页的页号是否为有效的04页,若是则执行步骤S2.3,否则执行步骤S2.1.2;判断方法:相对于页头偏移0x1B、读取长度为4字节的值若为0x02040810,则表示是有效04 页,否则表示04页为无效04页;
S2.3根据步骤S2.2中所记录的04页,获取数据库所对应的所有表名所在的01页的页号;
S2.4解析步骤S2.2中获取的01数据页,获取各个表的表基本信息;
S2.5根据步骤S2.3中获取的各个表结构的对应存储位置,找到所述表基本信息所在位置,并解析所述表基本信息,获取所述样本数据库中所有表结构的页号;
S2.6根据步骤S2.5中获取的表结构所在页号,计算出表结构所在位置,解析所述表结构,并获取所述样本数据库中的所有的表结构;
S3将步骤S1中的数据项集合和步骤S2中获取的表结构匹配,获取各个表结构对应的数据。
优选地,所述步骤S2.1的具体步骤如下:
S2.1.1设置变量addrPos并赋初值为0x312,设置变量temp并赋初始值为 0;
S2.1.2如果addrPos小于0x1000,则执行步骤S2.1.3,否则执行步骤S2.3.8;
S2.1.3以addrPos为起始位置、读取长度为4字节的值并赋给temp;
S2.1.4判断temp的值是否为0x83070000,如果是,则执行步骤S2.1.5,否则执行步骤S2.3.8;
S2.1.5addrPos=addrPos+0x26;
S2.1.6以addrPos为起始位置、读取长度为4字节的值;
S2.1.7addrPos=addrPos+0x0E,执行步骤S2.2。
优选地,所述步骤S2.3中解析有效04页的具体步骤如下:
S2.3.1设置偏移地址变量a并赋初值为0x1E0,设置变量bFlag并赋初值为0x00,设置数组A并赋初值为NULL;
S2.3.2判断变量a是否小于0x1000,如果是,则执行步骤2.3.3,否则执行步骤S2.1.2;
S2.3.3读取变量a处长度为1字节的值并赋给bFlag;
S2.3.4判断bFlag是否等于0x00,如果是,则执行步骤S2.1.2,否则执行步骤S2.3.5;
S2.3.5a=a+5;
S2.3.6以变量a为起始位置、读取长度为3字节的值并放入A中;
S2.3.7a=a+4,执行步骤S2.3.2;
S2.3.8将数组A去重,执行步骤S2.4。
优选地,所述步骤S2.4中解析01数据页序号信息、找到各个对应的01 页数据的具体步骤如下:
S2.4.1判断数组A的长度是否大于0,如果是,执行步骤S2.4.2,否则执行步骤S2.1.2;
S2.4.2设置变量eLen并赋初值为0,设置变量len并赋初值为A的长度,设置变量f并赋初值为0;
S2.4.3判断eLen是否小于len,如果是,则执行步骤S2.4.4,否则执行步骤S2.1.2;
S2.4.4读取A[eLen]的值并赋给变量f;
S2.4.5计算01页的起始偏移位置为f*0x1000、读取长度为0x1000字节的值作为01页数据;
S2.4.6eLen=eLen+1,执行步骤S2.5。
优选地,所述步骤S2.5中解析01页数据并得到各个表的名称及表结构所在页的序号的具体步骤如下:
S2.5.1设置偏移地址变量qAddr并赋初值为0x0C,设置变量num并赋初始值为0x00,设置变量pos并赋初始值为0x00,变量值均为16进制,定义初值为空的集合HTable;
S2.5.2以变量qAddr为起始位置、读取长度为2字节的值并赋值给 num,其存储格式为大端格式存储;
S2.5.3qAddr=qAddr+2;
S2.5.4定义集合hTable{页号:value1;表名:value2},设置变量iTemp 并赋初始值为0,设置变量LTemp并赋初始值为0;
S2.5.5判断qAddr是否小于0x1000,如果是,则执行步骤S2.5.6,否则执行步骤S2.6;
S2.5.6判断num是否大于0,如果是,则执行步骤S2.5.7,否则执行步骤S2.6;
S2.5.7以qAddr为起始位置、读取长度为2字节的值赋给pos,其存储格式为大端格式存储;
S2.5.8判断pos的二进制最高两位是否为0x00,如果是,则执行步骤 S2.5.9,否则执行步骤S2.5.18;
S2.5.9以pos为起始位置、读取长度为2字节的值;
S2.5.10判断步骤S2.5.9所读取的值是否等于0x1100,如果是,则执行步骤S2.5.11,否则执行步骤S2.5.18;
S2.5.11pos=pos+2;
S2.5.12以pos为起始位置、读取长度为4字节的值并赋给集合hTable 中的页号,其存储格式为大端格式存储;
S2.5.13pos=pos+1E;
S2.5.14以pos为起点、读取长度为1字节的值并赋值给LTemp;
S2.5.15判断LTemp是否为0x00,如果是,则执行步骤S2.5.17,否则执行步骤S2.5.16;
S2.5.16pos=pos+2,iTemp=iTemp+2,执行步骤S2.5.14;
S2.5.17以pos-iTemp为起始位置、读取长度为iTemp的值并赋值给集合hTable中的表名,其存储格式为Unicode编码格式;将集合hTable并入集合HTable;
S2.5.18num=num-1,执行步骤S2.5.3。
优选地,所述步骤S2.6中解析表结构信息的具体步骤如下:
S2.6.1设置变量mAddr并赋初值为0,设置变量n并赋初值为集合 HTable的长度,设置变量u赋初始值为0,设置变量x并赋初始值为0,设置变量y并赋初始值为0,设置变量jTemp并赋初始值为0,定义集合table{字段数:value1;字段信息:value2{};变长个数:value3};
S2.6.2判断n是否大于0,如果是,则执行步骤S2.6.3,否则执行步骤S3;
S2.6.3判断jTemp是否小于n,如果是,则执行步骤S2.6.4,否则执行步骤S3;
S2.6.4取集合HTable中的第jTemp个子集合hTable;
S2.6.5根据集合hTable中的序号及页的长度为0x1000,得到集合 hTable对应的表结构的偏移位置;
S2.6.6在步骤S2.6.5所述页中,以mAddr为起始位置、读取长度为1 字节的值并赋给u;
S2.6.7判断u是否等于0x02,如果是,则执行步骤S2.6.8,否则执行步骤S2.6.35;
S2.6.8mAddr=mAddr+8;
S2.6.9在步骤S2.6.5所述页中,以当前mAddr为起始位置、读取长度为4字节的值并赋给u,其存储格式为小端格式存储;
S2.6.10判断u是否大于0x00且小于0x1000,如果是,则执行步骤 S2.6.11,否则执行步骤S2.6.35;
S2.6.11mAddr=mAddr+4,将当前mAddr的值赋给x;
S2.6.12以当前mAddr为起始位置、读取长度为4字节的值并赋给u,其存储格式为大端格式存储;
S2.6.13判断u的值是否为0x59060000,如果是,则执行步骤S2.6.14,否则执行步骤S2.6.35;
S2.6.14mAddr=mAddr+0x21;
S2.6.15以当前mAddr为起始位置、读取长度为2字节的值并赋给集合table{字段数:value1;字段信息:value2{};变长个数:value3}中的字段数 value1,其存储格式为大端格式存储;
S2.6.16mAddr=mAddr+0x02;
S2.6.17以当前mAddr为起始位置、读取长度为4字节的值并赋给集合table{字段数:value1;字段信息:value2{};变长个数:value3}中的变长个数value3;
S2.6.18根据步骤S2.6.17中获得的集合table,查找第一个管理信息的标识符0x59060000,并计算所述管理信息的长度=0x34+table.value3*0x0C;
S2.6.19由步骤S2.6.18中计算所获得的所述管理信息的长度 -1+0x0B,作为最后一个字段的类型的起始偏移位置、读取当前位置1字节的值并赋给y;
S2.6.20x=x+第一个0x59060000管理信息的长度;
S2.6.21以x为起始位置、读取长度为4字节的值并赋给u,其存储格式为大端格式存储;
S2.6.22判断u的值是否为0x59060000,如果是,则执行步骤S2.6.23,否则执行步骤S2.6.30;
S2.6.23定义集合column{字段名:value1;类型:value2;字段序号: value3},并对所述集合column的各元素赋初值为NULL;
S2.6.24mAddr=x+4,以当前mAddr为起始位置、读取长度为2字节的值并赋给集合column中的字段序号value3,其存储格式为大端格式存储;
S2.6.25mAddr=x+0x19,以当前mAddr为起始位置、读取长度为4字节的值并赋给u,其存储格式为大端格式存储;
S2.6.26判断u的值是否为0x59060000,如果是,则执行步骤S2.6.27,否则S2.6.28
S2.6.27mAddr=mAddr+0x12,以当前mAddr为起始位置、读取长度为1字节的值并赋给集合column中的类型value2,其存储格式为大端格式存储,x=x+0x19,执行步骤S2.6.29;
S2.6.28将y赋值给column集合中的类型value2,x=x+0x18,执行步骤S2.6.29;
S2.6.29将集合cloumn放入集合table中的字段信息数组中,执行步骤S2.6.21;
S2.6.30设置变量nLen并赋初值为0;
S2.6.31以x为起始位置、读取长度为2字节的值并赋给nLen,其存储格式为大端格式存储;
S2.6.32判断nLen的值是否为0x8307,如果是,则执行步骤S2.6.34,否则执行步骤S2.6.33;
S2.6.33x=x+2,以x为起始位置、读取长度为nLen字节的值,其存储格式为Unicode编码存储,,将所述值按顺序作为table表中字段信息数组中每项的column的字段名;
S2.6.34x=x+nLen,执行步骤S2.6.30;
S2.6.35jTemp=jTemp+1,将table表结构集合按照字段序号的先后顺序排序,执行步骤S2.6.3。
优选地,所述步骤S3中的数据项集合和步骤S2中获得的表结构集合匹配、获得各个表结构对应的数据的具体步骤如下:
S3.1设置变量dLen并赋初值为集合C的长度,设置变量tLen并赋初值为表结构集合table的长度,设置变量iCursor并赋初始值为0,设置变量 jCursor并赋初始值为0;
S3.2判断tLen是否不为0,如果是,则执行步骤S3.3,否则执行步骤;
S3.3判断iCursor是否小于tLen,如果是,则取iCursor对应的table 集合中的值,用table{iCursor}表示,执行步骤S3.4,否则执行步骤S4;
S3.4判断dLen是否不为0,如果是,则执行步骤S3.5,否则执行步骤S4;
S3.5判断jCursor是否小于dLen,如果是,则取jCursor对应的C集合中的值,用C{jCursor}表示,执行步骤S3.6,否则执行步骤S3.7;
S3.6判断table{iCursor}.字段数value1是否不等于C{jCursor}.列数e,如果是,则执行步骤S3.7,否则执行步骤S3.8;
S3.7jCursor=jCursor+1,执行步骤S3.5;
S3.8判断table{iCursor}.变长个数value3是否不等于C{jCursor}.变长个数value1,如果是,则执行步骤S3.7,否则执行步骤S3.9;
S3.9将C{jCursor}的数据添加到表结构table{iCursor}中。
优选地,所述步骤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样本数据库的碎片数据恢复方法的技术问题。
具体实施方式
本申请将题为《一种分类提取ACCESS数据库中碎片数据的方法》、申请号为201810727829X、申请日为2018年07月05日的发明申请的全文引入本申请作为参考,本发明包括以下步骤:
S1加载数据项集合:对题为《一种分类提取ACCESS数据库中碎片数据的方法》、申请号为201810727829X、申请日为2018年07月05日的发明申请所提供的数据项集合C{列数:e;变长字段个数n:value1;位图长度:value2;数据项: value3}进行加载;
S2解析样本数据库中的表结构,包括如下步骤:
S2.1寻址并解析样本数据库的02页:读取样本数据库起始位置为0x2000、标记为0x02、长度为0x1000的值为02页,02页存储数据库中04页的页号,步骤S2.1的具体步骤如下:
S2.1.1设置变量addrPos并赋初值为0x312,设置变量temp并赋初始值为 0;
S2.1.2如果addrPos小于0x1000,则执行步骤S2.1.3,否则执行步骤S2.3.8;
S2.1.3以addrPos为起始位置、读取长度为4字节的值并赋给temp;
S2.1.4判断temp的值是否为0x83070000,如果是,则执行步骤S2.1.5,否则执行步骤S2.3.8;
S2.1.5addrPos=addrPos+0x26;
S2.1.6以addrPos为起始位置、读取长度为4字节的值;
S2.1.7addrPos=addrPos+0x0E,执行步骤S2.2。
S2.2判断步骤S2.1中获取的04页是否有效,如果是,则执行步骤S2.3,否则执行步骤S3;具体步骤为:判断步骤S2.1中获得的04页的页号是否为有效的 04页,若是则执行步骤S2.3,否则执行步骤S2.1.2;判断方法:相对于页头偏移0x1B、读取长度为4字节的值若为0x02040810,则表示是有效04页,否则表示04页为无效04页。
S2.3根据步骤S2.2中所记录的04页,获取数据库所对应的所有表名所在的01页的页号,步骤S2.3中解析有效04页的具体步骤如下:
S2.3.1设置偏移地址变量a并赋初值为0x1E0,设置变量bFlag并赋初值为0x00,设置数组A并赋初值为NULL;
S2.3.2判断变量a是否小于0x1000,如果是,则执行步骤2.3.3,否则执行步骤S2.1.2;
S2.3.3读取变量a处长度为1字节的值并赋给bFlag;
S2.3.4判断bFlag是否等于0x00,如果是,则执行步骤S2.1.2,否则执行步骤S2.3.5;
S2.3.5a=a+5;
S2.3.6以变量a为起始位置、读取长度为3字节的值并放入A中;
S2.3.7a=a+4,执行步骤S2.3.2;
S2.3.8将数组A去重,执行步骤S2.4。
S2.4解析步骤S2.2中获取的01数据页,获取各个表的表基本信息,该步骤S2.4中解析01数据页序号信息、找到各个对应的01页数据的具体步骤如下:
S2.4.1判断数组A的长度是否大于0,如果是,执行步骤S2.4.2,否则执行步骤S2.1.2;
S2.4.2设置变量eLen并赋初值为0,设置变量len并赋初值为A的长度,设置变量f并赋初值为0;
S2.4.3判断eLen是否小于len,如果是,则执行步骤S2.4.4,否则执行步骤S2.1.2;
S2.4.4读取A[eLen]的值并赋给变量f;
S2.4.5计算01页的起始偏移位置为f*0x1000、读取长度为0x1000字节的值作为01页数据;
S2.4.6eLen=eLen+1,执行步骤S2.5。
S2.5根据步骤S2.3中获取的各个表结构的对应存储位置,找到表基本信息所在位置,并解析表基本信息,获取样本数据库中所有表结构的页号,该步骤S2.5中解析01页数据并得到各个表的名称及表结构所在页的序号的具体步骤如下:
S2.5.1设置偏移地址变量qAddr并赋初值为0x0C,设置变量num并赋初始值为0x00,设置变量pos并赋初始值为0x00,变量值均为16进制,定义初值为空的集合HTable;
S2.5.2以变量qAddr为起始位置、读取长度为2字节的值并赋值给 num,其存储格式为大端格式存储;
S2.5.3qAddr=qAddr+2;
S2.5.4定义集合hTable{页号:value1;表名:value2},设置变量iTemp 并赋初始值为0,设置变量LTemp并赋初始值为0;
S2.5.5判断qAddr是否小于0x1000,如果是,则执行步骤S2.5.6,否则执行步骤S2.6;
S2.5.6判断num是否大于0,如果是,则执行步骤S2.5.7,否则执行步骤S2.6;
S2.5.7以qAddr为起始位置、读取长度为2字节的值赋给pos,其存储格式为大端格式存储;
S2.5.8判断pos的二进制最高两位是否为0x00,如果是,则执行步骤 S2.5.9,否则执行步骤S2.5.18;
S2.5.9以pos为起始位置、读取长度为2字节的值;
S2.5.10判断步骤S2.5.9所读取的值是否等于0x1100,如果是,则执行步骤S2.5.11,否则执行步骤S2.5.18;
S2.5.11pos=pos+2;
S2.5.12以pos为起始位置、读取长度为4字节的值并赋给集合hTable 中的页号,其存储格式为大端格式存储;
S2.5.13pos=pos+1E;
S2.5.14以pos为起点、读取长度为1字节的值并赋值给LTemp;
S2.5.15判断LTemp是否为0x00,如果是,则执行步骤S2.5.17,否则执行步骤S2.5.16;
S2.5.16pos=pos+2,iTemp=iTemp+2,执行步骤S2.5.14;
S2.5.17以pos-iTemp为起始位置、读取长度为iTemp的值并赋值给集合hTable中的表名,其存储格式为Unicode编码格式;将集合hTable并入集合HTable;
S2.5.18num=num-1,执行步骤S2.5.3。
S2.6根据步骤S2.5中获取的表结构所在页号,计算出表结构所在位置,解析表结构,并获取样本数据库中的所有的表结构,该步骤S2.6中解析表结构信息的具体步骤如下:
S2.6.1设置变量mAddr并赋初值为0,设置变量n并赋初值为集合 HTable的长度,设置变量u赋初始值为0,设置变量x并赋初始值为0,设置变量y并赋初始值为0,设置变量jTemp并赋初始值为0,定义集合table{字段数:value1;字段信息:value2{};变长个数:value3};
S2.6.2判断n是否大于0,如果是,则执行步骤S2.6.3,否则执行步骤S3;
S2.6.3判断jTemp是否小于n,如果是,则执行步骤S2.6.4,否则执行步骤S3;
S2.6.4取集合HTable中的第jTemp个子集合hTable;
S2.6.5根据集合hTable中的序号及页的长度为0x1000,得到集合 hTable对应的表结构的偏移位置;
S2.6.6在步骤S2.6.5页中,以mAddr为起始位置、读取长度为1字节的值并赋给u;
S2.6.7判断u是否等于0x02,如果是,则执行步骤S2.6.8,否则执行步骤S2.6.35;
S2.6.8mAddr=mAddr+8;
S2.6.9在步骤S2.6.5页中,以当前mAddr为起始位置、读取长度为4 字节的值并赋给u,其存储格式为小端格式存储;
S2.6.10判断u是否大于0x00且小于0x1000,如果是,则执行步骤 S2.6.11,否则执行步骤S2.6.35;
S2.6.11mAddr=mAddr+4,将当前mAddr的值赋给x;
S2.6.12以当前mAddr为起始位置、读取长度为4字节的值并赋给u,其存储格式为大端格式存储;
S2.6.13判断u的值是否为0x59060000,如果是,则执行步骤S2.6.14,否则执行步骤S2.6.35;
S2.6.14mAddr=mAddr+0x21;
S2.6.15以当前mAddr为起始位置、读取长度为2字节的值并赋给集合table{字段数:value1;字段信息:value2{};变长个数:value3}中的字段数 value1,其存储格式为大端格式存储;
S2.6.16mAddr=mAddr+0x02;
S2.6.17以当前mAddr为起始位置、读取长度为4字节的值并赋给集合table{字段数:value1;字段信息:value2{};变长个数:value3}中的变长个数value3;
S2.6.18根据步骤S2.6.17中获得的集合table,查找第一个管理信息的标识符0x59060000,并计算管理信息的长度=0x34+table.value3*0x0C;
S2.6.19由步骤S2.6.18中计算所获得的管理信息的长度-1+0x0B,作为最后一个字段的类型的起始偏移位置、读取当前位置1字节的值并赋给y;
S2.6.20x=x+第一个0x59060000管理信息的长度;
S2.6.21以x为起始位置、读取长度为4字节的值并赋给u,其存储格式为大端格式存储;
S2.6.22判断u的值是否为0x59060000,如果是,则执行步骤S2.6.23,否则执行步骤S2.6.30;
S2.6.23定义集合column{字段名:value1;类型:value2;字段序号: value3},并对集合column的各元素赋初值为NULL;
S2.6.24mAddr=x+4,以当前mAddr为起始位置、读取长度为2字节的值并赋给集合column中的字段序号value3,其存储格式为大端格式存储;
S2.6.25mAddr=x+0x19,以当前mAddr为起始位置、读取长度为4字节的值并赋给u,其存储格式为大端格式存储;
S2.6.26判断u的值是否为0x59060000,如果是,则执行步骤S2.6.27,否则S2.6.28
S2.6.27mAddr=mAddr+0x12,以当前mAddr为起始位置、读取长度为1字节的值并赋给集合column中的类型value2,其存储格式为大端格式存储,x=x+0x19,执行步骤S2.6.29;
S2.6.28将y赋值给column集合中的类型value2,x=x+0x18,执行步骤S2.6.29;
S2.6.29将集合cloumn放入集合table中的字段信息数组中,执行步骤S2.6.21;
S2.6.30设置变量nLen并赋初值为0;
S2.6.31以x为起始位置、读取长度为2字节的值并赋给nLen,其存储格式为大端格式存储;
S2.6.32判断nLen的值是否为0x8307,如果是,则执行步骤S2.6.34,否则执行步骤S2.6.33;
S2.6.33x=x+2,以x为起始位置、读取长度为nLen字节的值,其存储格式为Unicode编码存储,,将值按顺序作为table表中字段信息数组中每项的column的字段名;
S2.6.34x=x+nLen,执行步骤S2.6.30;
S2.6.35jTemp=jTemp+1,将table表结构集合按照字段序号的先后顺序排序,执行步骤S2.6.3。
S3将步骤S1中的数据项集合和步骤S2中获取的表结构匹配,获取各个表结构对应的数据,该步骤S3中的数据项集合和步骤S2中获得的表结构集合匹配、获得各个表结构对应的数据的具体步骤如下:
S3.1设置变量dLen并赋初值为集合C的长度,设置变量tLen并赋初值为表结构集合table的长度,设置变量iCursor并赋初始值为0,设置变量 jCursor并赋初始值为0;
S3.2判断tLen是否不为0,如果是,则执行步骤S3.3,否则执行步骤;
S3.3判断iCursor是否小于tLen,如果是,则取iCursor对应的table 集合中的值,用table{iCursor}表示,执行步骤S3.4,否则执行步骤S4;
S3.4判断dLen是否不为0,如果是,则执行步骤S3.5,否则执行步骤S4;
S3.5判断jCursor是否小于dLen,如果是,则取jCursor对应的C集合中的值,用C{jCursor}表示,执行步骤S3.6,否则执行步骤S3.7;
S3.6判断table{iCursor}.字段数value1是否不等于C{jCursor}.列数e,如果是,则执行步骤S3.7,否则执行步骤S3.8;
S3.7jCursor=jCursor+1,执行步骤S3.5;
S3.8判断table{iCursor}.变长个数value3是否不等于C{jCursor}.变长个数value1,如果是,则执行步骤S3.7,否则执行步骤S3.9;
S3.9将C{jCursor}的数据添加到表结构table{iCursor}中,该步骤S3.9 的具体步骤如下:
S3.9.1通过C{jCursor}中已知的位图长度和数据项,计算出位图的起始位置=数据项长度-位图长度,位图的结束位置=数据项长度,通过位图在数据项中的起始位置和结束位置,获得位图的十六进制值;
S3.9.2设置变量bitLen并赋初始值为0,设置变量bitCursor并赋初始值为0,设置变量BLen并赋初始值为0,设置变量dataEnd并赋初始值为0;
S3.9.3将3.9.1获得的位图的十六进制按照下述的规则转化成二进制,定义空数组A并将二进制放入数组A中:
①十六进制的值每个字节之间的顺序是从左至右;
②每个字节之中的顺序是从右至左;
S3.9.4从C{jCursor}的数据项中获取每个变长的偏移位置,具体过程如下:
①定义空数组B,用于存放变长的偏移位置,设置变量changeLen并赋初值为C{jCursor}.变长字段个数,设置变量changeStart并赋初值为位图的起始位置-2;
②判断changeLen是否大于0,如果是,则执行步骤③,否则⑦;
③changeStart=changeStart-2;
④判断changeStart>0,如果是,则执行步骤⑤,否则⑦;
⑤以changeStart为起始位置、读取长度为2字节的值并放入数组B中,其存储格式为大端格式存储;
⑥changeLen=changeLen-1,并执行步骤②;
⑦将changeStart-2的值赋给变量dataEnd,并执行步骤S3.9.5;
S3.9.5将步骤S3.9.3中获得的二进制数组A的长度赋值给bitLen;
S3.9.6判断bitCursor是否小于bitLen,如果是,则执行步骤S3.9.6,否则执行步骤;
S3.9.7判断A[bitCursor]是否不等于0,如果是,表示第bitCursor个字段不为空,执行步骤S3.9.7,否则执行步骤;
S3.9.8取table{iCursor}.字段信息value2{bitCursor}.类型,判断是否为变长字段,判断规则如下:
①类型=0x01,表示布尔型,定长,数据存储长度为0个字节,仅存位图;
②类型=0x02,表示字节,定长,数据存储长度为1个字节;
③类型=0x03,表示short,定长,数据存储长度为2个字节;
④类型=0x04,表示long,定长,数据存储长度为4个字节;
⑤类型=0x05,表示货币,定长,数据存储长度为8个字节;
⑥类型=0x06,表示单精度数,定长,数据存储长度为4个字节;
⑦类型=0x07,表示双精度数,定长,数据存储长度为8个字节;
⑧类型=0x08,表示时间,定长,数据存储长度为8个字节;
⑨类型=0x0A,表示文本,变长;
⑩类型=0x0B,表示OLE,变长;
类型=0x0C,表示备忘录,变长;
类型=0x10,表示Decimal,定长,数据存储长度为17个字节;
类型=0x12,表示附件,定长,数据存储长度为4个字节;
S3.9.9根据具体的类型,判断是否是变长,如果是变长,则执行步骤S3.9.9,否则,则执行步骤S3.9.13;
S3.9.10判断BLen是否小于数组B的长度,如果是,则执行步骤 S3.9.11,否则S3.5;
S3.9.11判断BLen+1是否小于数组B的长度,如果是,则执行步骤 S3.9.12,否则执行步骤S3.9.13;
S3.9.12取B[BLen],并以2+B[BLen]为数据项中的起始位置、读取长度为B[BLen+1]-B[BLen]字节的值并放入table{iCursor}.字段信息value2{bitCursor}的对应字段中,执行步骤S3.9.14;
S3.9.13取B[BLen],以2+B[BLen]为数据项中的起始位置,读取长度为dataEnd-B[BLen]字节的值并放入table{iCursor}.字段信息 value2{bitCursor}的对应字段中,执行步骤S3.9.14;
S3.9.14BLen=BLen+1,执行步骤S3.9.10;
S3.9.15iCursor=iCursor+1,并执行步骤S3。
通过本发明提供的方法,解决了现有技术中尚无一种基于ACCESS样本数据库的碎片数据恢复方法的技术问题。
应当理解的是,本发明不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。
Claims (8)
1.一种基于ACCESS样本数据库的碎片数据恢复方法,其特征在于包括以下步骤:
S1加载数据项集合;
S2解析样本数据库中的表结构,包括如下步骤:
S2.1寻址并解析所述样本数据库的02页:读取所述样本数据库起始位置为0x2000、标记为0x02、长度为0x1000的值为所述02页,所述02页存储数据库中04页的页号;
S2.2判断步骤S2.1中获取的04页是否有效,如果是,则执行步骤S2.3,否则执行步骤S3;具体步骤为:判断步骤S2.1中获得的04页的页号是否为有效的04页,若是则执行步骤S2.3,否则执行步骤S2.1.2;判断方法:相对于页头偏移0x1B、读取长度为4字节的值若为0x02040810,则表示是有效04页,否则表示04页为无效04页;
S2.3根据步骤S2.2中所记录的04页,获取数据库所对应的所有表名所在的01页的页号;
S2.4解析步骤S2.2中获取的01数据页,获取各个表的表基本信息;
S2.5根据步骤S2.3中获取的各个表结构的对应存储位置,找到所述表基本信息所在位置,并解析所述表基本信息,获取所述样本数据库中所有表结构的页号;
S2.6根据步骤S2.5中获取的表结构所在页号,计算出表结构所在位置,解析所述表结构,并获取所述样本数据库中的所有的表结构;;
S3将步骤S1中的数据项集合和步骤S2中获取的表结构匹配,获取各个表结构对应的数据。
2.根据权利要求1所述的一种基于ACCESS样本数据库的碎片数据恢复方法,其特征在于,所述步骤S2.1的具体步骤如下:
S2.1.1设置变量addrPos并赋初值为0x312,设置变量temp并赋初始值为0;
S2.1.2如果addrPos小于0x1000,则执行步骤S2.1.3,否则执行步骤S2.3.8;
S2.1.3以addrPos为起始位置、读取长度为4字节的值并赋给temp;
S2.1.4判断temp的值是否为0x83070000,如果是,则执行步骤S2.1.5,否则执行步骤S2.3.8;
S2.1.5addrPos=addrPos+0x26;
S2.1.6以addrPos为起始位置、读取长度为4字节的值;
S2.1.7addrPos=addrPos+0x0E,执行步骤S2.2。
3.根据权利要求2所述的一种基于ACCESS样本数据库的碎片数据恢复方法,其特征在于,所述步骤S2.3中解析有效04页的具体步骤如下:
S2.3.1设置偏移地址变量a并赋初值为0x1E0,设置变量bFlag并赋初值为0x00,设置数组A并赋初值为NULL;
S2.3.2判断变量a是否小于0x1000,如果是,则执行步骤2.3.3,否则执行步骤S2.1.2;
S2.3.3读取变量a处长度为1字节的值并赋给bFlag;
S2.3.4判断bFlag是否等于0x00,如果是,则执行步骤S2.1.2,否则执行步骤S2.3.5;
S2.3.5a=a+5;
S2.3.6以变量a为起始位置、读取长度为3字节的值并放入A中;
S2.3.7a=a+4,执行步骤S2.3.2;
S2.3.8将数组A去重,执行步骤S2.4。
4.根据权利要求3所述的一种基于ACCESS样本数据库的碎片数据恢复方法,其特征在于,所述步骤S2.4中解析01数据页序号信息、找到各个对应的01页数据的具体步骤如下:
S2.4.1判断数组A的长度是否大于0,如果是,执行步骤S2.4.2,否则执行步骤S2.1.2;
S2.4.2设置变量eLen并赋初值为0,设置变量len并赋初值为A的长度,设置变量f并赋初值为0;
S2.4.3判断eLen是否小于len,如果是,则执行步骤S2.4.4,否则执行步骤S2.1.2;
S2.4.4读取A[eLen]的值并赋给变量f;
S2.4.5计算01页的起始偏移位置为f*0x1000、读取长度为0x1000字节的值作为01页数据;
S2.4.6eLen=eLen+1,执行步骤S2.5。
5.根据权利要求4所述的一种基于ACCESS样本数据库的碎片数据恢复方法,其特征在于,所述步骤S2.5中解析01页数据并得到各个表的名称及表结构所在页的序号的具体步骤如下:
S2.5.1设置偏移地址变量qAddr并赋初值为0x0C,设置变量num并赋初始值为0x00,设置变量pos并赋初始值为0x00,变量值均为16进制,定义初值为空的集合HTable;
S2.5.2以变量qAddr为起始位置、读取长度为2字节的值并赋值给num,其存储格式为大端格式存储;
S2.5.3qAddr=qAddr+2;
S2.5.4定义集合hTable{页号:value1;表名:value2},设置变量iTemp并赋初始值为0,设置变量LTemp并赋初始值为0;
S2.5.5判断qAddr是否小于0x1000,如果是,则执行步骤S2.5.6,否则执行步骤S2.6;
S2.5.6判断num是否大于0,如果是,则执行步骤S2.5.7,否则执行步骤S2.6;
S2.5.7以qAddr为起始位置、读取长度为2字节的值赋给pos,其存储格式为大端格式存储;
S2.5.8判断pos的二进制最高两位是否为0x00,如果是,则执行步骤S2.5.9,否则执行步骤S2.5.18;
S2.5.9以pos为起始位置、读取长度为2字节的值;
S2.5.10判断步骤S2.5.9所读取的值是否等于0x1100,如果是,则执行步骤S2.5.11,否则执行步骤S2.5.18;
S2.5.11pos=pos+2;
S2.5.12以pos为起始位置、读取长度为4字节的值并赋给集合hTable中的页号,其存储格式为大端格式存储;
S2.5.13pos=pos+1E;
S2.5.14以pos为起点、读取长度为1字节的值并赋值给LTemp;
S2.5.15判断LTemp是否为0x00,如果是,则执行步骤S2.5.17,否则执行步骤S2.5.16;
S2.5.16pos=pos+2,iTemp=iTemp+2,执行步骤S2.5.14;
S2.5.17以pos-iTemp为起始位置、读取长度为iTemp的值并赋值给集合hTable中的表名,其存储格式为Unicode编码格式;将集合hTable并入集合HTable;
S2.5.18num=num-1,执行步骤S2.5.3。
6.根据权利要求5所述的一种基于ACCESS样本数据库的碎片数据恢复方法,其特征在于,所述步骤S2.6中解析表结构信息的具体步骤如下:
S2.6.1设置变量mAddr并赋初值为0,设置变量n并赋初值为集合HTable的长度,设置变量u赋初始值为0,设置变量x并赋初始值为0,设置变量y并赋初始值为0,设置变量jTemp并赋初始值为0,定义集合table{字段数:value1;字段信息:value2{};变长个数:value3};
S2.6.2判断n是否大于0,如果是,则执行步骤S2.6.3,否则执行步骤S3;
S2.6.3判断jTemp是否小于n,如果是,则执行步骤S2.6.4,否则执行步骤S3;
S2.6.4取集合HTable中的第jTemp个子集合hTable;
S2.6.5根据集合hTable中的序号及页的长度为0x1000,得到集合hTable对应的表结构的偏移位置;
S2.6.6在步骤S2.6.5所述页中,以mAddr为起始位置、读取长度为1字节的值并赋给u;
S2.6.7判断u是否等于0x02,如果是,则执行步骤S2.6.8,否则执行步骤S2.6.35;
S2.6.8mAddr=mAddr+8;
S2.6.9在步骤S2.6.5所述页中,以当前mAddr为起始位置、读取长度为4字节的值并赋给u,其存储格式为小端格式存储;
S2.6.10判断u是否大于0x00且小于0x1000,如果是,则执行步骤S2.6.11,否则执行步骤S2.6.35;
S2.6.11mAddr=mAddr+4,将当前mAddr的值赋给x;
S2.6.12以当前mAddr为起始位置、读取长度为4字节的值并赋给u,其存储格式为大端格式存储;
S2.6.13判断u的值是否为0x59060000,如果是,则执行步骤S2.6.14,否则执行步骤S2.6.35;
S2.6.14mAddr=mAddr+0x21;
S2.6.15以当前mAddr为起始位置、读取长度为2字节的值并赋给集合table{字段数:value1;字段信息:value2{};变长个数:value3}中的字段数value1,其存储格式为大端格式存储;
S2.6.16mAddr=mAddr+0x02;
S2.6.17以当前mAddr为起始位置、读取长度为4字节的值并赋给集合table{字段数:value1;字段信息:value2{};变长个数:value3}中的变长个数value3;
S2.6.18根据步骤S2.6.17中获得的集合table,查找第一个管理信息的标识符0x59060000,并计算所述管理信息的长度=0x34+table.value3*0x0C;
S2.6.19由步骤S2.6.18中计算所获得的所述管理信息的长度-1+0x0B,作为最后一个字段的类型的起始偏移位置、读取当前位置1字节的值并赋给y;
S2.6.20x=x+第一个0x59060000管理信息的长度;
S2.6.21以x为起始位置、读取长度为4字节的值并赋给u,其存储格式为大端格式存储;
S2.6.22判断u的值是否为0x59060000,如果是,则执行步骤S2.6.23,否则执行步骤S2.6.30;
S2.6.23定义集合column{字段名:value1;类型:value2;字段序号:value3},并对所述集合column的各元素赋初值为NULL;
S2.6.24mAddr=x+4,以当前mAddr为起始位置、读取长度为2字节的值并赋给集合column中的字段序号value3,其存储格式为大端格式存储;
S2.6.25mAddr=x+0x19,以当前mAddr为起始位置、读取长度为4字节的值并赋给u,其存储格式为大端格式存储;
S2.6.26判断u的值是否为0x59060000,如果是,则执行步骤S2.6.27,否则S2.6.28
S2.6.27mAddr=mAddr+0x12,以当前mAddr为起始位置、读取长度为1字节的值并赋给集合column中的类型value2,其存储格式为大端格式存储,x=x+0x19,执行步骤S2.6.29;
S2.6.28将y赋值给column集合中的类型value2,x=x+0x18,执行步骤S2.6.29;
S2.6.29将集合cloumn放入集合table中的字段信息数组中,执行步骤S2.6.21;
S2.6.30设置变量nLen并赋初值为0;
S2.6.31以x为起始位置、读取长度为2字节的值并赋给nLen,其存储格式为大端格式存储;
S2.6.32判断nLen的值是否为0x8307,如果是,则执行步骤S2.6.34,否则执行步骤S2.6.33;
S2.6.33x=x+2,以x为起始位置、读取长度为nLen字节的值,其存储格式为Unicode编码存储,,将所述值按顺序作为table表中字段信息数组中每项的column的字段名;
S2.6.34x=x+nLen,执行步骤S2.6.30;
S2.6.35jTemp=jTemp+1,将table表结构集合按照字段序号的先后顺序排序,执行步骤S2.6.3。
7.根据权利要求6所述的一种基于ACCESS样本数据库的碎片数据恢复方法,其特征在于,所述步骤S3中的数据项集合和步骤S2中获得的表结构集合匹配、获得各个表结构对应的数据的具体步骤如下:
S3.1设置变量dLen并赋初值为集合C的长度,设置变量tLen并赋初值为表结构集合table的长度,设置变量iCursor并赋初始值为0,设置变量jCursor并赋初始值为0;
S3.2判断tLen是否不为0,如果是,则执行步骤S3.3,否则执行步骤;
S3.3判断iCursor是否小于tLen,如果是,则取iCursor对应的table集合中的值,用table{iCursor}表示,执行步骤S3.4,否则执行步骤S4;
S3.4判断dLen是否不为0,如果是,则执行步骤S3.5,否则执行步骤S4;
S3.5判断jCursor是否小于dLen,如果是,则取jCursor对应的C集合中的值,用C{jCursor}表示,执行步骤S3.6,否则执行步骤S3.7;
S3.6判断table{iCursor}.字段数value1是否不等于C{jCursor}.列数e,如果是,则执行步骤S3.7,否则执行步骤S3.8;
S3.7jCursor=jCursor+1,执行步骤S3.5;
S3.8判断table{iCursor}.变长个数value3是否不等于C{jCursor}.变长个数value1,如果是,则执行步骤S3.7,否则执行步骤S3.9;
S3.9将C{jCursor}的数据添加到表结构table{iCursor}中。
8.根据权利要求7所述的一种基于ACCESS样本数据库的碎片数据恢复方法,其特征在于,所述步骤S3.9的具体步骤如下:
S3.9.1通过C{jCursor}中已知的位图长度和数据项,计算出位图的起始位置=数据项长度-位图长度,位图的结束位置=数据项长度,通过位图在数据项中的起始位置和结束位置,获得位图的十六进制值;
S3.9.2设置变量bitLen并赋初始值为0,设置变量bitCursor并赋初始值为0,设置变量BLen并赋初始值为0,设置变量dataEnd并赋初始值为0;
S3.9.3将3.9.1获得的位图的十六进制按照下述的规则转化成二进制,定义空数组A并将所述二进制放入数组A中:
①十六进制的值每个字节之间的顺序是从左至右;
②每个字节之中的顺序是从右至左;
S3.9.4从C{jCursor}的数据项中获取每个变长的偏移位置,具体过程如下所述:
①定义空数组B,用于存放变长的偏移位置,设置变量changeLen并赋初值为C{jCursor}.变长字段个数,设置变量changeStart并赋初值为位图的起始位置-2;
②判断changeLen是否大于0,如果是,则执行步骤③,否则⑦;
③changeStart=changeStart-2;
④判断changeStart>0,如果是,则执行步骤⑤,否则⑦;
⑤以changeStart为起始位置、读取长度为2字节的值并放入数组B中,其存储格式为大端格式存储;
⑥changeLen=changeLen-1,并执行步骤②;
⑦将changeStart-2的值赋给变量dataEnd,并执行步骤S3.9.5;
S3.9.5将步骤S3.9.3中获得的二进制数组A的长度赋值给bitLen;
S3.9.6判断bitCursor是否小于bitLen,如果是,则执行步骤S3.9.6,否则执行步骤;
S3.9.7判断A[bitCursor]是否不等于0,如果是,表示第bitCursor个字段不为空,执行步骤S3.9.7,否则执行步骤;
S3.9.8取table{iCursor}.字段信息value2{bitCursor}.类型,判断是否为变长字段,判断规则如下:
①类型=0x01,表示布尔型,定长,数据存储长度为0个字节,仅存位图;
②类型=0x02,表示字节,定长,数据存储长度为1个字节;
③类型=0x03,表示short,定长,数据存储长度为2个字节;
④类型=0x04,表示long,定长,数据存储长度为4个字节;
⑤类型=0x05,表示货币,定长,数据存储长度为8个字节;
⑥类型=0x06,表示单精度数,定长,数据存储长度为4个字节;
⑦类型=0x07,表示双精度数,定长,数据存储长度为8个字节;
⑧类型=0x08,表示时间,定长,数据存储长度为8个字节;
⑨类型=0x0A,表示文本,变长;
⑩类型=0x0B,表示OLE,变长;
类型=0x0C,表示备忘录,变长;
类型=0x10,表示Decimal,定长,数据存储长度为17个字节;
类型=0x12,表示附件,定长,数据存储长度为4个字节;
S3.9.9根据具体的类型,判断是否是变长,如果是变长,则执行步骤S3.9.9,否则,则执行步骤S3.9.13;
S3.9.10判断BLen是否小于数组B的长度,如果是,则执行步骤S3.9.11,否则S3.5;
S3.9.11判断BLen+1是否小于数组B的长度,如果是,则执行步骤S3.9.12,否则执行步骤S3.9.13;
S3.9.12取B[BLen],并以2+B[BLen]为数据项中的起始位置、读取长度为B[BLen+1]-B[BLen]字节的值并放入table{iCursor}.字段信息value2{bitCursor}的对应字段中,执行步骤S3.9.14;
S3.9.13取B[BLen],以2+B[BLen]为数据项中的起始位置,读取长度为dataEnd-B[BLen]字节的值并放入table{iCursor}.字段信息value2{bitCursor}的对应字段中,执行步骤S3.9.14;
S3.9.14BLen=BLen+1,执行步骤S3.9.10;
S3.9.15iCursor=iCursor+1,并执行步骤S3。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811587989.5A CN109710462B (zh) | 2018-12-25 | 2018-12-25 | 一种基于access样本数据库的碎片数据恢复方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811587989.5A CN109710462B (zh) | 2018-12-25 | 2018-12-25 | 一种基于access样本数据库的碎片数据恢复方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109710462A true CN109710462A (zh) | 2019-05-03 |
CN109710462B CN109710462B (zh) | 2023-05-30 |
Family
ID=66257491
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811587989.5A Active CN109710462B (zh) | 2018-12-25 | 2018-12-25 | 一种基于access样本数据库的碎片数据恢复方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109710462B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113076221A (zh) * | 2021-03-30 | 2021-07-06 | 四川效率源信息安全技术股份有限公司 | 一种针对MongoDB-MMAPv1引擎的数据恢复方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105068887A (zh) * | 2015-08-03 | 2015-11-18 | 四川效率源信息安全技术有限责任公司 | 一种基于SQLServer数据库的数据恢复方法 |
CN105068888A (zh) * | 2015-08-03 | 2015-11-18 | 四川效率源信息安全技术有限责任公司 | 一种基于Oracle数据库的数据恢复方法 |
CN106897174A (zh) * | 2017-03-01 | 2017-06-27 | 四川艾特赢泰智能科技有限责任公司 | 一种针对mysql数据库的碎片恢复方法 |
US20180137187A1 (en) * | 2016-11-11 | 2018-05-17 | International Business Machines Corporation | Copying data changes to a target database |
-
2018
- 2018-12-25 CN CN201811587989.5A patent/CN109710462B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105068887A (zh) * | 2015-08-03 | 2015-11-18 | 四川效率源信息安全技术有限责任公司 | 一种基于SQLServer数据库的数据恢复方法 |
CN105068888A (zh) * | 2015-08-03 | 2015-11-18 | 四川效率源信息安全技术有限责任公司 | 一种基于Oracle数据库的数据恢复方法 |
US20180137187A1 (en) * | 2016-11-11 | 2018-05-17 | International Business Machines Corporation | Copying data changes to a target database |
CN106897174A (zh) * | 2017-03-01 | 2017-06-27 | 四川艾特赢泰智能科技有限责任公司 | 一种针对mysql数据库的碎片恢复方法 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113076221A (zh) * | 2021-03-30 | 2021-07-06 | 四川效率源信息安全技术股份有限公司 | 一种针对MongoDB-MMAPv1引擎的数据恢复方法 |
CN113076221B (zh) * | 2021-03-30 | 2023-05-02 | 四川效率源信息安全技术股份有限公司 | 一种针对MongoDB-MMAPv1引擎的数据恢复方法 |
Also Published As
Publication number | Publication date |
---|---|
CN109710462B (zh) | 2023-05-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Manzoor et al. | Fast memory-efficient anomaly detection in streaming heterogeneous graphs | |
US8108411B2 (en) | Methods and systems for merging data sets | |
US20070282900A1 (en) | Registration and maintenance of address data for each service point in a territory | |
Jin et al. | Efficient and Accurate Retrieval of Business Process Models through Indexing: (Short Paper) | |
EP2680166A1 (en) | Accelerated searching of substrings | |
CN115146865A (zh) | 基于人工智能的任务优化方法及相关设备 | |
CN112463784A (zh) | 数据去重方法、装置、设备及计算机可读存储介质 | |
CN108681866B (zh) | 运单的处理方法、系统、设备和存储介质 | |
Franke et al. | Parallel Privacy-preserving Record Linkage using LSH-based Blocking. | |
CN110674211A (zh) | 一种Oracle数据库AWR报告的自动解析方法和设备 | |
CN109710462A (zh) | 一种基于access样本数据库的碎片数据恢复方法 | |
CN114416783A (zh) | 一种OLAP查询引擎动态cost评估方法及装置 | |
CN114510487A (zh) | 数据表合并方法、装置、设备及存储介质 | |
CN112307004B (zh) | 数据治理方法、装置、设备及存储介质 | |
GB2520049A (en) | Real time analysis of big data | |
CN111444411A (zh) | 网络数据增量采集方法、装置、设备及存储介质 | |
CN110888909B (zh) | 一种评估内容的数据统计处理方法及装置 | |
CN110807082A (zh) | 质量抽检项目确定方法、系统、电子设备及可读存储介质 | |
CN110851437A (zh) | 一种存储方法、装置及设备 | |
CN109492001B (zh) | 一种分类提取access数据库中碎片数据的方法 | |
Liao et al. | Bullion: A Column Store for Machine Learning | |
JP2010092108A (ja) | 類似文章抽出プログラム、方法、装置 | |
JP2016095639A (ja) | データベース装置、データ管理方法、及びプログラム | |
KR20150077669A (ko) | 맵리듀스 방식을 이용한 데이터 분석 방법 및 시스템 | |
CN117056372A (zh) | 物流数据聚合方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |