MDFVIEW和LDFVIEW操作简介
程序基本功能:
MDFVIEW:
1、 从损坏的MDF浏览和提取表数据。
2、 Drop table,truncate table ,delete from语句误操作的数据恢复。
LDFVIEW:
3、 MSSQL日志分析和浏览,数据修改寻踪。
4、 通过日志恢复误delete和update 的表数据
(程序直接读取MDF和LDF二进制格式文件,为防止文件访问冲突,必须先停止SQL服务或分离数据库, 或访问数据库文件的复制件)
程序打开后,显示如下:
程序支持中英文,默认是英文。其他国家用户可以通过点击<translate into my language>进入翻译窗口,可以将语言翻译成自己国家对应的语言。
中文用户直接选 <中文>单选按钮语言,然后根据自己的需要点<MDFVIEW>按钮或<LDFVIEW>按钮分别进入不同的功能程序。
一、MDFVIEW 使用方法(chinese)
在开始窗口,用户选择点<MDFVIEW>按钮后,程序显示如下:
从损坏的MDF提取表数据:
1、点《1打开正常或损坏的MDF文件》, 选择需要处理的MDF文件
2、单击按钮《浏览表》,显示所有对象 ,单选<只显示用户表> 则只显示用户表
3、单击列表里需要恢复的表,浏览该表数据
4、如果表记录超过5000,则单击按钮《下一个5000行》,继续显示该表数据
5、单击按钮《导出表脚本》,生成表脚本
6、单击按钮《导出表数据》,生成表数据脚本(insert into 语句集)或直接导入到你选择的数据库
在导出数据会要求输入校验码,提示如下:
用户告诉我们本机码(如图157557378),我们告诉用户对应的校验码.
用户输入正确的校验码后,显示如下:
用户可以选择导成insert语句脚本,或直接导到数据库里。(建议客户直接导到数据库里,因为导脚本不支持大对象如text,ntext,image 或max类型的字段。如果导数据库,用户可以新建个临时的空数据库,程序导的时候会自动建表和导数据)。
用户导数据库则选‘否’,程序显示如下:
输入需要导入数据的MSSQL服务器名称,数据库名称,然后点确定,连接上数据库后,程序开始导入数据。
7、用户也可以选择导出所有表和数据,用户选主界面中的<导出所有>按钮,程序会从用户选中的表开始一直导到最后一个表。(如果用户选择第一个表,然后点<导出所有>按钮,则相当于导出所有表和数据)。
行删除恢复:
前三步和第一个功能步骤一样。选中一个表后,点《行删除恢复》,显示该表曾经删除过的数据(尚未被覆盖的)。其他导出操作与上一样。
行删除恢复要求误操作后数据库文件没有大的变动,防止覆盖删除的数据,此时应首选LDFVIEW来通过日志恢复
表删除恢复:
前两步和第一个功能步骤一样。点《表删除恢复》,按操作输入被删除的表名,点确定后程序会显示删除表的数据,如果找不到,则可能覆盖后部分信息丢失,此时只有通过特殊情况特殊处理来找回丢失的表数据。
二、LDFVIEW使用方法(chinese)
在开始窗口,用户选择点<LDFVIEW>按钮后,首先打开一个mdf文件(MSSQL数据文件)和对应的LDF文件(MSSQL日志文件),然后点击《2浏览日志》,程序会显示日志内容,所有日志块数量, 日志开始时间和结束时间
程序显示如下:
说明:
这地方表示该库所有日志块数量173,目前显示的是0-57的编号的日志块,点按纽<next>则表示从58序号开始接着显示。(用户可直接输入日志块编号,从而从该日志块号开始浏览日志)。
日志过滤:
日志过滤提供时间段和表对象过滤,时间段默认显示的是该日志的开始时间和结束时间。用户可以通过设定时间或选择表,然后点过滤,则会显示过滤的日志记录, (注意:过滤采用包含位置显示,一般是目标日志块范围确定后,头尾各扩展3-5个日志块为新范围,然后从新范围的第一个日志块开始显示,所以很多时候,过滤后显示的第一个日志记录显示的时间要早于设定的开始时间,拖动滚动条往下一点才看到开始于设定时间的日志记录。)
对于日志中insert,delete,update 的语句日志,点击该记录会详细显示对应的数据信息。
对日志记录右键则弹出菜单如下:
说明如下:
Jump to transaction begin :跳转到该事务开始记录(lop_begin_xact)的日志块开始浏览
View deleted data of transaction:显示表格中当前显示的日志记录对应的删除数据。
View update data of transaction: 显示表格中当前显示的日志记录对应的更新数据。
LDFVIEW恢复SQL2008表数据误删除示例:
客户情况介绍:客户技术人员误delete操作,在2013年8月26号9点到11点之间执行delete操作(具体时间客户也不能确定,只能确定个范围),由于where 条件写错,导致表wl_stock_have删除了不该删除的数据,客户希望找回表wl_stock_have中被误删除的数据。
客户已经把MDF文件和LDF文件发过来了。
LDFVIEW恢复过程如下:
一、进入LDFVIEW程序,选择数据库对应的MDF和LDF文件,然后点击《2浏览日志》,程序会显示日志内容,所有日志块数量, 日志开始时间和结束时间
程序显示如下:
界面说明如下:
1、日志过滤里面显示了库的所有表的信息和该库日志的开始时间和结束时间
上面表示该用户数据库的日志开始时间是2013-08-23 21:52:16
结束时间是2013-09-16 19:03:34
(如果误操作时间不在该时间段内,说明日志被截断或重建,无法通过日志恢复数据)
2、显示了该数据库日志块总数量和即将浏览的日志块序号(也就是当前表格已经解吸显示的最后一个日志块的下一个日志块)
客户数据库目前共198个日志块,当前解析显示的是0-57号日志块(点next按钮将从58号开始浏览下一个一万行左右的日志记录)。
3、当前0-57号日志块的日志记录
表格每次显示大约10000条日志记录。
关键字段说明:
Curlsn:日志记录序号
Operation:操作类型(有很多种,我们要找的是LOP_DELETE_ROWS)
Transid:事务ID(比如一个delete操作会删除很多条记录,产生很多条日志,所有日志全同一个事务ID)
Begin time: 事务开始时间
Action:事务操作说明:比如(delete ,update,insert等)
二、开始恢复
1、直接选日志过滤的时间过滤,对单选框时间段打勾,把开始时间修改为2013-08-26 09:00:00
2、点过滤,显示如下:
过滤采用包含位置显示,一般是目标日志块头尾各扩展3-5个日志块开始显示。(所以日志显示第一条记录时间为2013-08-23 21:52:17 早于2013-08-26 09:00:00)。显示大约10000条后,最后结束日志块为112(113-1)。
拖动日志显示表格的滚动条。可以看到中间有大于2013-08-26 09:00:00的日志记录(时间为2013-09-26 10:09:18)。
继续往下拖动滚动条,可以看到如下日志记录
这些日志记录的operation为LOP_DELETE_ROWS
ACTION:DELETE 说明是个delete语句执行事务
BEGIN TIME 2013-08-26 10:09:29
点击其中的一条日志记录3888行,下面的数据表格没内容
再点击3889行,下面的数据表格显示如下:
其中数据表格内容为:
表示3889行日志记录对应为表wL_stock_Have表中的一行,行内容在表格中。
再点3890行,数据表格无内容,再点3891行,数据表格无内容,再点3892行,显示如下:
(补充说明:该表有多个索引,每删除一行数据记录,删除两索引数据行)。
分析这可能是用户的误操作事务,把数据表格截图给用户确认,用户确认是被误删除的数据行。因此确定该记录对应事务(事务ID为:00001D0EA8B5)就是用户误操作的delete事务
3对日志记录右键则弹出菜单如下:
点《jump to transaction begin》跳到事务开始的日志块浏览,显示如下:
点<确定>,显示:
可以看到第一条日志记录(有时不一定是第一条,可能往下几条后):
OPERATION: LOP_BEGIN_XACT 表示开始事务
ACTION:DELETE 表示执行delete 操作
此记录就是该事务第一条日志记录。
4、 显示所有删除的表数据记录
上图2,4,6,8等行的OPERATION为LOP_DELETE_ROWS,是单行删除记录
点2行,数据表格无内容(索引删除日志),再点4行,数据表格无内容(索引删除日志),再点6行,数据表格显示如下:
说明6行是表的数据行删除日志记录,对该行右键则弹出菜单如下:
点《view delete data of transaction》显示表格中当前显示的日志记录对应的删除数据,显示如下:
此数据表格中显示的就是当前日志表格中大约10000条日志记录对应的删除数据(注意10000多条日志记录并不是每条是表的行数据删除日志)。