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

mad*_*ddy 5 sql-server transaction-log

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

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

我想手动执行,就像sql server的"apex"工具一样.并且不想使用任何第三方工具.

现在我能提取table nameoperation type原木.但仍在搜索SQL语句提取.

And*_*rew 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/如何解码交易日志部分2中的简单条目/

在此基础上还发表了更多文章,尝试将此逻辑自动化到 t-sql 本身中。

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

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

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