我正在查看 sys.fn_dump_dblog,我可以看到记录的旧状态,但看不到哪些用户正在执行操作。SPID、事务 SID 列始终为空,如何修复它或任何选项?
我正在使用 SQL Server 2016。
我的查询:
SELECT
*
FROM sys.fn_dump_dblog(NULL, NULL, NULL, 1, 'E:\LogBackup\blabla.trn', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
WHERE (
[operation] IN ('LOP_INSERT_ROWS', 'LOP_DELETE_ROWS', 'LOP_MODIFY_ROW')
AND (
([context] IN ('LCX_HEAP', 'LCX_CLUSTERED', 'LCX_MARK_AS_GHOST'))
OR ([context] = 'LCX_TEXT_MIX'
AND (DATALENGTH([RowLog Contents 0]) IN (0, 14, 28)))
)
AND [PartitionID] IN (72057595034533888)
)
OR ([operation] = 'LOP_HOBT_DDL')
通过参考@Kin,我已经解决了查询问题。
事务日志不是为了跟踪谁在您的数据库中做了什么而设计的。如果您需要审核 SQL Server 上的用户行为,请使用SQL Server 审核。
您也可以使用扩展事件,但正如 Nic 在这个答案中指出的那样,审计更适合这种情况。
如果您不想使用审计(明确地说,我建议审计,因为它会解决您遇到的问题而无需手动读取事务日志),您可以在表上创建触发器来监视用户活动,但那是需要做更多的工作并且容易出现错误。
使用审计。