2015-05-02 1 views
1

Я столкнулся с странной ситуацией в SQL Server db. Я вижу, что немногие разработчики случайно удаляют/обновляют данные по нескольким таблицам. Есть ли какой-либо механизм выходит в 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).

Только модель восстановления базы данных (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] 

Вы можете легко расширить этот запрос, чтобы включить все таблицы

+0

Спасибо за запрос, наш дб в простой модели восстановления. Я не могу отслеживать изменения, внесенные в таблицу, используя указанный выше запрос. Есть ли другие способы отслеживания информации? –

+1

Вы все еще можете использовать этот запрос, но на короткий период времени. Другой способ сделать это - запустить триггеры и запустить их после вставки или обновления и сохранить результат в таблице аудита. – sqluser