CN111104259B - 一种数据库恢复方法、装置及存储介质 - Google Patents

一种数据库恢复方法、装置及存储介质 Download PDF

Info

Publication number
CN111104259B
CN111104259B CN201911341016.8A CN201911341016A CN111104259B CN 111104259 B CN111104259 B CN 111104259B CN 201911341016 A CN201911341016 A CN 201911341016A CN 111104259 B CN111104259 B CN 111104259B
Authority
CN
China
Prior art keywords
data
page
system table
record
acquiring
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.)
Active
Application number
CN201911341016.8A
Other languages
English (en)
Other versions
CN111104259A (zh
Inventor
梁德荣
沈长达
吴少华
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xiamen Meiya Pico Information Co Ltd
Original Assignee
Xiamen Meiya Pico Information Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Xiamen Meiya Pico Information Co Ltd filed Critical Xiamen Meiya Pico Information Co Ltd
Priority to CN201911341016.8A priority Critical patent/CN111104259B/zh
Publication of CN111104259A publication Critical patent/CN111104259A/zh
Application granted granted Critical
Publication of CN111104259B publication Critical patent/CN111104259B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1471Saving, restoring, recovering or retrying involving logging of persistent data for recovery
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2282Tablespace storage structures; Management thereof

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Quality & Reliability (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种数据库恢复方法及装置,根据索引ID和页所属表的分配单元ID所对应的数值将数据页分别进行分类得到数据页列表,其中数据页列表包括第一数据页列表和第二数据页列表;根据页所属表的分配单元ID所对应的数据页列表分别获取系统表,分别通过系统表的表结构按顺序解析系统表中数据页的所有记录并恢复删除的系统表记录,得到系统表的记录列表;以及第一数据页列表中获取属于同一索引的数据页,根据系统表的记录列表得到用户表的表结构,并解析同一索引的数据页中的正常记录,恢复出用户表的删除记录。通过恢复系统表数据可以恢复出用户表数据,从而解决了索引结构被破坏情况下系统表的恢复,并解决了文件被病毒破坏等情况下的数据恢复。

Description

一种数据库恢复方法、装置及存储介质
技术领域
本发明涉及电子数据取证领域,具体涉及一种数据库恢复方法、装置及存储介质。
背景技术
SQL Server作为微软开发的关系型数据,目前具有广泛的应用。SQL Server丢失数据的恢复在数据安全领域一直是一个备受关注的热点。目前行业已有一些数据库恢复技术,这些技术无法满足损坏文件或者删除数据的恢复,比如突然断电导致的数据库文件损坏,病毒破坏,人为删除等。
目前行业中的SQL Server恢复技术主要通过数据库索引方法来恢复数据,SQLServer主要索引方法包括聚集索引和非聚集索引两种方式,不管是恢复系统表还是用户表都依赖完整的索引结构进行恢复,恢复效果大致相当。现有的离线恢复技术依赖完整的索引结构,当聚集索引的INDEX页(索引页)或者非聚集索引的IAM页(索引分配页)被病毒破坏导致索引结构不完整从而导致无法恢复。另外,目前对完全删除数据库表(drop指令删除)的恢复还没有成熟的解决方案。
有鉴于此,设计出一种新的针对损坏数据库的恢复方法可以解决上述存在的问题。
发明内容
针对上述提到的恢复技术依赖完整的索引结构,索引结构不完整无法恢复,并且难以恢复完全删除数据库表等问题。本申请的实施例的目的在于提出了一种数据库恢复方法和装置,来解决以上背景技术部分提到的技术问题。
第一方面,本申请的实施例提供了一种数据库恢复方法,该方法包括:
S1:根据索引ID和页所属表的分配单元ID所对应的数值将数据页分别进行分类得到数据页列表,其中数据页列表包括第一数据页列表和第二数据页列表;
S2:根据页所属表的分配单元ID所对应的数据页列表分别获取系统表,分别通过系统表的表结构按顺序解析系统表中数据页的所有记录并恢复删除的系统表记录,得到系统表的记录列表,其中系统表包括系统表sysschobjs、系统表sysidxstats、系统表sysallocunits或系统表syscolpars;以及
S3:从第一数据页列表中获取属于同一索引的数据页,根据系统表的记录列表得到用户表的表结构,并解析同一索引的数据页中的正常记录,恢复出用户表的删除记录。
在一些实施例中,步骤S1包括:
S11:获取数据库文件,从页在文件中的偏移位置读取数据页P;
S12:根据数据页P的偏移位置获取索引ID和页所属表的分配单元ID;
S13:通过索引ID和页所属表的分配单元ID计算auid;
S14:将具有相同的auid的数据页P合并为第一数据页列表,将具有相同的页所属表的分配单元ID的数据页P合并为第二数据页列表;以及
S15:依次读取下一个数据页,重复步骤S12-S14。
通过auid和页所属表的分配单元ID的数值大小将数据页进行分类,归类到第一数据页列表和第二数据页列表,根据页所属表的分配单元ID可以获取系统表并对系统表的数据页和记录进行恢复,根据auid可以对用户表的数据页和记录进行恢复。
在一些实施例中,数据页中属于同一索引具有相同的auid,auid的计算方式为:
auid=(索引ID<<48)|(页所属表的分配单元ID<<16)。系统为每个索引都分配一个auid,属于同一索引的所有数据页拥有同一个auid,因此可以用个具有相同的auid值对数据页分类。
在一些实施例中,步骤S2包括:
S21:获取页所属表的分配单元ID为34的所有数据页列表即为系统表sysschobjs的所有数据页,根据系统表sysschobjs的表结构按顺序解析系统表sysschobjs中数据页的所有记录并恢复删除的系统表sysschobjs记录,得到系统表sysschobjs的记录列表RS(schobjs);
S22:获取页所属表的分配单元ID为54的所有数据页列表即为系统表sysidxstats的所有数据页,根据系统表sysidxstats的表结构按顺序解析系统表sysidxstats中数据页的所有记录并恢复删除的系统表sysidxstats记录,得到系统表sysidxstats的记录列表RS(idxstats);
S23:获取页所属表的分配单元ID为7的所有数据页列表即为系统表sysallocunits的所有数据页,根据系统表sysallocunits的表结构按顺序解析系统表sysallocunits中数据页的所有记录并恢复删除的系统表sysallocunits记录,得到系统表sysallocunits的记录列表RS(allocunits);以及
S24:获取页所属表的分配单元ID为41的所有数据页列表即为系统表syscolpars的所有数据页,根据系统表syscolpars的表结构按顺序解析系统表syscolpars中数据页的所有记录并恢复删除的系统表syscolpars记录,得到系统表syscolpars的记录列表RS(colpars)。
根据页所属表的分配单元ID的数值直接获取到系统表的所有数据页,并根据系统表的表结构解析系统表数据页中的所有记录,不依赖于具体的索引结构,而系统表中的记录则包含有用户表的信息,因此可以利用系统表中的记录所包含的信息对用户表进行恢复。
在一些实施例中,步骤S3包括:
S31:依次获取RS(schobjs)中的第i条记录Ti(i=0,1,2,…,n),从Ti中获取对象ID、表名name和类型type,其中对象ID的值为A;
S32:若类型type=U,则执行步骤S33,否则重复执行步骤S31;
S33:通过A关联系统表syscolpars,从RS(colpars)中获取所有对象ID等于A的记录Qi,从记录Qi中得到系统表syscolpars的所有字段信息即得到用户表的表结构;
S34:通过A关联系统表sysidxstats,从RS(idxstats)中获取所有对象ID等于A的记录Si,从记录Si中获取rowsetid;
S35:通过rowsetid关联系统表sysallocunits,从RS(allocunits)中获取ownerid等于rowsetid的记录Ri,从记录Ri中获取auid;
S36:通过auid查找具有相同auid的第一数据页列表;以及
S37:依次从第一数据页列表获取属于同一索引的数据页,通过用户表的表结构,解析属于同一索引的数据页中的正常记录并恢复出用户表的删除记录。
通过恢复出来的系统表数据恢复出删除的用户表数据,该方法简单、快捷而且满足在损坏文件或删除数据的恢复。
在一些实施例中,RS(schobjs)={T1,T2,T3,…,Tn},每一条记录Ti至少包含对象ID、对象名称和对象类型。
在一些实施例中,RS(allocunits)={R1,R2,R3,…,Rn},则每一条记录Ri至少包含auid,拥有者ID,第一个页地址、根节点页地址和第一个IAM页地址。
在一些实施例中,RS(idxstats)={S1,S2,S3,…,Sn},每一条记录Si至少包含对象ID、索引ID、索引名称、索引类型和rowsetid,其中rowsetid用于关联sysallocunits系统表的拥有者ID。
在一些实施例中,RS(colpars)={Q1,Q2,Q3,…,Qn},每一条记录Qi至少包含对象ID、列ID、列名、列类型、列长度、列精度和列小数点数。
在一些实施例中,在系统表中对象ID等于页所属表的分配单元ID。
第二方面,本申请的实施例还提出了一种数据库恢复装置,包括存储器、处理器及存储在所述存储器上且在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如第一方面中任一实现方式描述方法的步骤。
第三方面,本申请的实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面中任一实现方式描述的方法。
本申请的实施例在充分理解SQL Server数据库存储结构的基础上提出的一种数据库恢复方法,通过恢复SQL Server数据库的系统表数据,解决了文件被病毒破坏等情况下的数据恢复。首先通过对数据页进行分类获得数据页列表,根据页所属表的分配单元ID所对应的数据页列表获取系统表的所有数据页,恢复系统表数据,通过分析系统表的对象ID获取所有数据页,从而解决了索引结构被破坏情况下系统表的恢复,最后通过系统表中的数据可以恢复出用户表数据。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请的一个实施例可以应用于其中的示例性装置架构图;
图2为本发明的实施例的数据库的文件结构的示意图;
图3为本发明的实施例的数据库的页结构的示意图;
图4为本发明的实施例的数据库的删除记录的示意图;
图5为本发明的实施例的数据库恢复方法的流程示意图;
图6为本发明的实施例的数据库恢复方法的步骤S1的流程示意图;
图7为本发明的实施例的数据库恢复方法的步骤S2的流程示意图;
图8为本发明的实施例的数据库恢复方法的步骤S3的流程示意图;
图9为本发明的实施例的创建testdb数据库数据的示意图;
图10为本发明的实施例的使用drop table BalanceLog删除表的示意图;
图11为使用本发明的实施例的数据库恢复方法恢复testdb数据库的结果示意图;
图12是适于用来实现本申请实施例的电子设备的计算机装置的结构示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
图1示出了可以应用本申请实施例的数据库恢复装置的示例性装置架构100。
如图1所示,装置架构100可以包括终端设备101、102、103,网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。终端设备101、102、103上可以安装有各种应用,例如数据处理类应用、文件处理类应用等。
终端设备101、102、103可以是硬件,也可以是软件。当终端设备101、102、103为硬件时,可以是各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。当终端设备101、102、103为软件时,可以安装在上述所列举的电子设备中。其可以实现成多个软件或软件模块(例如用来提供分布式服务的软件或软件模块),也可以实现成单个软件或软件模块。在此不做具体限定。
服务器105可以是提供各种服务的服务器,例如对终端设备101、102、103上传的文件或数据进行处理的后台数据处理服务器。后台数据处理服务器可以对获取的文件或数据进行处理,生成处理结果。
需要说明的是,本申请实施例所提供的数据库恢复方法可以由服务器105执行,也可以由终端设备101、102、103执行,相应地,数据库恢复装置可以设置于服务器105中,也可以设置于终端设备101、102、103中。
应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。在所处理的数据不需要从远程获取的情况下,上述装置架构可以不包括网络,而只需服务器或终端设备。
如图2所示,SQL Server数据库文件通常以mdf为后缀,文件以页为基本单位组成。页在数据文件内按页号从0开始从小到大排列。页大小通常为8KB,包含96字节的页头部信息数据和记录列表及指向记录的槽三个部分。如图3所示,页头主要包含页号,索引ID,页所属表的分配单元ID,页类型,槽数,前一个页号和后一个页号等信息。
SQL Server数据库文件中包含系统表和用户表,每张表都有一个唯一的对象ID。SQL Server通过一系列的系统表对用户表进行管理。这些系统表主要包括sysschobjs表,syscolpars表、sysallocunits表、sysrowsets表、sysrscols表以及sysidxstats表等。其中sysschobjs表中主要包含该数据库文件中的所有表名及表类型等信息,主要字段有对象ID(即ObjID)、name、type等;syscolpars表中包含了每张表的字段信息,主要字段有对象id、colid、name、xtype、utype、length、prec、scale等;sysallocunits表中主要包含表索引的根节点页及第一个叶子节点页等信息,主要字段有auid、type、ownerid、pgfirst、pgroot、pgfirstiam等,sysidxstats表中主要包含表的索引方式,主要字段为indid、type及rowset等。
当SQLSERVER数据库删除记录时并不会清空记录,只会清空槽指针及该页的槽数量减1,通过找到删除记录位置即可恢复该记录。找到删除记录位置的方法为前一条记录位置加前一条记录长度,假设记录i被删除,记录i的位置的去顶方法为记录i-1的偏移位置加记录i-1的长度。此部分在此不再赘述。
用户表的表结构及索引方式等所有信息都存储在系统表中,如用户表的表名存储sysschobjs表,用户表的字段存储在syscolpars表中。当删除一张表,系统表中对应的删除包含该用户表表信息的记录,恢复出系统表中的删除记录即可组织出用户表的结构及索引方式等信息。
每张表的数据页按照一定索引结构组织起来,索引方式有聚集索引和非聚集索引两种方式。其中聚集索引最多只有一个,非聚集索引可以有多个。系统为每个索引分配了一个auid,属于同一索引的所有数据页都可以计算出相同的auid。
假设P为一个数据页,则P包含8个元素:Offset(页在文件中偏移位置),PageNo(页号),IndexID(索引ID),ObjID_AllocUnitID(页所属表的分配单元ID),Type(页类型),SoltCnt(槽数),PreviousPageNo(前一个页号),NextPageNo(下一个页号)。
假设PS1={P1,P2,P3,....,Pn}为一个数据页列表,则这些所有数据页都有相同的ObjID_AllocUnitID和IndexID,从而可以计算出相同的auid。
假设PS2={P1,P2,P3,....,Pn}为一个数据页列表,则这些所有数据页都有相同的ObjID_AllocUnitID。
假设RS(schobjs)={T1,T2,T3,…,Tn}为系统表sysschobjs的记录列表,则系统表sysschobjs中每一条记录Ti至少包含对象ID(对象ID即ObjID)、name(对象名称)和type(对象类型)。
假设RS(allocunits)={R1,R2,R3,…,Rn}为系统表allocunits的记录列表,则系统表allocunits中每一条记录Ri至少包含auid,拥有者ID,第一个页地址、根节点页地址和第一个IAM页地址。
假设RS(idxstats)={S1,S2,S3,…,Sn}为系统表sysidxstats的记录列表,则系统表sysidxstats中每一条记录Si至少包含对象ID、索引ID、索引名称、索引类型和rowsetid,其中rowsetid用于关联系统表sysallocunits的拥有者ID。
假设RS(colpars)={Q1,Q2,Q3,…,Qn}为系统表syscolpars的记录列表,则系统表syscolpars中每一条记录Qi至少包含对象ID、列ID、列名、列类型、列长度、列精度和列小数点数。
基于上述理论基础和假设前提下,本申请实施例提出了一种数据库恢复方法,如图5所示,该方法包括:
S1:根据索引ID和页所属表的分配单元ID所对应的数值将数据页分别进行分类得到数据页列表,其中数据页列表包括第一数据页列表和第二数据页列表;
S2:根据页所属表的分配单元ID所对应的数据页列表分别获取系统表,分别通过系统表的表结构按顺序解析系统表中数据页的所有记录并恢复删除的系统表记录,得到系统表的记录列表,其中系统表包括系统表sysschobjs、系统表sysidxstats、系统表sysallocunits或系统表syscolpars;以及
S3:从第一数据页列表中获取属于同一索引的数据页,根据系统表的记录列表得到用户表的表结构,并解析同一索引的数据页中的正常记录,恢复出用户表的删除记录。
在具体的实施例中,如图6所示,步骤S1包括:
S11:获取数据库文件,设置Offset=0,从Offset(页在文件中的偏移位置)读取8KB的数据页P。
S12:根据数据页P的偏移位置获取索引ID和页所属表的分配单元ID。在优选的实施例中,从数据页P的偏移位置1字节位置读取数据页类型Type,偏移位置6字节位置获取索引ID即IndexID,偏移位置24字节位置获取ObjID_AllocUnitID。
S13:通过索引ID和页所属表的分配单元ID计算auid。在优选的实施例中,auid的计算方式为:
auid=(索引ID<<48)|(页所属表的分配单元ID<<16)。此处采取十六进制的计算方式进行计算。
S14:将具有相同的auid的数据页P合并为第一数据页列表,将具有相同的页所属表的分配单元ID的数据页P合并为第二数据页列表。
在具体的实施例中,根据auid获取是否已经存在相同auid的集合,不存在则创建第一数据页列表,已存在则直接加入第一数据页列表。例如计算出该数据页的auid为5时,则查找出是否存在auid为5的第一数据页列表,若存在,则将该数据页合并在auid为5的第一数据页列表,若不存在,则创建为auid为5的第一数据页列表。同理,具有相同的的页所属表的分配单元ID的数据页也按相类似的方式建立集合,将此集合设为第二数据页列表。
S15:依次读取下一个数据页,重复步骤S12-S14。在优选的实施例中,将一个数据页分类后,从Offset往后偏移8KB,若Offset小于文件大小则重复S12-S14,若大于文件大小则把数据页列表按对象ID(objID)进行分类。
对于系统表,objID=ObjID_AllocUnitID。因此根据页所属表的分配单元ID的数值获取系统表的所有数据页,如图7所示,步骤S2包括:
S21:获取页所属表的分配单元ID为34的所有数据页列表即为系统表sysschobjs的所有数据页,根据系统表sysschobjs的表结构按顺序解析系统表sysschobjs中数据页的所有记录并恢复删除的系统表sysschobjs记录,得到系统表sysschobjs的记录列表RS(schobjs);
S22:获取页所属表的分配单元ID为54的所有数据页列表即为系统表sysidxstats的所有数据页,根据系统表sysidxstats的表结构按顺序解析系统表sysidxstats中数据页的所有记录并恢复删除的系统表sysidxstats记录,得到系统表sysidxstats的记录列表RS(idxstats);
S23:获取页所属表的分配单元ID为7的所有数据页列表即为系统表sysallocunits的所有数据页,根据系统表sysallocunits的表结构按顺序解析系统表sysallocunits中数据页的所有记录并恢复删除的系统表sysallocunits记录,得到系统表sysallocunits的记录列表RS(allocunits);以及
S24:获取页所属表的分配单元ID为41的所有数据页列表即为系统表syscolpars的所有数据页,根据系统表syscolpars的表结构按顺序解析系统表syscolpars中数据页的所有记录并恢复删除的系统表syscolpars记录,得到系统表syscolpars的记录列表RS(colpars)。
因此根据以上步骤恢复出系统表数据,每个系统表的记录列表中都包含多个系统表记录,不同的系统表记录中包含有用户中不同的信息。根据RS(schobjs)中type=U的记录即表示用户表,其中正常记录即表示一个正常表,删除记录即表示删除表。通过系统表可以恢复出用户表,具体的恢复方法如下:
如图8所示,步骤S3包括:
S31:依次获取RS(schobjs)中的第i条记录Ti(i=0,1,2,…,n),从Ti中获取对象ID、表名name和类型type,其中假设对象ID的值为A;
S32:若类型type=U,则执行步骤S33,否则重复执行步骤S31;
S33:通过A关联系统表syscolpars,从RS(colpars)中获取所有对象ID等于A的记录Qi,从记录Qi中得到系统表syscolpars的所有字段信息即得到用户表的表结构;
S34:通过A关联系统表sysidxstats,从RS(idxstats)中获取所有对象ID等于A的记录Si,从记录Si中获取rowsetid(rowsetid用于关联系统表sysallocunits的拥有者ID);
S35:通过rowsetid关联系统表sysallocunits,从RS(allocunits)中获取ownerid等于rowsetid的记录Ri,从记录Ri中获取auid;
S36:通过auid查找具有相同auid的第一数据页列表;以及
S37:依次从第一数据页列表获取数据页,通过步骤S33中获取的用户表的表结构,解析第一页数据页列表的数据页中的正常记录并恢复出删除记录。
为验证本申请的技术方案的正确性做出如下实验,实验过程具体如下:
首先,创建一个SQL Server数据库为testdb,如图9所示,在testdb数据库下创建若干个表,其中一个表BalanceLog包含九个字段,并往表中写入若干条记录。然后如图10所示,使用drop table BalanceLog指令删除表,最后通过上述方法对testdb数据库进行恢复,恢复得到的结果如图11所示,通过图11的结果可以看出使用本申请的实施例中的数据库恢复方法可以快速、简便地将删除数据库的数据恢复出来。
根据本发明的另一方面,提供一种数据库恢复装置,包括存储装置、以及处理器;
所述存储装置存储用于实现根据本发明实施例的数据库恢复方法中的相应步骤的程序代码;
所述处理器用于运行所述存储装置中存储的程序代码,以执行以上根据本发明实施例的数据库恢复方法的相应步骤。
在一个实施例中,在所述程序代码被所述处理器运行时执行以上根据本发明实施例的前述数据库恢复方法的相应步骤。
本申请的实施例在充分理解SQL Server数据库存储结构的基础上提出的一种数据库恢复方法,通过恢复SQL Server数据库的系统表数据,解决了文件被病毒破坏等情况下的数据恢复。首先通过对数据页进行分类获得数据页列表,根据页所属表的分配单元ID所对应的数据页列表获取系统表的所有数据页,恢复系统表数据,通过分析系统表的对象ID获取所有数据页,从而解决了索引结构被破坏情况下系统表的恢复,最后通过系统表中的数据可以恢复出用户表数据。
下面参考图12,其示出了适于用来实现本申请实施例的电子设备(例如图1所示的服务器或终端设备)的计算机装置1200的结构示意图。图12示出的电子设备仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图12所示,计算机装置1200包括中央处理单元(CPU)1201和图形处理器(GPU)1202,其可以根据存储在只读存储器(ROM)1203中的程序或者从存储部分1205加载到随机访问存储器(RAM)1204中的程序而执行各种适当的动作和处理。在RAM 1204中,还存储有装置1200操作所需的各种程序和数据。CPU 1201、GPU1202、ROM 1203以及RAM 1204通过总线1209彼此相连。输入/输出(I/O)接口1206也连接至总线1209。
以下部件连接至I/O接口1206:包括键盘、鼠标等的输入部分1207;包括诸如、液晶显示器(LCD)等以及扬声器等的输出部分1208;包括硬盘等的存储部分1205;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分1210。通信部分1210经由诸如因特网的网络执行通信处理。驱动器1211也可以根据需要连接至I/O接口1206。可拆卸介质1212,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1211上,以便于从其上读出的计算机程序根据需要被安装入存储部分1205。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1210从网络上被下载和安装,和/或从可拆卸介质1212被安装。在该计算机程序被中央处理单元(CPU)1201和图形处理器(GPU)1202执行时,执行本申请的方法中限定的上述功能。
需要说明的是,本申请所述的计算机可读介质可以是计算机可读信号介质或者计算机可读介质或者是上述两者的任意组合。计算机可读介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的装置、装置或器件,或者任意以上的组合。计算机可读介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行装置、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行装置、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本申请的操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本申请各种实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的装置来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中。
作为另一方面,本申请还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:根据索引ID和页所属表的分配单元ID所对应的数值将数据页分别进行分类得到数据页列表,其中数据页列表包括第一数据页列表和第二数据页列表;根据页所属表的分配单元ID所对应的数据页列表分别获取系统表,分别通过系统表的表结构按顺序解析系统表中数据页的所有记录并恢复删除的系统表记录,得到系统表的记录列表,其中系统表包括系统表sysschobjs、系统表sysidxstats、系统表sysallocunits或系统表syscolpars;以及从第一数据页列表中获取属于同一索引的数据页,根据系统表的记录列表得到用户表的表结构,并解析同一索引的数据页中的正常记录,恢复出用户表的删除记录。
以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。

Claims (12)

1.一种数据库恢复方法,其特征在于,所述方法包括以下步骤 :
S1:根据索引ID和页所属表的分配单元ID所对应的数值将数据页分别进行分类得到数据页列表,其中所述数据页列表包括第一数据页列表和第二数据页列表;
S2:根据所述页所属表的分配单元ID所对应的所述数据页列表分别获取系统表,分别通过所述系统表的表结构按顺序解析所述系统表中数据页的所有记录并恢复删除的系统表记录,得到所述系统表的记录列表,其中所述系统表包括系统表sysschobjs、系统表sysidxstats、系统表sysallocunits或系统表syscolpars;以及
S3:从所述第一数据页列表中获取属于同一索引的数据页,根据所述系统表的记录列表得到用户表的表结构,并解析所述同一索引的数据页中的正常记录,恢复出用户表的删除记录。
2.根据权利要求1所述的数据库恢复方法,其特征在于,所述步骤S1包括:
S11:获取数据库文件,从页在文件中的偏移位置读取数据页P;
S12:根据所述数据页P的偏移位置获取所述索引ID和所述页所属表的分配单元ID;
S13:通过所述索引ID和所述页所属表的分配单元ID计算auid;
S14:将具有相同的auid的所述数据页P合并为第一数据页列表,将具有相同的所述页所属表的分配单元ID的所述数据页P合并为第二数据页列表;以及
S15:依次读取下一个所述数据页,重复步骤S12-S14。
3.根据权利要求2所述的数据库恢复方法,其特征在于,所述数据页中属于同一索引具有相同的auid,所述auid的计算方式为:
auid=(索引ID<<48)|(页所属表的分配单元ID<<16)。
4.根据权利要求2所述的数据库恢复方法,其特征在于,所述步骤S2包括:
S21:获取所述页所属表的分配单元ID为34的所有数据页列表即为系统表sysschobjs的所有数据页,根据系统表sysschobjs的表结构按顺序解析所述系统表sysschobjs中数据页的所有记录并恢复删除的系统表sysschobjs记录,得到所述系统表sysschobjs的记录列表RS(schobjs);
S22:获取所述页所属表的分配单元ID为54的所有数据页列表即为系统表sysidxstats的所有数据页,根据系统表sysidxstats的表结构按顺序解析所述系统表sysidxstats中数据页的所有记录并恢复删除的系统表sysidxstats记录,得到所述系统表sysidxstats的记录列表RS(idxstats);
S23:获取所述页所属表的分配单元ID为7的所有数据页列表即为系统表sysallocunits的所有数据页,根据系统表sysallocunits的表结构按顺序解析所述系统表sysallocunits中数据页的所有记录并恢复删除的系统表sysallocunits记录,得到所述系统表sysallocunits的记录列表RS(allocunits);以及
S24:获取所述页所属表的分配单元ID为41的所有数据页列表即为系统表syscolpars的所有数据页,根据系统表syscolpars的表结构按顺序解析所述系统表syscolpars中数据页的所有记录并恢复删除的系统表syscolpars记录,得到所述系统表syscolpars的记录列表RS(colpars)。
5.根据权利要求4所述的数据库恢复方法,其特征在于,所述步骤S3包括:
S31:依次获取所述RS(schobjs)中的第i条记录Ti(i=0,1,2,…,n),从Ti中获取对象ID、表名name和类型type,其中对象ID的值为A;
S32:若类型type=U,则执行步骤S33,否则重复执行步骤S31;
S33:通过A关联所述系统表syscolpars,从所述RS(colpars)中获取所有对象ID等于A的记录Qi,从记录Qi中得到所述系统表syscolpars的所有字段信息即得到所述用户表的表结构;
S34:通过A关联所述系统表sysidxstats,从所述RS(idxstats)中获取所有对象ID等于A的记录Si,从记录Si中获取rowsetid;
S35:通过rowsetid关联所述系统表sysallocunits,从所述RS(allocunits)中获取ownerid等于rowsetid的记录Ri,从记录Ri中获取auid;
S36:通过auid查找具有相同auid的第一数据页列表;以及
S37:依次从所述第一数据页列表获取属于同一索引的数据页,通过所述用户表的表结构,解析所述属于同一索引的数据页中的正常记录并恢复出用户表的删除记录。
6.根据权利要求4所述的数据库恢复方法,其特征在于,RS(schobjs)={T1,T2,T3,…,Tn},每一条记录Ti至少包含对象ID、对象名称和对象类型。
7.根据权利要求4所述的数据库恢复方法,其特征在于,RS(allocunits)={R1,R2,R3,…, Rn},则每一条记录Ri至少包含auid,拥有者ID,第一个页地址、根节点页地址和第一个IAM页地址。
8.根据权利要求7所述的数据库恢复方法,其特征在于,RS(idxstats)={S1,S2,S3,…,Sn},每一条记录Si至少包含对象ID、索引ID、索引名称、索引类型和rowsetid,其中rowsetid用于关联所述sysallocunits系统表的拥有者ID。
9.根据权利要求4所述的数据库恢复方法,其特征在于,RS(colpars)={Q1,Q2,Q3,…,Qn},每一条记录Qi至少包含对象ID、列ID、列名、列类型、列长度、列精度和列小数点数。
10.根据权利要求5所述的数据库恢复方法,其特征在于,在所述系统表中所述对象ID等于所述页所属表的分配单元ID。
11.一种数据库恢复装置,包括存储器、处理器及存储在所述存储器上且在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至10中任一项所述方法的步骤。
12.一种计算机存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被计算机执行时实现权利要求1至10中任一项所述方法的步骤。
CN201911341016.8A 2019-12-23 2019-12-23 一种数据库恢复方法、装置及存储介质 Active CN111104259B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911341016.8A CN111104259B (zh) 2019-12-23 2019-12-23 一种数据库恢复方法、装置及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911341016.8A CN111104259B (zh) 2019-12-23 2019-12-23 一种数据库恢复方法、装置及存储介质

Publications (2)

Publication Number Publication Date
CN111104259A CN111104259A (zh) 2020-05-05
CN111104259B true CN111104259B (zh) 2022-08-12

Family

ID=70423360

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911341016.8A Active CN111104259B (zh) 2019-12-23 2019-12-23 一种数据库恢复方法、装置及存储介质

Country Status (1)

Country Link
CN (1) CN111104259B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112052118B (zh) * 2020-08-20 2022-08-23 厦门市美亚柏科信息股份有限公司 一种GlobalFs删除文件恢复方法和系统
CN113282573B (zh) * 2021-07-22 2021-09-17 成都云祺科技有限公司 基于iam页的数据库恢复的方法、系统及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015163696A1 (ko) * 2014-04-23 2015-10-29 고려대학교 산학협력단 마이크로소프트 sql 서버 데이터베이스에서 데이터를 복원하는 방법 및 장치
CN105653403A (zh) * 2016-02-29 2016-06-08 厦门市美亚柏科信息股份有限公司 一种mdb文件数据的恢复方法及其系统
WO2017082520A1 (ko) * 2015-11-10 2017-05-18 엘지전자 주식회사 데이터베이스 관리 시스템 및 그의 데이터 변경 및 복구 방법
CN109753382A (zh) * 2018-12-10 2019-05-14 厦门市美亚柏科信息股份有限公司 一种数据库删除记录的恢复方法及系统

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7334002B2 (en) * 2004-02-27 2008-02-19 Microsoft Corporation System and method for recovery units in databases
US9846620B2 (en) * 2013-01-11 2017-12-19 Commvault Systems, Inc. Table level database restore in a data storage system
KR101547466B1 (ko) * 2014-03-28 2015-08-26 고려대학교 산학협력단 오라클 데이터베이스에서 데이터를 복원하는 방법 및 장치
CN107528872B (zh) * 2016-06-22 2020-07-24 杭州海康威视数字技术股份有限公司 一种数据恢复方法、装置及云存储系统

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015163696A1 (ko) * 2014-04-23 2015-10-29 고려대학교 산학협력단 마이크로소프트 sql 서버 데이터베이스에서 데이터를 복원하는 방법 및 장치
WO2017082520A1 (ko) * 2015-11-10 2017-05-18 엘지전자 주식회사 데이터베이스 관리 시스템 및 그의 데이터 변경 및 복구 방법
CN105653403A (zh) * 2016-02-29 2016-06-08 厦门市美亚柏科信息股份有限公司 一种mdb文件数据的恢复方法及其系统
CN109753382A (zh) * 2018-12-10 2019-05-14 厦门市美亚柏科信息股份有限公司 一种数据库删除记录的恢复方法及系统

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
MS SQL Server数据库数据恢复的研究;万锋等;《计算机工程》;20050605(第06期);全文 *
一种基于SQLite3文件格式的删除数据恢复方法;白晋国等;《小型微型计算机系统》;20160315;全文 *

Also Published As

Publication number Publication date
CN111104259A (zh) 2020-05-05

Similar Documents

Publication Publication Date Title
WO2019062189A1 (zh) 电子装置、数据表归档处理的方法、系统及存储介质
CN111339073A (zh) 实时数据处理方法、装置、电子设备及可读存储介质
CN109522751B (zh) 访问权限控制方法、装置、电子设备及计算机可读介质
CN111104259B (zh) 一种数据库恢复方法、装置及存储介质
CN111858146B (zh) 用于恢复数据的方法、设备和计算机程序产品
CN111949710A (zh) 数据存储方法、装置、服务器及存储介质
CN111095421A (zh) 基因文件的上下文感知增量算法
CN111897790A (zh) 风控日志采集方法、装置、电子设备及存储介质
CN112163412A (zh) 数据校验方法、装置、电子设备及存储介质
US11379421B1 (en) Generating readable, compressed event trace logs from raw event trace logs
CN110879808A (zh) 一种信息处理方法和装置
CN112182138A (zh) 一种目录编制方法和装置
CN108108392B (zh) 商品数据管理方法、装置、计算机设备及存储介质
CN111625532A (zh) 数据血缘关系处理方法、装置、计算机设备及存储介质
CN113268453A (zh) 日志信息压缩存储方法及装置
CN110505289B (zh) 文件下载方法及装置、计算机可读介质、无线通信设备
CN112800006B (zh) 用于网络设备的日志存储方法及装置
CN116069725A (zh) 文件迁移方法、装置、设备、介质和程序产品
CN111723063A (zh) 一种离线日志数据处理的方法和装置
CN115330540A (zh) 一种处理交易数据的方法和装置
CN111125163A (zh) 用于处理数据的方法和装置
CN113138974B (zh) 数据库合规检测的方法和装置
US10162934B2 (en) Data de-duplication system using genome formats conversion
US10970066B1 (en) Duplicate code section detection for source code
CN110443560B (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