2016-01-15 77 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()是一個未記錄的功能 –