查看事务日志中的删除语句

Nei*_*ght 12 sql-server sql-server-2008-r2 transaction-log

是否可以查看delete事务日志中最近发生的语句?

Rem*_*anu 11

您可以通过查找仍在日志中的 LOP_DELETE_ROWS 操作来查看已删除的各个行:

select * from fn_dblog(NULL, NULL) 
where Operation = 'LOP_DELETE_ROWS'
Run Code Online (Sandbox Code Playgroud)

如果日志被回收(在简单恢复模式下)或被备份截断(在完整或批量恢复模式下),那么您将只能看到日志中仍然可用的日志操作。

理解日志操作非常复杂,您需要了解诸如撤消或补偿操作之类的事情以理解您可能遇到的一些日志模式,但直接提交的 DELETE 相当容易理解。


Amm*_*arR 11

您不会找到在 sql 上执行的确切脚本。(在事务日志中)

事务日志是一个文件,其中包含有关对数据库所做的每个更改的信息。这包括数据修改(事务)、数据库修改和备份/恢复事件。

事务日志的主要目的是提供一种方法,能够在必要时将数据库恢复到某个时间点。这可以包括将事务回滚到特定时间,或从完整备份恢复中前滚事务。

了解更多关于事务日志 http://www.sqlservercentral.com/articles/Design+and+Theory/63350/

这是一个脚本,可向您显示最近运行的删除查询

SELECT deqs.last_execution_time AS [Time], dest.TEXT AS [Query]
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
where dest.TEXT like '%Delete%from%'
ORDER BY deqs.last_execution_time DESC
Run Code Online (Sandbox Code Playgroud)