本发明属于数据恢复领域,涉及一种对mssql数据库进行恢复的方法、系统及存储介质。
背景技术:
:sqlsever是microsoft公司推出的关系型数据库管理系统,全称为microsoftsqlsever,简称mssql。sqlsever是一种闭源数据库产品,sqlsever为广大的用户提供程序,不提供源代码,使得sqlsever具有安全性高、可用性强和运行性能佳的特点。sqlsever的数据文件分为mdf文件(primarydatafile)、ndf文件(secondarydatafiles)以及ldf文件(logdatafiles),其中mdf文件和ldf文件为每个数据库都有,ndf文件只有在数据库发生拆分时才会出现。mdf和ndf文件主要用于储存数据,两者具有相似的结构,而ldf文件为数据库日志,储存了数据库的所有事务操作,主要用于记录以及回滚事务。目前,由于sqlsever的闭源特性,传统的sqlsever数据恢复技术仅能够达到文件级恢复程度,而能够达到表级恢复程度的技术几乎没有。同时,由于sqlsever2008中引入了行压缩操作,数据在执行了行压缩之后,对应表的数据结构会重新进行组织,导致传统的sqlsever数据恢复技术无法解析压缩数据。因此,如何帮助用户从sqlsever中恢复表级程度的数据,以及帮助用户恢复经过行压缩后的数据,成为当前急需解决的技术问题。技术实现要素:为了解决上述
背景技术:
中的技术问题,本发明实施例提供了一种对mssql数据库进行恢复的方法、系统及存储介质。所述技术方案如下:第一个方面,提供了一种对mssql数据库进行恢复的方法,所述方法包括步骤:获取存储系统中的数据文件;根据系统表页标识符和系统表页组织结构解析数据文件中的系统表页,从系统表页中获取用户所需要恢复的表的第一对象信息,其中,第一对象信息包括表名称、表字段和表的主键;根据第一对象信息查询到用户表页,从所述用户表页中获得第二对象信息;判断第二对象信息是否为压缩数据;如果所述第二对象信息为压缩数据,则根据压缩数据的行压缩结构对所述第二对象信息进行解压处理,再进行解码处理,恢复出第一数据,其中,所述行压缩结构包括标题区、列说明符区、短数据区和长数据区;如果所述第二对象信息不为压缩数据,对所述第二对象信息进行解码处理,恢复出第二数据。可以理解的是,第二对象信息是指,数据库用户表中的单条数据储存在mdf文件中的格式。第二对象由用户储存的实际数据以及用于描述实际数据储存结构元数据组成。通过表字段信息,结合第二对象信息,既可以解析出单条数据中每一个字段对应数据内容。还可以理解的是,上述第一数据和上述第二数据均是指待恢复的用户表的数据,两者的区别在于来源方式并不相同。在其中一个实施例中,所述根据压缩数据的行压缩结构对所述第二对象信息进行解压处理,再进行解码处理的步骤,包括:解析所述列说明符区,获取总列数和每列的长度;根据所述第一对象信息和所述每列的长度解析所述短数据区,获得第一实际数据;解析所述长数据区中每一列对应的偏移项,获取每一列的结束偏移;根据结束偏移与所述第一对象信息解析所述长数据区,获得第二实际数据;解码所述第一实际数据和所述第二实际数据,恢复出第一数据。在其中一个实施例中,在所述根据第一对象信息查询到用户表页,从所述用户表页中获得第二对象信息步骤之前,还包括:判断数据文件是否为损坏文件;如果所述数据文件为未损坏文件,则所述根据第一对象信息查询到用户表页,从所述用户表页中获得第二对象信息步骤,具体执行如下:根据第一对象信息索引iam页,并获得第三对象信息,其中,所述第三对象信息包括页码和文件号,所述iam页包括含有至少八个数据槽的混合区;根据所述第三对象信息查询到用户表页,并从所述用户表页中获得第二对象信息。在其中一个实施例中,所述索引iam页的步骤,包括:判断所述iam页混合区内的八个数据槽是否填满;如果所述八个数据槽未全部填满,则解析所述iam页混合区,获取所述第三对象信息。在其中一个实施例中,所述判断第二对象信息是否为压缩数据的步骤之后,还包括:对第一数据进行解析,恢复出第三数据,所述第三数据为lob数据、slob数据、blob数据或行溢出数据中任一种或多种。在其中一个实施例中,所述判断第二对象信息是否为压缩数据的步骤之后,还包括:记录第一数据中每条数据的首地址偏移;将所述第一数据中每条数据的首地址偏移与行目录中的地址进行对比,并将未找到的匹配项标记为已删除数据。第二个方面,还提供了一种对mssql数据库进行恢复的系统,所述系统包括:文件获取模块,用于获取存储系统中的数据文件;系统表解析模块,用于根据系统表页标识符和系统表页组织结构解析数据文件中的系统表页,从系统表页中获取用户所需要恢复的表的第一对象信息,其中,第一对象信息包括表名称、表字段和表的主键;用户表查询模块,用于根据第一对象信息查询到用户表页,从所述用户表页中获得第二对象信息;第二判断模块,用于判断第二对象信息是否为压缩数据;解压解码模块,用于根据压缩数据的行压缩结构对所述第二对象信息进行解压处理,再进行解码处理,恢复出第一数据,其中,所述行压缩结构包括标题区、列说明符区、短数据区和长数据区;解码模块,用于对所述第二对象信息进行解码处理,恢复出第二数据。在其中一个实施例中,所述系统,还包括:第一判断模块,用于判断数据文件是否为损坏文件;其中,所述用户表查询模块,包括:索引单元,用于根据第一对象信息索引iam页,并获得第三对象信息,其中,所述第三对象信息包括页码和文件号,所述iam页包括含有至少八个数据槽的混合区;查询单元,根据所述第三对象信息查询到用户表页,并从所述用户表页中获得第二对象信息。在其中一个实施例中,所述系统还包括:数据格式解析模块,用于对所述第一数据进行解析,恢复出第三数据,所述第三数据为lob数据、slob数据、blob数据或行溢出数据中任一种或多种。在其中一个实施例中,所述系统还包括:记录模块,用于记录第一数据中每条数据的首地址偏移;对比标记模块,用于将所述第一数据中每条数据的首地址偏移与行目录中的地址进行对比,并将未找到的匹配项标记为已删除数据。第三个方面,还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述对mssql数据库进行恢复的方法。本发明的有益效果:1.本发明运用二进制解析与编码技术对mdf文件或ndf文件进行解析,能够获取mssql数据库内的用户表页,并从用户表页中恢复出数据,达到了恢复指定用户表页数据的效果;2.基于二进制解析,本发明对mssql数据库进行恢复的过程,不需要挂载启动虚拟磁盘内系统,也不用依赖日志文件,大大简化了操作流程,使用更加灵活;3.本发明根据元数据以及定位到的表字段,同时结合行压缩结构逆向分析得到的解压方法,能够完整地解压出行压缩数据,达到了帮助用户恢复压缩数据的效果。附图说明为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本发明实施例一中对mssql数据库进行恢复方法的流程图。图2为本发明实施例一中系统表页的结构示意图。图3为本发明实施例一中压缩数据的行压缩结构示意图。图4为本发明实施例二中对mssql数据库进行恢复方法的流程图。图5为本发明实施例二中iam页链表结构示意图。图6为本发明实施例二中iam页统一区的物理结构图。图7为本发明实施例二中iam页混合区的物理结构图。图8为本发明实施例三中对mssql数据库进行恢复方法的流程图。图9为本发明实施例四中对mssql数据库进行恢复方法的流程图。图10为本发明实施例五中对mssql数据库进行恢复的系统的结构示意图。图11为本发明实施例五中用户表查询模块的结构示意图。具体实施方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。本发明提供的方法,应用范围包括但不限于下述环境:含有sqlserver的虚拟磁盘映像中,解析过程由java编写,虚拟磁盘为vmwareworkstation的vmdk格式。实施例一如图1所示,在一个实施例中,提供一种对mssql数据库进行恢复的方法,所述方法包括步骤:s101.获取虚拟磁盘映像中的数据文件。数据文件是指mdf文件和ndf文件,即后缀为mdf的文件和后缀为ndf的文件。mdf文件的组织结构和ndf文件的组织结构均是以页作为基本单元,每页由若干字节组成。mdf文件和ndf文件主要用于储存数据,因此通过对页结构和字节信息进行解析,为恢复被删除的用户数据提供了可能性。为了便于理解,具体的,提供一个操作实例:读取虚拟磁盘,并加载注册表文件;获取到mssql14.mssqlserver节点下名为defaultdata节点的值,其具体值为c:\programfiles\microsoftsqlserver\mssql14.mssqlserver\mssql\data;由于数据库未选择拆分,通过上述路径,获取到名为sample.mdf数据库数据文件,并将其加载到由java实现的恢复程序中。s102.根据系统表页标识符和系统表页组织结构解析数据文件中的系统表页,从系统表页中获取用户所需要恢复的表的第一对象信息,其中,第一对象信息包括表名称、表字段和表的主键。页是组成数据文件的基本单元,页的类型包括索引页、iam页、系统表页和用户表页。其中,系统表页内含有众多类型的系统表,系统表的前缀一般为sys,每个系统表中储存有不同的元数据,例如sysobjects,它存放该数据库内创建的所有对象信息,如约束、默认值、日志、规则、存储过程、用户表,每个对象在表中占一行。不同类型的页具有不同的组织结构,如图2所示,一个完整的系统表页至少包含:页头区、数据区、行目录区(插槽区)和空闲区,其中,页头区大小为固定96字节,其余三个区大小不固定。页头区主要储存该页面的标识符、页面类型、objid、插槽数、固定段长度、本页id和下一页id等重要信息,通过页头区可确认页面的位置、页面储存内容以及页面完整性等信息。其中,标识符为一个48比特的数字,在整个数据库数据文件中是唯一的,其高位的32比特为页面号,低16位为文件号,通过这两个编号,可唯一确定一个页。同时,同一个系统表的所有数据页间呈双链表储存,当找到其中一个页,便可根据指针找到剩下所有页。因此,通过标识符和组织结构,可以快速检索出全部系统表页所在的页面id,为从系统表页中获取所需要恢复的对象信息奠定基础。为了便于理解,具体的,提供一个操作实例:对页按8192字节进行切割,并检索数据文件内系统表页;读取用于储存表信息的系统表页,筛选出所有type为u的用户表信息,选定所需要恢复的表id为251147940;读取用于储存表字段的系统表页,筛选出表id为251147940所有字段,结果如下表1所示:表1表字段信息筛选结果表字段名类型实际类型长度逻辑顺序uid56int41pig175char82elephant175char103monkey175char124cat239nchar205bird35text166duck175char10007dog62float88s103.根据第一对象信息查询到用户表页,从所述用户表页中获得第二对象信息。s104.判断第二对象信息是否为压缩数据;若是,则执行步骤s105;若不是,则执行步骤s106。s105.根据压缩数据的行压缩结构对所述第二对象信息进行解压处理,再进行解码处理,恢复出第一数据,其中,所述行压缩结构包括标题区、列说明符区、短数据区和长数据区。当数据发生了压缩,数据格式将会改变,以sqlserver自己设计的一套压缩算法对数据进行最大程度上的压缩,但是,压缩后的行数据结构与未压缩的数据相似,依然包含了元数据以及储存的实际数据;因此,发明人根据元数据以及定位到的表字段,同时结合行压缩结构逆向分析得到的解压方法,能够完整地解压出行压缩数据,达到了帮助用户恢复压缩数据的效果。可选的,所述根据压缩数据的行压缩结构对所述第二对象信息进行解压处理,再进行解码处理的步骤,包括;s1051.解析所述列说明符区,获取总列数和每列的长度;s1052.根据所述第一对象信息和所述每列的长度解析所述短数据区,获得第一实际数据;s1053.解析所述长数据区中每一列对应的偏移项,获取每一列的结束偏移;s1054.根据结束偏移与所述第一对象信息解析所述长数据区,获得第二实际数据;s1055.解码所述第一实际数据和所述第二实际数据,恢复出第一数据。可以理解的是,上述第一数据是指用户所需要恢复的用户表的数据。上述第一实际数据和上述第二实际数据是存储在行压缩结构中的元数据。为了便于理解,下面我们提供行压缩结构的说明,具体如下:如图3所示,所述行压缩结构包括依次排列的标题区、列说明符区、短数据区和长数据区,其中,所述标题区的长度为1字节,标题区0表示数据未进行行压缩,为1则表示数据进行了行压缩;所述列说明符区具有总列数部和列长度部,在所述总列数部中,所述总列数部的长度为m,列数为n,所述m满足:n<127时,m=1字节;n≧127时,m=2字节;在所述列长度部中,每列的长度为4比特;所述短数据区具有第一聚集部(即短数据聚集部)和含有第一实际数据(即储存的短数据)的短数据部。值得说明的是,第一聚集部是当总列数大于30行才出现,每个第一聚集部表示30列,长度为1个字节。第一聚集部用于快速索引短数据。所述长数据区具有第二聚集部(即长数据聚集部)、采用小端排列的偏移项部和含有第二实际数据(即储存的长数据)的长数据部,所述偏移项部的长度为2字节,当所述偏移项部的primary位为1时,表明对应列为一个复杂列。所述第二聚集部用于快速索引长数据,并有助于特殊格式数据(例如lob、行溢出数据等)的恢复。s106.对所述第二对象信息进行解码处理,恢复出第二数据。当对象信息未被压缩时,对象信息会以原始状态被编码后储存在行内,可直接对对象信息进行解码,恢复出数据。本实施例的技术方案,基于二进制解析与编码,能够以页为单位进行操作,帮助用户从mssql中恢复表级程度的数据,进而可以在无日志文件的情况下,恢复被删除数据,为数字取证工作者提供有效帮助。同时,还支持对已压缩数据的恢复,扩大了可恢复数据范围。实施例二如图4所示,在一个实施例中,提供一种对mssql数据库进行恢复的方法,该方法包括:s201.获取虚拟磁盘映像中的数据文件。s202.根据系统表页标识符和系统表页组织结构解析数据文件中的系统表页,从系统表页中获取所需要恢复的表的第一对象信息,其中,第一对象信息包括表名称、表字段和表的主键。s203.判断数据文件是否为损坏文件;若是,则执行步骤s2041和s2042;若不是,则执行步骤s2051至步骤s2053。可以理解的是,步骤“判断数据文件是否为损坏文件”也可以在步骤s202(即根据系统表页标识符和系统表页组织结构解析数据文件中的系统表页,获取所需要恢复的表的第一对象信息)之前进行,那么步骤s2041、步骤s2042、步骤s2051、步骤s2052和步骤s2053均在步骤s202后执行即可。s2041.根据第一对象信息索引iam页,并获得第三对象信息,其中,所述第三对象信息包括页码和文件号,所述iam页包括含有至少八个数据槽的混合区。s2042.根据所述第三对象信息查询到用户表页,并从所述用户表页中获得第二对象信息。本实施例中,在正常情况下,数据库中的每个表都至少存在一个对应的iam页,iam页中包含着该表的数据页面的索引,因此,iam页可以用于跟踪表,避免遍历整个文件,能够有效提高数据的恢复速度,而且文件越大,速度优势越明显。需要注意的是,为了快速得到iam页,第一对象信息也应该包括iam页的索引。如图5所示,iam页在数据文件中是链式储存的,每个iam页都有指向下一个iam页以及前一个iam页的指针。可选的,所述索引iam页的步骤,包括:s20411.判断所述iam页混合区内的八个数据槽是否填满;若未填满,则执行步骤s20412;若填满,则执行s20413;s20412.解析所述iam页混合区,获取所述第三对象信息;s20413.解析所述iam页混合区和iam页统一区,获取所述第三对象信息。需要注意的是,iam页的混合区具有至少八个槽位,每个槽位对应一个页面,页面储存会先储存在混合区,当八个槽位全部占满后,才会开始分配统一区。可以理解的是,上述混合区是指该区中的数据页可能来自于多个不同的表。混合区具有至少八个槽位,每个槽位对应一个混合区页面,一个所述槽位占6个字节,前2个字节为文件编号,后4个字节为页面序号。可以理解的是,上述统一区是指该区以八个页面为一个分区,当一个分区被分配给某个表后,就只能储存该表数据页面。所述统一区由若干比特组成,若干所述比特映射数据文件中4个吉字节(gb)的区域。为了便于理解,下面我们提供iam页统一区和混合区的说明,具体如下:如图6所示,在hugerow表iam页统一区的物理结构中,前两个字节为状态字节,之后的字节则代表的是统一区分配情况为0则是该区没有分配给目标表,图6中统一区第8个字节的第6位为1,则可以得知统一区第62个区被分配给了hugerow页面,由于一个区由8个连续页面组成,所以可以计算得出从488页开始的连续8个页面,都属于表hugerows,一个iam页的混合区有7988个字节,也就是63904个区,511232个页面,当页面大于这个值时,就会出现在第二个iam页上,一个iam页管理着大约4g的数据。如图7所示,在hugerow表iam页混合区的物理结构中,其中第一个划线部分表示此iam页所对应的页面区域的开始部分,可以看出页面id为0,文件号为1,所以这个iam页对应从第0页开始的511232个页面,第二个划线部分为混合区的第一个槽位,其文件号为1,页面id为175(小端模式),表明表被分配进了175开始的连续8个页面组成的统一区中。为了便于进一步理解,具体的,提供一个操作实例:在数据文件未发生损坏时,根据储存对象信息页,筛选出目标表所对应的iam页第一页的页面id为150(即页码),文件号为1,通过这两项数据,获取到iam页,并通过iam页解析到储存目标表数据页面id为568,文件号为1,再通过页面id568及文件号定位到数据所在页面。还可选的,为了更加顺畅地解析二进制的iam页,所述解析所述iam页混合区的步骤,具体执行如下:s204121.确定所述iam页内的映射区域索引;s204122.根据所述映射区域索引确定所述iam页内全部的数据槽;s204123.解析步骤204122的所述全部的数据槽,获得第三对象信息。所述解析所述iam页混合区和iam页统一区的步骤,具体执行如下:s204121.确定所述iam页内的映射区域索引;s204122.根据所述映射区域索引确定所述iam页内全部的数据槽;s204123.确定所述iam页内的统一区位图,并确定所述统一区位图内的保留字节;s204124.遍历所述iam页,并标记出所有不为零的比特;s204125.根据步骤s204122的所述映射区域索引和步骤s204124的所述不为零的比特确定全部的统一区;s204126.解析步骤s204122的所述全部的数据槽和步骤s204125的所述全部的统一区,获得第三对象信息。作为优选,为了提高数据准确化,还可以对页进行校对和验证,并将未通过校验和计算的页进行标记。值得注意的是,sqlserver中对每个页都会进行校验和计算,并将其计算的结果储存在页头中,通过对页进行校验和计算,并与页头内校验和数据对比,便可确定数据页有没有发生损坏或篡改,简单有效。s2051.根据第一对象信息索引所述系统表页,并获得索引id和页头id。s2052.通过所述索引id和所述页头id计算auid。s2053.根据auid遍历所述数据文件,获得到用户表页,并从所述用户表页中获得第二对象信息。当数据文件发生损坏时,通过iam页还原数据可能导致丢失大量数据,因此,通过索引id(即indexid)和页头id(即objectid)遍历数据文件,可以筛选出所有的用户表页,进而能够从用户表页筛选出特定表对应的字段项,确保了数据恢复的一致性。其中,所述auid的计算方式为:indexid=auid>>48objectid=(auid-(indexid<<48))>>16。需要说明的是,上述auid的计算方式中,“<<”是指左移运算符,“>>”是指右移运算符,“>>48”是指右移48位,“>>16”是指右移16位,“indexid=auid>>48”是指indexid等于auid右移16位的数据。s206.判断第二对象信息是否为压缩数据;若是,则执行步骤s207;若不是,则执行步骤s208;s207.根据压缩数据的行压缩结构对第二对象信息进行解压处理,再进行解码处理,恢复出第一数据,其中,所述行压缩结构包括标题区、列说明符区、短数据区和长数据区;s208.将第二对象信息进行解码处理,恢复出第二数据。实施例三如图8所示,在一个实施例中,提供一种对mssql数据库进行恢复的方法,该方法包括:s301.获取虚拟磁盘映像中的数据文件;s302.根据系统表页标识符和系统表页组织结构解析数据文件中的系统表页,从系统表页中获取所需要恢复的表的第一对象信息,其中,第一对象信息包括表名称、表字段和表的主键;s303.判断数据文件是否为损坏文件;若是,则执行步骤s3041和s3042;若不是,则执行步骤s3051至步骤s3053;s3041.根据第一对象信息索引iam页,并获得第三对象信息,其中,所述第三对象信息包括页码和文件号,所述iam页包括含有至少八个数据槽的混合区;s3042.根据所述第三对象信息查询到用户表页,并从所述用户表页中获得第二对象信息;s3051.根据第一对象信息索引所述系统表页,并获得索引id和页头id;s3052.通过所述索引id和所述页头id计算auid;s3053.根据auid遍历所述数据文件,获得到用户表页,并从所述用户表页中获得第二对象信息;s306.判断第二对象信息是否为压缩数据;若是,则执行步骤s307;若不是,则执行步骤s308;s307.根据压缩数据的行压缩结构对所述第二对象信息进行解压处理,再进行解码处理,恢复出第一数据,其中,所述行压缩结构包括标题区、列说明符区、短数据区和长数据区;s308.将第二对象信息进行解码处理,恢复出第二数据;s309.对所述第一数据进行解析,恢复出第三数据,所述第三数据为lob数据、slob数据和blob数据。本实施例的技术方案,由于sqlserver中存在几种特殊的数据格式,即lob数据、slob数据、blob数据或行溢出数据,它们大多属于变长数据类型,但储存方式和普通的变长数据不同。本发明通过解析能够支持上述特殊数据格式的恢复,扩大了可恢复数据的范围。实施例四如图9所示,在一个实施例中,提供一种对mssql数据库进行恢复的方法,该方法包括:s401.获取虚拟磁盘映像中的数据文件;s402.根据系统表页标识符和系统表页组织结构解析数据文件中的系统表页,从系统表页中获取所需要恢复的表的第一对象信息,其中,第一对象信息包括表名称、表字段和表的主键;s403.判断数据文件是否为损坏文件;若是,则执行步骤s4041和s4042;若不是,则执行步骤s4051至步骤s4053;s4041.根据第一对象信息索引iam页,并获得第三对象信息,其中,所述第三对象信息包括页码和文件号,所述iam页包括含有至少八个数据槽的混合区;s4042.根据所述第三对象信息查询到用户表页,并从所述用户表页中获得第二对象信息;s4051.根据第一对象信息索引所述系统表页,并获得索引id和页头id;s4052.通过所述索引id和所述页头id计算auid;s4053.根据auid遍历所述数据文件,获得到用户表页,并从所述用户表页中获得第二对象信息;s406.判断第二对象信息是否为压缩数据;若是,则执行步骤s407;若不是,则执行步骤s408;s407.根据压缩数据的行压缩结构对所述第二对象信息进行解压处理,再进行解码处理,恢复出第一数据,其中,所述行压缩结构包括标题区、列说明符区、短数据区和长数据区;s408.将第二对象信息进行解码处理,恢复出第二数据;s409.对所述第一数据进行解析,恢复出第三数据,所述第三数据为lob数据、slob数据和blob数据;s410.记录第一数据中每条数据的首地址偏移;s411.将所述第一数据中每条数据的首地址偏移与行目录中的地址进行对比,并将未找到的匹配项标记为已删除数据。本实施例的技术方案,由于行目录只记录未删除数据,当数据被删除时,其行目录将会被置空,所以无法定位行目录。因此,通过数据前后两条数据行目录间差值确定被删除数据所在范围,以便实现对删除数据的恢复。实施例五如图10所示,在一个实施例中,提供了一种对mssql数据库进行恢复的系统,该系统包括:文件获取模块501,用于获取虚拟磁盘映像中的数据文件;系统表解析模块502,用于根据系统表页标识符和系统表页组织结构解析数据文件中的系统表页,从系统表页中获取用户所需要恢复的表的第一对象信息,其中,第一对象信息包括表名称、表字段和表的主键;用户表查询模块504,用于根据第一对象信息查询到用户表页,从所述用户表页中获得第二对象信息;第二判断模块505,用于判断第二对象信息是否为压缩数据;解压解码模块506,用于根据压缩数据的行压缩结构对所述第二对象信息进行解压处理,再进行解码处理,恢复出第一数据,其中,所述行压缩结构包括标题区、列说明符区、短数据区和长数据区;解码模块507,用于对所述第二对象信息进行解码处理,恢复出第二数据。可选的,在本实施例的基础上,所述系统,还包括:第一判断模块503,用于判断数据文件是否为损坏文件;其中,如图11所示,所述用户表查询模块504,包括:索引单元5041,用于根据第一对象信息索引iam页,并获得第三对象信息,其中,所述第三对象信息包括页码和文件号,所述iam页包括含有至少八个数据槽的混合区;查询单元5042,根据所述第三对象信息查询到用户表页,并从所述用户表页中获得第二对象信息。可选的,在本实施例的基础上,所述系统还包括:数据格式解析模块508,用于对所述第一数据进行解析,恢复出第三数据,所述第三数据为lob数据、slob数据、blob数据或行溢出数据中任一种或多种。可选的,在本实施例的基础上,所述系统还包括:记录模块509,用于记录第一数据中每条数据的首地址偏移;对比标记模块510,用于将所述第一数据中每条数据的首地址偏移与行目录中的地址进行对比,并将未找到的匹配项标记为已删除数据。本实施例的技术方案,通过文件获取模块501,用于获取虚拟磁盘映像中的数据文件,系统表解析模块502能够根据系统表页标识符和系统表页组织结构解析数据文件中的系统表页,并获取用户所需要恢复的表的第一对象信息,其中,第一对象信息包括表名称、表字段和表的主键,用户表查询模块504能够根据第一对象信息查询到用户表页,从所述用户表页中获得第二对象信息;第一判断模块503判断第二对象信息是否为压缩数据,如果第二对象信息是压缩数据,解压解码模块根据压缩数据的行压缩结构对所述第二对象信息进行解压处理,再进行解码处理,恢复出第一数据。解决了现在技术中mssql恢复的细粒度不够及无法恢复解压数据的技术问题,基于二进制解析,免去了虚拟磁盘挂载以及启动操作系统及数据库操作,简化了操作流程。实施例六在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现实施例一至实施例四所述的对mssql数据库进行恢复的方法。本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。当前第1页12