跟踪SQL Server上的删除

时间:2016-01-15 08:05:07

标签: sql-server

我打算跟踪在恢复模型简单的SQL Server数据库上执行的删除操作。

当数据库处于此模式时,是否会记录此类操作?

1 个答案:

答案 0 :(得分:2)

您可以通过多种方式实现目标。如果你想要,你可以从sql server事务日志中读取删除操作,但是你将"松散"如果您处于完全恢复模型,则在每个事务日志备份之后。在简单恢复模型中,您无法控制事务日志内容。

要查找特定表的删除操作,可以使用以下查询:

DECLARE @MonitoredTable sysname
SET @MonitoredTable = 'YouTable'

SELECT
    u.[name] AS UserName
    , l.[Begin Time] AS TransactionStartTime
FROM
    fn_dblog(NULL, NULL) l
INNER JOIN
    (
    SELECT
        [Transaction ID]
    FROM 
        fn_dblog(NULL, NULL) 
    WHERE
        AllocUnitName LIKE @MonitoredTable + '%'
    AND
        Operation = 'LOP_DELETE_ROWS'
    ) deletes
ON  deletes.[Transaction ID] = l.[Transaction ID]
INNER JOIN
    sysusers u
ON  u.[sid] = l.[Transaction SID]

您可以使用的另一种方法是编写"审核触发器"或者您可以直接使用sql server审核功能/ Sql server扩展事件以及此Apex网页中的说明:

SQL Server database auditing techniques