2015-05-02 82 views
1

我在SQL Server數據庫中遇到了一個奇怪的情況。我發現很少有開發人員在多個表中隨機刪除/更新數據。 SQL Server中是否存在任何機制來捕獲所有信息,例如誰刪除了記錄或誰更新了記錄ext?如何跟蹤刪除數據的SQL Server中的登錄詳細信息

詳情:

Microsoft SQL Server 2012 - 11.0.2100.60 (X64) 
Copyright (c) Microsoft Corporation 
Standard Edition (64-bit) on Windows NT 6.1 <X64> 
     (Build 7601: Service Pack 1) (Hypervisor) 

回答

1

您可以檢索這些類型的數據從事務日誌(fn_dblog)。

數據庫的便箋恢復模型(simplefull)定義了事務處理可能會在您的日誌文件中保留多久。

DECLARE @TableName sysname 
SET @TableName = 'schema.tableName' -- Make sure to include schema e.g: dbo.tableName 

SELECT su.[name] AS UserName 
     ,CASE logs.Operation 
      WHEN 'LOP_DELETE_ROWS' THEN 'Deleted' 
      WHEN 'LOP_MODIFY_ROW' THEN 'Updated' 
     END AS [Transaction Type] 
    ,fl.[Begin Time] AS [Transaction Begin] 
FROM fn_dblog(NULL, NULL) AS fl 
INNER JOIN (SELECT [Transaction ID] 
        ,Operation 
      FROM fn_dblog(NULL, NULL) 
      WHERE AllocUnitName LIKE @TableName + '%' 
      AND (Operation = 'LOP_DELETE_ROWS' OR Operation = 'LOP_MODIFY_ROW') 
      ) AS logs ON logs.[Transaction ID] = fl.[Transaction ID] 
INNER JOIN sysusers AS su ON su.[sid] = fl.[Transaction SID] 

您可以輕鬆地擴展此查詢到包括所有的表

+0

感謝查詢,我們的數據庫是簡單恢復模式。我無法使用上述查詢跟蹤對錶進行的更改。有沒有其他方法來跟蹤這些信息? –

+1

您仍然可以在短時間內使用此查詢。這樣做的另一種方式是在插入或更新之後創建觸發器並運行它們,並將結果存儲在審計表中。 – sqluser