Аудит изменений данных в SQL Server 2008 - PullRequest
2 голосов
/ 01 августа 2011

Я пытаюсь найти высокоэффективный метод аудита изменений данных в таблице. В настоящее время я использую триггер, который просматривает таблицы INSERTED и DELETED, чтобы увидеть, какие строки изменились, и вставляет эти изменения в таблицу Audit.

Проблема в том, что это оказывается очень неэффективным (очевидно!). Вполне возможно, что при одновременной вставке в базу данных 3 тыс. Строк (что не является необычным) потребуется 215 тыс. Строк для проверки этих строк.

Каков разумный способ аудита всех этих данных без необходимости их длительного добавления в базу данных? Это должно быть быстро!

Спасибо.

Ответы [ 4 ]

4 голосов
/ 01 августа 2011

Правильно написанный триггер должен быть достаточно быстрым.

Вы также можете посмотреть на Изменить захват данных

Я довольно часто использую АвтоАудит :

AutoAudit - это утилита Code-Gen для SQL Server (2005, 2008, 2012), которая создает Следы аудита отслеживаются с помощью:

Created, CreatedBy, Modified, ModifiedBy и RowVersion (увеличение INT) столбцы таблицы

Вставить событие, зарегистрированное в таблице аудита

Обновляет старые и новые значения, занесенные в таблицу аудита. Удалить все журналы. окончательные значения в таблице аудита

просмотр для восстановления удаленных строк

UDF для реконструкции истории строк

Триггер аудита схемы для отслеживания изменений схемы

Re-code-gens срабатывает, когда Alter Table меняет таблицу

Обновление : (Исходное редактирование было отклонено, но я его снова добавляю):

Крупное обновление до версии 3.20 было выпущено в ноябре 2013 года со следующими добавленными функциями:

  • Обрабатывает таблицы, содержащие до 5 столбцов PK

  • Повышение производительности на 90% быстрее, чем версия 2.00

  • Улучшен поиск исторических данных UDF

  • Обрабатывает имена столбцов / таблиц, для которых требуется квотим []

  • Процесс архивирования для уменьшения / ускорения оперативных таблиц аудита и сохранения более старых данных в архивных таблицах AutoAudit

1 голос
/ 19 октября 2016

Уведомления SQL Server об обновлении вставки удалить изменение таблицы

Компонент SqlTableDependency C # предоставляет низкоуровневую реализацию для получения уведомлений базы данных, создавая очередь SQL Server и Service Broker.

Взгляните на http://www.sqltabledependency.it/

При любом изменении записи обработчик события SqlTableDependency получит уведомление, содержащее измененные значения записи таблицы, а также DML - вставка, обновление, удаление - изменение, выполненное в вашей таблице базы данных.

1 голос
/ 28 января 2014

Как уже упоминалось другими, вы можете использовать функции захвата данных изменений, отслеживания изменений и аудита в SQL Server, но для простоты и использовать одно решение для отслеживания всех операций SQL Server, включая эти операции DML, я предлагаю попробовать ApexSQL Comply.Вы можете отключить все остальные и оставить только опцию аудита DML. Он использует централизованное хранилище для собранной информации о нескольких экземплярах SQL Server и их базах данных.

Лучше всего сначала прочитать эту статью, а затем принять решение об использовании этого инструмента: http://solutioncenter.apexsql.com/methods-for-auditing-sql-server-data-changes-part-9-the-apexsql-solution/

0 голосов
/ 01 августа 2011

Вы можете разрешить самопроверку таблицы, добавив дополнительные столбцы, например:

Для INSERT - это новая запись, и ее существование в таблице - это сам аудит.

УДАЛЕНИЕ - вы можете добавлять столбцы, например IsDeleted BIT \ DeletingUserID INT \ DeletingTimestamp DATETIME, к своей таблице.

С помощью ОБНОВЛЕНИЯ вы добавляете столбцы, например IsLatestVersion BIT \ ParentRecordID INT, для отслеживания изменений в версии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...