如何在 fn_dblog() 和 sys.dm_tran_database_transactions 中的事务 ID 格式之间进行转换?

Jam*_*olt 4 sql-server database-internals transaction-log

fn_dblog()以这种格式显示交易 ID:

0000:00049d43
Run Code Online (Sandbox Code Playgroud)

sys.dm_tran_database_transactions以这种格式显示交易 ID:

9811233
Run Code Online (Sandbox Code Playgroud)

我相信上面的例子显示了不同格式的相同交易ID。

有没有办法在两种格式之间进行转换?fn_dblog()或者这实际上是两个不同的实体——在这种情况下,是否有办法与交易相关的DMV进行匹配?

Sol*_*zky 5

我不认为 的[Transaction ID]sys.fn_dblog()是您要查找的交易 ID。transaction_id该结果集中与 的列匹配的事务 IDsys.dm_tran_database_transactions[Xact ID]

请尝试以下操作:

查找交易 ID

SELECT *
FROM   sys.dm_tran_database_transactions
WHERE  database_id = DB_ID();
Run Code Online (Sandbox Code Playgroud)

从日志中获取该交易的详细信息

DECLARE @TransactionID NVARCHAR(50);

SELECT @TransactionID = [Transaction ID]
FROM   sys.fn_dblog(NULL, NULL)
WHERE  [Xact ID] = 10450416; -- some [transaction_id] from sys.dm_tran_database_transactions

--SELECT @TransactionID;

SELECT *
FROM   sys.fn_dblog(NULL, NULL)
WHERE  [Transaction ID] = @TransactionID;
Run Code Online (Sandbox Code Playgroud)