电子商务平台数据库恢复论文:电子商务平台数据库恢复软件的开发与应用

上传人:xins****2008 文档编号:108799193 上传时间:2019-10-25 格式:DOC 页数:9 大小:79KB
返回 下载 相关 举报
电子商务平台数据库恢复论文:电子商务平台数据库恢复软件的开发与应用_第1页
第1页 / 共9页
电子商务平台数据库恢复论文:电子商务平台数据库恢复软件的开发与应用_第2页
第2页 / 共9页
电子商务平台数据库恢复论文:电子商务平台数据库恢复软件的开发与应用_第3页
第3页 / 共9页
电子商务平台数据库恢复论文:电子商务平台数据库恢复软件的开发与应用_第4页
第4页 / 共9页
电子商务平台数据库恢复论文:电子商务平台数据库恢复软件的开发与应用_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《电子商务平台数据库恢复论文:电子商务平台数据库恢复软件的开发与应用》由会员分享,可在线阅读,更多相关《电子商务平台数据库恢复论文:电子商务平台数据库恢复软件的开发与应用(9页珍藏版)》请在金锄头文库上搜索。

1、 电子商务平台数据库恢复论文:电子商务平台数据库恢复软件的开发与应用摘要:本文详细分析了SQL Server2000数据页的存储结构以及删除数据记录之后数据页的变化,得到的结论是被删除的数据记录仍然保存在数据页中,可以不依靠日志来恢复这些被删除的记录。本文详细讲解了恢复软件核心存储结构和核心模块的设计方法,最后介绍了软件的测试运行情况。关键词:数据页;删除;恢复随着电子商务技术的快速发展,人们越来越多地通过电子商务平台进行网上交易。电子商务平台在给人们的生活带来便利的同时,也存在一些安全隐患。一些不法分子搭建虚假电子商务平台,引诱用户登录,进而盗取用户的敏感信息。通常不法分子会将盗取的敏感信息

2、和电子商务平台上的虚假商品信息保存在数据库内,获取、分析数据库中保存的信息对公安机关的调查、取证工作有着重要的意义。犯罪分子为了逃避法律的制裁,可能会删除或修改数据库中一些关键的数据,通常情况下公安机关的电子数据检验人员会根据日志文件来恢复这些被删除和修改的记录,但是如果嫌疑人有目的的对日志文件进行了清理,那么电子数据检验人员将无法通过日志文件恢复这些记录,从而失去了侦破案件的重要线索。因此研究无日志文件或日志被清理的情况下如何恢复被删除和修改的记录对电子数据检验工作至关重要。SQL Server2000数据库具备数据管理能力强、运行稳定、使用方便等诸多优点,因此成为各大电子商务平台的首选数据

3、库。SQL Server2000数据库具备独立的数据文件,即*.mdf,所有的数据都保存在这个数据文件中。被删除或被修改的记录并没有从这个数据文件中立即消失,只是将它们占用的存储空间设置为不可用状态,这为恢复这些记录提供了可能。当前单独从数据文件中恢复被删除和修改数据的软件尚未出现。本文设计的是一款不依赖日志文件的SQL Server2000数据库删除、修改记录恢复软件。1数据页的存储结构1.1数据页存储结构说明SQL Server 2000中数据存储的基本单位是数据页,数据文件(*.mdf)的磁盘空间可以从逻辑上划分成若干个数据页(从0到n连续编号),每个数据页的大小是8KB。数据页是磁盘I

