代码之家  ›  专栏  ›  技术社区  ›  IordanTanev

读取SQL Server 2005 LDF文件

  •  2
  • IordanTanev  · 技术社区  · 15 年前

    我会尽量详细解释我的问题。在我编写的程序中,我需要读取某个数据库的日志文件内容。我搜索了一下,发现ldf是二进制文件。但我找不到该文件的格式,也找不到任何显示如何读取该文件的教程。我正在用C语言编写程序,但是任何编程语言的例子都会受到极大的赞赏。

    5 回复  |  直到 11 年前
        1
  •  4
  •   Andrew    15 年前

    日志文件的格式不是文档化的,也不是公开的,即使是商业日志阅读器也不会从日志中获取任何信息——他们很可能会对其进行反向工程,或者雇佣了解它的前SQL开发人员。

    在您考虑对物理文件进行解码之前,首先尝试对以下输出进行解码:

    select * from ::fn_dblog(null,null)
    

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

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

        2
  •  3
  •   Iza Pastoor    11 年前

    晚了一点,但希望有用

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

    其他选项使用未记录的函数,如dbcc log和fn_dblog。

        3
  •  2
  •   Rubens Farias    15 年前

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

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

    也许吧 您只需要检查谁进行了一些数据库更新;在这种情况下,您可以使用触发器来登录(到 数据库 表),时间戳和当前用户。

    这个选项比您提议的要简单得多,并且可以以文档化的方式实现。

        4
  •  1
  •   Ardalan Shahgholi    11 年前

    使用这个命令,正如@andrew所说:

    Select * from ::fn_dblog(null,null)
    

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

        5
  •  0
  •   MrTelly    15 年前

    尝试 Sql Log Rescue 来自红门。如果你找到了文件的格式,请告诉我们其他人。