`
zhangziyangup
  • 浏览: 1138381 次
文章分类
社区版块
存档分类
最新评论

查看SQL Server日志 Part 1

 
阅读更多

曾经有朋友问我数据被删除了,不借助第三方工具能不能查是什么时候发生的。 SQL Server提供了一个undocumented的函数fn_dblog可以让我们查看活动的transaction log。

语法如下:

::fn_dblog(@StartingLSN,@EndingLSN)

如果参数都为NULL默认是抓取所有的交易信息。

使用这个函数我们可以查询DML,DDL信息,比如数据删除,修改更新等等。下面我们来看一个数据更新的例子:

create table test(namevarchar(10))

--插入条数据

insert into testvalues('allen test')

go 5


---查询对表Test的修改

select [Transaction Name],Operation,AllocUnitId,AllocUnitName,[Begin Time]fromfn_dblog(null,null)

where AllocUnitName ='dbo.test'andOperation='LOP_INSERT_ROWS'

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

NULLLOP_INSERT_ROWS72057594040090624 dbo.test NULL

NULLLOP_INSERT_ROWS72057594040090624 dbo.test NULL

NULLLOP_INSERT_ROWS72057594040090624 dbo.test NULL

NULLLOP_INSERT_ROWS72057594040090624 dbo.test NULL

NULLLOP_INSERT_ROWS72057594040090624 dbo.test

--删除表

drop table test

----Log中查询对表的删除

select [Transaction Name],Operation,AllocUnitId,AllocUnitName,[Begin Time]fromfn_dblog(null,null)

where [Transaction Name] = 'DROPOBJ'

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

DROPOBJLOP_BEGIN_XACT NULL NULL

--查询Page Split

select Operation, AllocUnitName,COUNT(*)asNumberofIncidents

from ::fn_dblog(null,null)

where Operation =N'LOP_DELETE_SPLIT'

group byOperation, AllocUnitName

注意:从fn_dblog 查出来的LSN是不能直接作为参数的,需要将16进制转化为numeric:

The LSN we havefrom the log dump above is 0000009d:0000021e:0001.To convert it:

  • Take the rightmost 4 characters (2-byte log record number) and convert to a 5-character decimal number, including leading zeroes, to get stringA
  • Take the middle number (4-byte log block number) and convert to a 10-character decimal number, including leading zeroes, to get stringB
  • Take the leftmost number (4-byte VLF sequence number) and convert to a decimal number, with no leading zeroes, to get stringC
  • The LSN string we need is stringC + stringB + stringA

So0000009d:0000021e:0001 becomes '157' + '0000000542'+ '00001' ='157000000054200001'.(来自SQLSkills)

可以参考下面的脚本:

DECLARE @pageID$ NVARCHAR(23), @pageIDNVARCHAR(50), @sqlCmdNVARCHAR(4000);

SET @pageID$ ='0001:0000004d' --- PageID

SELECT @pageID =

CONVERT(VARCHAR(4),CONVERT(INT,CONVERT(VARBINARY,

SUBSTRING(@pageID$, 0, 5), 2)))

+ ',' +

CONVERT(VARCHAR(8),CONVERT(INT,CONVERT(VARBINARY,

SUBSTRING(@pageID$, 6, 8), 2)))

---查看Page内容

SET @sqlCmd = 'DBCC PAGE (''Crack_Me'','+ @pageID + ',3) WITH TABLERESULTS'

EXECUTE(@sqlCmd)

另外这个函数只能对当前活动的Log生效,如果Log备份之后就无法读取了,我们需要用另外一个函数(fn_dump_dblog)从备份中读取。上面也只是能够看到数据被修改,但是无法做到恢复数据。

目前网上有人做了一些脚本可以实现恢复,我现在正在做测试,如果能够成功的话后面会把脚本发出来。

分享到:
评论

相关推荐

    SQL.Server.2008管理员必备指南.part1.rar(1/4)

     第1章 SQL Server 2008管理概况 3  1.1 SQL Server 2008与硬件 4  1.2 SQL Server 2008的版本 6  1.3 SQL Server和Windows 8  1.3.1 SQL Server的服务 8  1.3.2 SQL Server登录和身份验证 9  1.3.3 SQL ...

    SQL Server 2008管理员必备指南(超高清PDF)Part1

    7.2.1 在SQL Server Management Studio中查看数据库的信息 7.2.2 使用T-SQL查看数据库信息 7.2.3 检查系统和示例数据库 7.2.4 检查数据库对象 7.3 创建数据库 7.3.1 在SQL Server Management Studio中创建数据库 ...

    SQL Server 2008管理员必备指南(超高清PDF)Part3

    7.2.1 在SQL Server Management Studio中查看数据库的信息 7.2.2 使用T-SQL查看数据库信息 7.2.3 检查系统和示例数据库 7.2.4 检查数据库对象 7.3 创建数据库 7.3.1 在SQL Server Management Studio中创建数据库 ...

    SQL Server 2008管理员必备指南(超高清PDF)Part2

    7.2.1 在SQL Server Management Studio中查看数据库的信息 7.2.2 使用T-SQL查看数据库信息 7.2.3 检查系统和示例数据库 7.2.4 检查数据库对象 7.3 创建数据库 7.3.1 在SQL Server Management Studio中创建数据库 ...

    SQL Server数据库开发实例精粹part2

    综上所述,"SQL Server数据库开发实例精粹part2"是数据库开发者和管理员的宝贵资源,它提供了深入的理论知识和实践技巧,帮助读者更好地理解和应用SQL Server的各种特性,实现高效、稳定且安全的数据库解决方案。...

    SQL.Server.2008管理员必备指南.part2.rar(2/4)

     第1章 SQL Server 2008管理概况 3  1.1 SQL Server 2008与硬件 4  1.2 SQL Server 2008的版本 6  1.3 SQL Server和Windows 8  1.3.1 SQL Server的服务 8  1.3.2 SQL Server登录和身份验证 9  1.3.3 SQL ...

    sqlserver 数据库备份

    TO DISK = 'D:\Backup\NorthwindCS_20110721_Part1.bak', DISK = 'D:\Backup\NorthwindCS_20110721_Part2.bak'; ``` **参数说明:** - `DISK`:指定多个备份介质。 ##### 3. 镜像备份(Mirror Backup) 镜像备份...

    编写安全的SQL Server扩展存储过程

    在SQL Server中,扩展存储过程(Extended Stored Procedures)是一种增强数据库功能的方法,它允许开发者创建自己的函数、存储过程和数据类型,这些功能是通过Windows动态链接库(DLL)实现的。编写安全的SQL Server...

    SQL Server 2005的PPT[Part 1]

    这部分内容会深入解析SQL Server 2005的启动过程,包括启动参数、服务账户设置、初始化文件、日志文件以及系统数据库的加载顺序等。理解这些细节有助于诊断和解决启动问题,优化数据库启动时间和性能。 通过这五讲...

    SQL.Server.2008编程入门经典(第3版).part1.rar

    14.2 SQLServer日志的工作方式 14.2.1 失败和恢复 14.2.2 隐式事务 14.3 锁和并发 14.3.1 通过锁可以防止的问题 14.3.2 可以锁定的资源 14.3.3 锁升级和锁对性能的影响 14.3.4 锁定模式 14.3.5 锁的兼容性 14.3.6 ...

    SQL.Server.2008编程入门经典(第3版).part2.rar

    14.2 SQLServer日志的工作方式 14.2.1 失败和恢复 14.2.2 隐式事务 14.3 锁和并发 14.3.1 通过锁可以防止的问题 14.3.2 可以锁定的资源 14.3.3 锁升级和锁对性能的影响 14.3.4 锁定模式 14.3.5 锁的兼容性 14.3.6 ...

    SQL Server 2008编程入门经典(第3版)

    14.2 SQLServer日志的工作方式 14.2.1 失败和恢复 14.2.2 隐式事务 14.3 锁和并发 14.3.1 通过锁可以防止的问题 14.3.2 可以锁定的资源 14.3.3 锁升级和锁对性能的影响 14.3.4 锁定模式 14.3.5 锁的兼容性 14.3.6 ...

    SQL.Server.2008管理员必备指南.part4.rar(4/4)

     第1章 SQL Server 2008管理概况 3  1.1 SQL Server 2008与硬件 4  1.2 SQL Server 2008的版本 6  1.3 SQL Server和Windows 8  1.3.1 SQL Server的服务 8  1.3.2 SQL Server登录和身份验证 9  1.3.3 SQL ...

    SQL Server 2005 程序设计电子教案 part 2

    《SQL Server 2005程序设计电子教案 part 2》是针对数据库管理和开发的一份珍贵教育资源,尤其适合初学者和有一定基础的开发人员。这份教程出自知名的IT培训机构NIIT博睿,旨在深入讲解SQL Server 2005的核心概念和...

    T-SQL编程入门经典(涵盖SQL Server 2008 & 2005)part3.rar

    通过学习《T-SQL编程入门经典》part3的内容,读者将能够掌握T-SQL的核心概念和技术,从而更好地管理和维护SQL Server数据库,提升数据库开发和管理的技能。这本书对于希望在SQL Server环境中进行数据库开发和管理的...

    SQL.Server.2008管理员必备指南.part3.rar(3/4)

     第1章 SQL Server 2008管理概况 3  1.1 SQL Server 2008与硬件 4  1.2 SQL Server 2008的版本 6  1.3 SQL Server和Windows 8  1.3.1 SQL Server的服务 8  1.3.2 SQL Server登录和身份验证 9  1.3.3 SQL ...

    零基础学SQL.Server.2005电子教程(part2).rar

    《零基础学SQL Server 2005电子教程(part2)》是一个针对初学者的教育资源,旨在帮助用户从零开始掌握SQL Server 2005的基本操作和概念。这个教程的第二部分可能涵盖了数据库管理系统的基础知识,SQL语言的应用,...

    完全手册C# 2005+SQL Server数据库与网络开发.part1

    1. **SQL Server安装与配置**:如何安装和设置SQL Server,包括数据库引擎、Management Studio等。 2. **数据库设计**:实体关系模型(ER模型),表的创建、字段定义、主键和外键约束等。 3. **SQL语言**:包括DDL...

    SQL Server 2000 开发人员指南.7z

    此资源包含三个部分,分别是part1-2.pdf、PART3.pdf和FY.pdf,它们合起来构成了完整的指南内容。 SQL Server 2000是微软公司推出的一款关系型数据库管理系统(RDBMS),在当时具有广泛的应用。作为开发人员,理解其...

    SQL Server 2000 DTS Step by Step

    在提供的压缩包文件中,"msp - ms sql server 2000 dts step by step.part20.rar"至"msp - ms sql server 2000 dts step by step.part22.rar"可能是该教程的连续部分,包含详细章节、示例代码或练习文件。...

Global site tag (gtag.js) - Google Analytics