您可以檢索這些類型的數據從事務日誌(fn_dblog
)。
數據庫的便箋恢復模型(simple
或full
)定義了事務處理可能會在您的日誌文件中保留多久。
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]
您可以輕鬆地擴展此查詢到包括所有的表
感謝查詢,我們的數據庫是簡單恢復模式。我無法使用上述查詢跟蹤對錶進行的更改。有沒有其他方法來跟蹤這些信息? –
您仍然可以在短時間內使用此查詢。這樣做的另一種方式是在插入或更新之後創建觸發器並運行它們,並將結果存儲在審計表中。 – sqluser