如何从TRANSACTION LOG BACKUP FILE获取SQL语句?

时间:2017-02-09 07:44:32

标签: sql-server transaction-log

我只想问一下SQL Server中的事务日志。我们可以在任何系统位置以.bak格式备份这些日志文件。

问题是从事务日志备份文件中提取SQL语句/查询。我们可以使用fn_dump_dblog函数来完成它。但我们想要的是提取必须在日志中完成事务的查询或数据。

我想手动完成与#34; apex"工具为sql server做。并且不想使用任何第三方工具。

现在我可以从日志中提取table nameoperation type。但仍在搜索SQL语句提取。

1 个答案:

答案 0 :(得分:1)

解码事务日志的内容非常棘手--Apex有理由为执行此操作的工具收取费用 - 要做到这一点需要做很多工作。

事务日志本身是所发生更改的记录,而不是执行更改所执行查询的记录。在您的问题中,您提到提取查询 - 这是不可能的,只能提取数据更改。

对于简单的插入/删除事务,可以对它们进行解码,但这样做的复杂性太大,无法在此详细再现。使用类似的fn_dblog解码日志的简单方案,但其复杂性应该让您知道它有多难。您可以在RowLogContents中提取操作类型+十六进制数据 - 根据操作类型,RowLogContents可以“相对”简单地解码,因为它的格式与页面上二进制/十六进制级别的行相同

我不喜欢使用链接作为示例/答案,但仅仅针对简单场景的解释的长度并非易事。我对链接答案的唯一赎回是它是我的文章 - 所以这也是免责声明。长度和复杂性确实使这个问题无法回答,并得到了肯定的答案!

https://sqlfascination.com/2010/02/03/how-do-you-decode-a-simple-entry-in-the-transaction-log-part-1/ https://sqlfascination.com/2010/02/05/how-do-you-decode-a-simple-entry-in-the-transaction-log-part-2/

已经发布了更多文章,其中建立了这个文章,尝试将此逻辑自动化为t-sql本身。

https://raresql.com/2012/02/01/how-to-recover-modified-records-from-sql-server-part-1/

您尝试编写自己的解码所花费的时间/精力足够高,与许可证的成本相比,我绝不会建议您尝试编写自己的软件来执行此操作,除非您计划出售它。

您可能还希望考虑与应用程序代码的运行一致的替代跟踪机制,而不是您尝试从备份中进行逆向工程。