论文导读:随着信息化建设的发展,人们越来越依赖于计算机应用程序,依赖程度越高,数据库的安全性就越来越重要,一旦数据损坏,我们所做的大量工作就可能毁于一旦。尤其是那些重要的信息和数据受到损坏的时候,系统就无法识别数据文件,用一般的恢复工具也无能为力。在数据文件被损坏后,由于数据文件中的数据还是存在的,只是文件头或系统表部分信息遭到损坏。
关键词:数据库,恢复,数据文件
1.引言
随着信息化建设的发展,人们越来越依赖于计算机应用程序,依赖程度越高,数据库的安全性就越来越重要,一旦数据损坏,我们所做的大量工作就可能毁于一旦。尤其是那些重要的信息和数据受到损坏的时候,系统就无法识别数据文件,用一般的恢复工具也无能为力。论文参考网。在数据文件被损坏后,由于数据文件中的数据还是存在的,只是文件头或系统表部分信息遭到损坏。所以可以通过解析数据库文件,取出其中存储的数据,使数据得到恢复。
2.数据文件结构的分析
数据文件在数据库系统中的作用是存放数据库系统和用户的数据。数据库系统以数据页为基本单位存储数据,MS SQL Server每个数据页的大小为固定的8kB。每个数据页都由页头、行偏移表和数据记录行3部分组成。页头的总长度为96B。行偏移表位于数据页页末,从后向前扩展,每2B表示一条数据记录行在页内起始位置的偏移量。所有的数据记录行存储在页头和行偏移表之间。
数据文件在逻辑上由数据文件头信息、系统表信息和用户表信息三部分组成。数据文件头信息存放该数据文件的物理信息;系统表信息存放系统表拥有的数据,其中包括用户表的结构信息;用户表信息存放用户表中保存的数据,即最需要恢复的数据部分。下面是对相关系统表结构的分析(参考联机丛书)。
2.1系统表SYSOBJECTS
SQL Server的每个数据库内都有SYSOBJECTS系统表,它存放数据库内创建的所有对象(如表、约束、默认值、日志、规则、存储过程等),每个对象在表中占一行。
该系统表中重要列名称和相关描述:Name(存储对象的名称);Id(存储对象的id值);Xtyp(存储对象的类型,其值为S、U、V、P、L,表示对象分别为系统表、用户表、视图、存储过程和日志);Uid(存储所有者对象的用户ID);Status(存储对象状态)。
通过查询SYSOBJECTS系统表,就可知道在数据库中用户定义了什么表,以及这些表所对应的表名和表的ID值,通过表的ID就可以从别的系统表中得到用户表的结构信息。当xtype的值为U并且status的值大于0时,表示是用户建立的表,对象名就是表名,对象ID就是表的ID值。论文参考网。如用下面的语句就可以列出库xscj中所有的用户建立的表名。
select * fromxscj.dbo.sysobjects where xtype=’U’ and status>0
2.2系统表SYSINDEXES
该系统表存放了数据库中对象的物理存储信息。
该系统表中重要列名称和相关描述:Name(存储对象的名称);Id(存储对象的Id值);Indid(索引Id值。值为1表示聚集索引,值大于1表示非聚集等,值为255表示具有text或image数据的表条目);Dpages(如果Indid=255,其设置为0,否则是已用索引页的计数);Used(如果Indid=0或Indid=1, Used是用于所有索引和表数据的总页数。如果Indid =255,Used是用于Text或Image数据的页计数。否则是用于索引的页计数);Rows(表示Indid=0或Indid=1的数据级行数,如果Indid=255则Rows设置为0);Minlen(最小行大小)。
2.3系统表SYSCOLUMNS
该系统表存放了数据库中对象列的结构信息。在该系统表中每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行。该表位于每个数据库中。论文参考网。
该系统表中重要列名称和相关描述:Name(列名或存储过程参数的名称);Id(所属的表对象的Id,或与该参数关联的存储过程Id);Colid(列或参数Id);Length(列最大物理存储长度);Xscale(该列的小数位数);Xoffset(列在记录行中的偏移位置)。
2.4系统表SYSTYPES
该系统表存放了数据库中字段类型的结构信息。
该系统表中重要列名称和相关描述:Name(数据类型名称);Xusertype(扩展的用户定义数据类型);Variable(是否是可变长数据类型,可变长度数据类型为1,否则为0);Length(数据类型的物理长度)。
3.受损文件数据恢复的方法
在对数据库文件的结构进行了分析后,可以看到数据文件主要由文件头、系统表信息和用户表信息三部分组成。对于数据的恢复,要分析的关键是系统表信息和用户表信息。系统表信息中保存了用户表的结构定义信息,这对用户表数据的恢复是至关重要的,只有知道用户表的结构定义,才能分析出用户表信息记录的物理存储结构,然后依据记录的物理存储结构恢复用户表的数据。恢复数据信息的步骤如下:
3.1打开相关联的日志文件和数据文件,遍历日志文件,逐个分析事务记录,将最后一个开始检查点操作后的所有事务记录保存在未操作事务链表中。
3.2遍历数据文件,以数据页为单位,读取每一个数据页进行分析,分析依据是数据页的结构。在对数据页进行分析时,从未操作事务链表中检索,判断该数据页是否有未完成的数据操作,如果有,则从未操作事务链表中提取出数据操作命令,对该数据页进行数据更改操作,并根据该数据页所属的表结构,生成相应的SQL语句,将这些语句保存在一个文件即语句集中。
3.3在对数据文件结构的所有数据页分析结束后,执行生成的语句结果集,将数据重新存储到数据库中。
4.结束语
在对数据库实际恢复过程中,当数据库相关文件遭到严重破坏,而无法用数据库系统本身的安全策略恢复数据时,要修复数据库相关文件使其回复原样,几乎是不可能的。而对于数据库用户而言,最重要的是重新取回数据库中存储的数据,因此在对数据库进行非常规恢复时,主要是恢复数据库中用户所需要的数据。
参考文献
[1]郑阿奇. SQL Server实用教程[M].北京:电子工业出版社, 2005.
[2]万锋,龚正良,杨辛宝. MS SQL Server数据库数据恢复的研究[J].计算机工程, 2005, 6 (31): 84-86.
|