Как лучше всего регистрировать все операции пользовательских запросов: (вставляет, обновляет, удаляет в Sql Server 2008? - PullRequest
3 голосов
/ 18 января 2011

У меня есть база данных с 50 таблицами, и я хочу регистрировать запросы пользователей, такие как вставки, обновления или удаления для всех таблиц в базе данных.Я также могу создать триггер для этого для каждого типа запроса.

Каков наилучший способ сделать это с точки зрения производительности или есть лучший способ отследить это?

Ответы [ 3 ]

3 голосов
/ 18 января 2011

Вы также можете создавать таблицы аудита, которые заполняются триггерами (и которые обеспечивают гораздо большую гибкость, чем сбор данных изменений).Важным компонентом является сбор наборов данных, а не попытка работать строка за строкой.Да, это добавляет издержки, но если вы правильно напишите триггеры, это не так уж много.Обязательно запишите, кто (включая какое приложение, если у вас есть несколько приложений, попавших в базу данных) и когда, а также старые и новые значения.Установите одну таблицу аудита для каждой таблицы, которую вы хотите проверить (слишком много блокировок, если вы используете только одну таблицу аудита).И в то время, когда вы настраиваете свою систему, пишите код, чтобы получить данные от неверной транзакции или набора транзакций.Это облегчает восстановление, если у вас что-то не так и вам нужно вернуться.Мы используем две таблицы для каждой проверяемой таблицы: одна содержит информацию о процессе, который внес изменения (имя приложения, дата, пользователь и т. Д., А также Audidid), другая содержит сведения о том, что было изменено (старые и новые значения)., Идентификатор затрагиваемой записи и столбца).Наша структура позволяет нам использовать одну и ту же структуру для каждой проверяемой таблицы, а также позволяет изменять таблицы без необходимости изменения таблицы аудита и позволяет легко создавать сценарии для новых таблиц.Нам также легко увидеть, какие записи были изменены в одно и то же время или в ходе одного и того же процесса, или узнать, какое из множества приложений, которые касаются нашей базы данных, были ответственны за неверные данные, а также сказать, кто, в частности, был ответственным за это.за плохие данные.Это помогает нам отследить ошибки приложения и выяснить, почему данные были изменены так, как это было в некоторых случаях.Нам также легче отслеживать все данные, на которые повлиял неработающий процесс, а не только те, о которых мы знали.

3 голосов
/ 18 января 2011

Если у вас Enterprise Edition, посмотрите Изменить сбор данных .Если у вас нет Enterprise и вы не заинтересованы в получении исторических значений изменяющихся столбцов, посмотрите Отслеживание изменений .

См. Сравнение сбора и изменения данных измененийОтслеживание , чтобы понять разницу между ними.

0 голосов
/ 18 января 2011

Предполагая, что все запросы на вставку, обновление и / или удаление данных проходят через некоторый уровень доступа к данным среднего уровня, я бы посоветовал вам заняться там записью. Это где мы делаем все наши. Это гораздо проще, чем пытаться извлечь фактические операторы вставки / удаления / обновления из SQL Server.

Если вы хотите провести аудит данных, вы можете посмотреть Change Data Capture (CDC) . Но для этого требуется Enterprise Edition.

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