介绍
Log Explorer 主要用于对 MSSQLServer 的事物分析和数据恢复。你可以浏览日志、导出数据、恢复被修改或者删除的数据 ( 包括执行过 update,delete,drop 和 truncate 语句的表格 ) 。一旦由于系统故障或者人为因素导致数据丢失,它能够提供在线 快速的数据恢复,最大程度上保证恢复期间的其他事物不间断执行 。
他可以支持 SQLServer7.0 和 SQLServer2000, 提取标准数据库的日志文件或者备份文件中的信息。
其中提供两个强大的工具:日志分析浏览 ,对象恢复 。具体功能如下:
l 日志文件浏览
l 数据库变更审查
l 计划和授权变更审查
l 将日志记录导出到文件或者数据库表
l 实时监控数据库事物
l 计算并统计负荷
l 通过有选择性的取消或者重做事物来恢复数据
l 恢复被截断或者删除表中的数据
l 运行 SQL 脚本
产品
LogExplore 包含两部分
l 客户端软件
l 服务器代理
服务器端代理是保存在 SQLServer 主机中的一个只读存储过程,他的作用是接受客户端请求,读取在线事物日志块并通过网络传给客户端软件,由客户端软件来读取这些原始的数据块来完成 Log Explore 所提供的所有功能。
他依赖来的网络协议包括:
l Named Pipe: 局域网中适用
l Tcp/Ip: 广域网中适用
数据库相关介绍
事物日志( Transaction Log )
SQLServer 的每个数据库都包含事物日志,它以文件的形式存储,可以记录数据库的任何变化。发生故障时 SQLServer 就是通过它来保证数据的完整性。
操作( Operation )
操作是数据库中定义的 " 原子行为 " ,每个操作都在日志文件中保存为一条记录。它可以是用户直接输入的 SQL 语句,比如标准的 insert 命令,日志文件中便会记录一条操作代码来标志这个 insert 操作。
事物( Transaction )
事物是一系列操作组成的序列。他可以理解为直观的不可分割的一笔业务,可以执行成功或者失败。典型的事物比如由应用程序发出的具有开启 - 提交功能的一组 SQL 语句。不同的事物靠事物 Id 号( transaction ID )来区分,具有相同 ID 的事物记录的日志也相同。
在线事物日志( Online Transaction Log )
在线事物日志是指当前活动数据库所用的日志。可以通过如下命令来确定其对应文件
Select * from SYSFILES
他的文件后缀名一般是 .LDF
离线事物日志( Offline Transaction Log )
离线事物日志是指非活动数据库所用的日志。当其数据库处于关闭( ShutDown )才状态下可以进行复制备份操作。他的结果同在线事物日志完全相同。
备份文件
备份文件是保存食物日志备份的文件,通常管理员通过运行 SQL 语句或者企业管理器来生成该文件。备份文件的内部结构和事物日志不同,他采用称为 MTF 的格式来保存数据。一个备份文件可以包含一个日志的多组备份 , 甚至包括多个数据库的混合备份 .
设置为自动收缩
企业管理器 -- 服务器 -- 右键数据库 -- 属性 -- 选项 -- 选择 " 自动收缩 "
强烈要求该项不要选中 . 否则 SQLServer 将已循环的方式来覆盖先前的日志记录 , 将会导致 LogExplore 无法恢复错误 .
数据恢复介绍
LogExplore 允许你恢复应为误操作或者程序错误而导致的数据丢失或者更改 . 比如执行 update\Delete 语句时丢失了 where 子句 , 或者错误使用了 Dts 功能 .
LogExplore 不支持直接修改数据库 . 他可以生成事物的逆操作脚本 .
如果 log 是 delete table where ... 的话 , 生成的文件代码就是 insert table ....
你可以通过 SQL 查询分析器 , 或者 LogExplore 的 Run SQL Script 功能来执行生成脚本 .
关于 Undo
Undo 功能可以逆操作一组指定的用户事物。包括 insert , delete 和 update ,其局限性如下:
l 事物类别: LogExplore 只能 undo 用户事物。用户事物是指在用户表上定义的事物,不支持系统表的更新恢复。同时,他也不支持计划变更的回滚。
l Blob 类型:包括 text,ntext,image 类型。 LogExplore 只支持这些类型的 insert 和 delete 恢复,不支持 update 语句恢复。
关于 redo
Redo 功能可以再次运行一组指定事物。它可以在以下情况中用到:
丢失数据库而且没有任何备份文件。
l 如果原始日志文件没有丢失可以通过 Redo 来实现恢复。
l 通过完整备份文件来把数据库恢复到某指定时间点 , 再通过 redo 功能完整恢复。它可以重放 Create Table 和 Create Index 命令,来重新生成被删掉的表,同时也受 blob 字段的限制。
拯救 Dropped/Truncate 命令导致的数据丢失
执行 Drop Table 和 Truncate Table 命令虽然会被 SQLServer 记录到日志文件中,但是并不记录被删除的数据。你可以使用 LogExplore 提供的功能来恢复这些数据。 LogExplore 提供两种机制来恢复被 Drop 或者 Truncate 的数据。
1 、如果你有备份文件可以直接通过备份文件恢复。
2 、通过 LogExplore 提供的方法来恢复。
当执行如上命令时, SQLServer 会将保存数据的页面放入空闲页面列表中。如果此页没有被再次使用则将一直保存原始数据。恢复时, LogExplore 将从空闲页面列表中搜寻没有被再次使用的页面,然后生成一个 SQL 脚本来从这些页面重组原始数据。 LogExplore 可以确定被删掉的原始数据行,并在完成时显示原始行数和实际恢复的行数,由此可以断定是否全部恢复。
SQL 逆操作
1 、 Insert--Delete
2 、 Delete--Insert
3 、 Update
Column1 | Column2 |
A | B |
事物1
Column1 | Column2 |
X | B |
事物2
Column1 | Column2 |
Z | T |
你可以只对事物 1 做逆操作
Column1 | Column2 |
A | T |
注意: 如 果你选中了 'Do not restore column values that have been changed by subsequent modifications' 项,只对事物 1 逆转将不会产生任何结果。
自增序列( IDENTITY Property )
如果被删除数据与有 IDENTITY Property 属性,恢复时 LogExlpore 可以通过 SET IDENTITY_INSERT ON 命令来对插入的数据设置 Identity 属性,并保留原数据不变,也可以对该列付与新值。
数据导出 :
浏览日志时可将数据导出为 xml,html, 或者其他有分隔符的文件 . 也可以指定到一个 SQL 的表中 .
操作指南
Attaching to a Log: 在所有操作之前必须添加日志文件 ,
l 可以用普通的 SQL 登录方式添加在线日志 (Online Log),
l 直接选择 LDF 文件来添加离线日志 (OffLine Log)
l 添加备份文件
登录之后界面
功能介绍:
1、 Log Summary
日志文件的概要信息。
2、 Load Analysis
列出指定时间范围内的一些事物,用户和表载入的概要信息。
3、 Filter Log Record
日志过滤设置。支持过滤条件包括:时间、操作类型、表、用户、 SPID 、搜索深度、 Dropped 表项以及登录设置和应用程序设置
4、Browse
日志浏览,核心模块。
1、 View Log 功能:
列表如图,可以用 TransID 来区分事物并用不同颜色标识。工具栏的按钮是一些基本查询操作。鼠标右键弹出菜单中有 Undo Transaction 和 UndoOperation 可以恢复黑色箭头选中的事物或者操作项。
Real-Time Monitor :
实时监控事物日志,通过轮询来实现。可以暂停或者停止监控,可以更改轮询周期。
相关 DML 语言和 DDL 语言可以在 Row Revision History 、 Row Transaction History 以及 View DDL Commands 来查询。
2、 Export Log Report
包括 Export To SQL 和 Export To File, 根据向导即可完成。
3、 其余菜单: Undo,Redo,Salvage Dropped/Truncated data,Restore 以及 Run SQL Script 前面已经叙述过,可以根据其向导完成。
请注意如果数据库采用简单日志,Log Explorer就没用了。