阅读SQL Server 2005 ldf文件

时间:2010-01-17 08:59:57

标签: c# sql-server

我将尝试详细解释我的问题。在我正在编写的程序中,我需要读取某个数据库的日志文件的内容。我google了一下,发现ldf是二进制文件。但我无法找到该文件的格式或任何教程显示如何阅读此文件。我正在用C#编写程序,但任何编程语言的例子都将受到高度赞赏。

5 个答案:

答案 0 :(得分:4)

日志文件的格式没有记录,也没有公开,即使商业日志阅读器也不会从日志中获取所有内容 - 他们很可能会对其进行逆向工程,或者聘请了解它的前SQL开发人员。 / p>

在关注物理文件解码之前,先尝试解码输出:

select * from ::fn_dblog(null,null)

这将为您提供日志的格式化输出和字段中的日志二进制数据 - 即使这对解码也不是一件容易的事。除了日志文件格式之外,您还必须非常了解SQL本身才能正确理解条目。

总体而言 - 我认为你最好购买一个现有的商业软件包,因为如果你需要询问格式 - 你对SQL的内部知识不太可能足够好。

答案 1 :(得分:3)

迟到但希望有用...

您可能需要尝试使用日志阅读API ApexSQL Log API。这是一个商业工具,但它有免费试用。

其他选项使用未记录的函数,例如DBCC LOG和fn_dblog。

答案 2 :(得分:2)

我不明白为什么你需要实现这个,但至少看起来是错的。

实现每个DBMS是为了让您远离文件系统,因为它应该处理操作系统细节并提供并发性。如果您尝试从正在运行的数据库中读取该LDB,您将在某个不支持它的地方添加权重。

也许您只想查看谁进行了一些数据库更新;在这种情况下,您可以使用触发器记录(进入常规的数据库表),时间戳和当前用户。

此选项远比您提议的更简单,并且可以以文档化的方式实现。

答案 3 :(得分:1)

使用此命令作为@Andrew Said:

Select * from ::fn_dblog(null,null)

有关详细信息,请参阅此链接:How Do You Decode A Simple Entry in the Transaction Log

答案 4 :(得分:0)

从RedGate尝试Sql Log Rescue。如果您确实找到了文件的格式,请让我们其他人知道。