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


Answers:


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

仅供参考:这FROMDELETE语句中的可选关键字,因此在此不将其包括在匹配谓词中。
乔恩·塞格尔

诚然,删除中的From语句是可选的,我保留它只是为了限制查询的结果。但是,是的,您是对的
AmmarR 2012年

请注意,对于区分大小写的SQL Server实例,上面的代码将丢失deleteDELETE,等等。您可能希望使where子句不区分大小写,例如: WHERE dest.text LIKE '%DELETE %' COLLATE Latin1_General_CI_AS
Max Vernon

11

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

select * from fn_dblog(NULL, NULL) 
where Operation = 'LOP_DELETE_ROWS'

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

了解日志操作非常复杂,您需要了解诸如撤消或补偿操作之类的内容,才能理解可能会遇到的某些日志模式,但是直截了当的已落实DELETE很容易理解。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.