2016-01-15 72 views
0

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

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

+2

您可以使用触发器。 – i486

+1

您可以使用谷歌 –

+0

您可以使用SQL Server更改数据捕获或更改跟踪 - https://msdn.microsoft.com/zh-CN/library/bb933994.aspx –

回答

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扩展事件在该顶点网页以及解释:

SQL Server database auditing techniques

+0

请注意fn_dblog()是一个未记录的功能 –