4、O操作的基本单位。每页的开头是96字节的页头,用于存储有关页的系统信息,这些信息包括页编号、页类型、页的可用空间以及拥有该页的对象的ID。在数据页上,数据行紧接着页头按顺序放置。数据页的末尾是行偏移表,对于页中的每一行,行偏移表都包含一个条目。每个条目记录对应行的第一个字节与页首的距离。行偏移表中的条目的顺序与页中行的顺序相反。1.2通过实例分析数据页存储结构在master数据库中建立一个名为user的数据表,对应的SQL语句为:数据页的存储结构create table user(name varchar(10),age varchar(10)。在user数据表中插入两条记录,对应的SQL语句

5、为:insert into user(name,age)values(tom,20);insert into user(name,age)values(jack,21)。通过分析我们发现user表的数据保存在编号为34的数据页中。为使用DBCC命令查看到的编号为34的数据页信息。user表存储情况页面数据被分成3部分,左边第一列指出的是数据的字节编号,第一个字节的编号是0x1a52c000,最后一个字节的编号是0x1a52dfff,共8192个字节;接着四列包含页面存储的实际数据,以16进制的形式显示。右边一列包含数据的字符表示(只有字符数据是可读的)。前96个字节是数据页头信息,现对这部分数

6、据进行详细分析。第2个字节代表数据页类型,1表示这是一个保存具体数据信息的数据页。15-16字节代表每行记录的最小长度,name和age字段各占10个字符,每行记录的首部占4个字符,因此本例最小长度为24。23-24字节代表该数据页保存的记录个数,本例为2。25-28字节是user表的id编号,本例为0x15502e78,SQLServer2000数据库中每个数据表都有唯一的id编号。29-30字节是空闲空间大小,本例是0x1f66。31-32字节是第一个空闲字节的编号,本例是0x0096。数据页头之后保存的是具体的数据记录信息,起始字节编号是0x1a52c060结束字节编号是0x1a52c0

7、96,共54个字节。这54个字节数据包含两行记录,每行记录占27个字节,现以第1行记录为例分析数据记录的存储结构。每行记录的前4个字节固定为0x10001800,其中0x18为每行记录的固定长度。5-14个字节保存的是name字段的数据,本例为tom。15-24字节保存的是age字段的数据,本例为20。25-27字节为记录结束位置分隔符,本例为0x020000,其中02为字段个数。数据页结束位置保存的是数据记录的行偏移量,每2个字节保存一个记录指针。在本例中,行偏移表保存了两个指针。第一个指针为0x0060,指向第1行记录的起始位置。第2个指针为0x007b,指向第2行记录的起始位置。1.3删

8、除一条记录之后数据页的变化删除user表中的第1行记录,SQL语句为:deletefromuserwherename=tom。删除数据之后,编号为34的数据页的存储情况如图3所示。图3删除一条记录之后的数据页先来分析数据页头的变化,我们发现23-24字节仍为2,即数据页保存的记录个数仍为2,没有发生变化。29-30字节保存空闲空间大小,这个字段发生了变化,由之前的0x1f66变为0x1f81,两者的差值恰好为删除的那条记录的长度0x1b(十进制27)。数据页头之后保存的是具体的数据记录信息,我们发现这部分内容在删除一条记录之后没有发生任何变化。行偏移表在删除数据之后发生了变化,第1行记录的指针

9、由删除记录之前的0x0060变成了0x0000。这一部分的分析在恢复删除记录工作中至关重要。通过大量的实验我们得出一个结论,SQL Server2000数据表中被删除的数据仍然保存在对应的数据页中,只是对应的行偏移指针变成0,这为我们恢复删除数据提供了必要的条件。2系统设计2.1核心存储结构的设计恢复软件采用vc+6.0开发。首先定义一个链式存储结构COLUMNS_LNode,用来保存数据表的字段名称。name保存unicode编码格式的字段名称,name_length记录name的长度,xtype保存字段类型(例如175代表char、56代表int),xoffset代表字段的起始位置,col

10、umns_length代表字段的长度,colid代表字段序号,next指向下一个字段。struct COLUMNS_LNodechar name200;int name_length;unsigned cha xtype;short int xoffset;unsigned short int olumns_length;unsigned short int colid;struct COLUMNS_LNode*next;接下来定义一个顺序存储结构SqList,用来保存数据库中所有“存在”和“被删除”的数据表。每个数据表的相关信息保存在一个ElemType类型的变量中。下面详细介绍结构体数据类

11、型ElemType。obj_id成员保存数据表的id编号,每个数据表都有唯一的id编号;status成员表示这个数据表的状态,2被删除表;name成员保存unicode编码格式的表名称;type成员表示数据表的类型,S系统表,U用户表,P未知;columns_num成员表示数据表的字段个数;*L_COLUMN指针成员指向保存字段信息的链表;length成员记录链表的长度,即页数;*L_P;指针成员指向链表的头指针,链表中保存数据页信息。struct LNodeunsigned int page_id;struct LNode*next;typedef structunsigned int ob

12、j_id;int status;char name200;。char type;unsigned int columns_num;struct COLUMNS_LNode*L_COLUMN;unsigned int length;struct LNode*L_P;ElemType;typedef struct ElemType*elem;int length;int listsize;SqList;2.2程序的执行流程程序的执行流程,initlist函数负责初始化工作(包括初始化数据链表,连接数据库,等等)。Openfile函数负责找出每一个数据表所对应的数据页号。该函数依次读取出*.mdf文

13、件中的每一个数据页(数据页大小为8KB),然后判断该数据页的类型是否为1(即保存数据记录的数据页),如值为1,则将该数据页编号加入由对象id标识的链表中,如值不为1,则继续读取下一个数据页,直至所有数据页被读取完毕。该函数执行完成后,可以得知每个数据表的数据记录保存在哪些数据页中。程序流程图find_exist函数负责找出“存在”和“被删除”的数据表的名称和数据表的字段信息。sysobjects系统表中包含数据库中所有数据表的相关信息(如表名称),find_exit函数从sysobjects系统表中提取出所有数据表的名称和类型信息。syscolumns系统表中包含数据库中所有数据表的字段信息,

14、find_exit函数从syscolumns系统表中提取出每个字段名称、字段类型、字段序号、字段长度等重要信息。ListChuli_sq函数将“存在”和“被删除”的数据表的名称和字段信息写入顺序存储结构SqList L。之后根据用户的选择,程序进入“被删除”数据记录恢复模块或进入“被删除”数据表恢复模块。2.3删除数据记录恢复模块的设计在设计删除数据记录恢复模块时,我们首先想到的方法是修改被删除记录的行偏移指针,使其重新指向被删除记录同时修改数据页头的相关信息,使其重新符合要求。但经过大量的实际测试,我们发现这种方法不可行。原因在于SQL Server数据库中各种数据之间存在大量的内在关联,在

15、恢复被删除记录时,这些内在关联如不能同时修改则恢复操作就会失败。鉴于上述原因,本文设计了一种比较有效的恢复数据方法,下面以user表为例进行说明(备注:所有操作均为程序自动完成)。1)建立一个名为restor的数据库,在该库中建立一个名称及字段类型与user表完全相同的数据表。2使用insert命令在新建立的user表中插入若干条记录,记录的内容可以随意指定,但新表对应的数据页个数应与原user表的数据页个数相同。3)将原use表对应的数据页一次复制到新表对应的数据页中。4)依次检查每一个复制过来的数据页,如某个数据页中含有被删除记录,则修改行偏移指针使其重新指向被删除记录同时修改数据页头的相

16、关信息,使该数据页重新符合要求。2.4“被删除”数据表的恢复方法当数据表被删除后,其数据记录仍然保存在数据库文件(*.mdf)中,只是对应的数据页被标记为可用空间,新建立的数据表会优先使用这些数据页。如“被删除”数据表对应的数据页没有被占用,则这部分数据是可以恢复的。恢复“被删除”数据表的方法与恢复“被删除”数据记录的前三步完全相同只是第四步变为依次修改每一个复制过来的数据页的头部,使其重新符合要求3软件的测试运行以某公司使用的速达财务软件为测试对象,数据库文件大小为370MB,共有321个数据表。对多个数据表(如ac_account、al_bank)执行删除记录操作,软件可正常恢复出被删除的记录删除数据库中的多个数据表,如执行删除操作之后未建立新表,则可正常恢复被删除的数据表。4总结本文详细分析了SQL Server2000数据页的存储结构以及删除数据记录之后数据页的变化,得到的结论是被删除的数据记录仍然保存在数据页中,可以不依靠日志文件来恢复这

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号