gpt4 book ai didi

sql-server-2008 - 读取 SQL Server 事务日志

转载 作者:行者123 更新时间:2023-12-03 01:30:55 24 4
gpt4 key购买 nike

我们如何读取 SQL Server 事务日志,我知道使用 DBCC 日志(数据库,4),它会生成日志输出,现在我想解码十六进制格式的日志记录。

0x00003E001C000000A500000001000200BE040000000006021D0000000100000018000000(仅部分数据)

有什么方法可以以文本格式读取它或将十六进制数据转换为文本。我想制作一个可以读取日志的工具。可以使用第三方工具,即 ApexSQL,但它们是付费工具。

最佳答案

您可以使用sys.fn_dblog读取事务日志。下面的例子。

SELECT [RowLog Contents 0],
[RowLog Contents 1],
[Current LSN],
Operation,
Context,
[Transaction ID],
AllocUnitId,
AllocUnitName,
[Page ID],
[Slot ID]
FROM sys.fn_dblog(NULL,NULL)
WHERE Context IN ('LCX_MARK_AS_GHOST', 'LCX_HEAP', 'LCX_CLUSTERED')
AND Operation IN ('LOP_DELETE_ROWS', 'LOP_INSERT_ROWS')

对于删除插入操作IIRC,[RowLog Contents 0]包含插入和删除的整行。更新有点复杂,因为只能记录部分行。

要解码此行格式,您需要了解行在 SQL Server 内部的存储方式。本书Microsoft SQL Server 2008 Internals对此进行了一些详细介绍。您还可以下载SQL Server Internals Viewer在这方面提供帮助(我相信 Mark RasmussenOrca MDF 的源代码也可用,其中可能有一些代码来解码内部行格式)。

有关在 TSQL 中执行此操作的示例,请参阅 this blog post这表明只要项目的目标有限,就完全有可能从日志中提取有用的信息。编写一个完整的日志读取器来应对对象中的架构更改以及稀疏列(以及下一版本中的列存储索引)等内容可能会是一项巨大的工作量。

关于sql-server-2008 - 读取 SQL Server 事务日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9014531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com