Журнал вставленных / обновленных / удаленных строк во всех таблицах для данной базы данных в SQL Server 2008 - PullRequest
1 голос
/ 24 мая 2011

Каков наилучший способ отслеживать / регистрировать вставленные / обновленные / удаленные строки во всех таблицах для данной базы данных в SQL Server 2008?

Или есть ли в SQL Server 2008 более удобная функция «Аудит»?

Ответы [ 5 ]

3 голосов
/ 20 октября 2013

Короткий ответ: нет единого решения, подходящего для всех. Это зависит от системы, но и требований, но здесь есть несколько разных подходов.

Триггеры DML

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

Недостатком является то, что он может запутаться, если у вас много столов и даже больше триггеров. Управление 600 триггерами для 200 таблиц (триггер вставки, обновления и удаления для каждой таблицы) - непростая задача. Кроме того, это может повлиять на производительность.

Создание триггеров аудита в SQL Server
Записать изменения в таблицу базы данных с помощью триггера

Изменение сбора данных

Очень прост в реализации, изначально поддерживается, но только в корпоративной версии, которая может стоить много долларов;). Другим недостатком является то, что CDC все еще не так развит, как это должно быть. Например, если вы измените свою схему, данные истории будут потеряны.

Анализ журнала транзакций

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

Считать файл журнала (* .LDF) в SQL Server 2008
Проводник / анализатор журнала транзакций SQL Server

Если вы хотите реализовать это, я рекомендую вам попробовать некоторые из сторонних инструментов, которые существуют там. Я работал с парой инструментов из ApexSQL, но есть и хорошие инструменты от Idera и Netwrix

ApexSQL Log - аудит путем чтения журнала транзакций

ApexSQL Comply - использует трассировки в фоновом режиме, а затем анализирует эти трассы и сохраняет результаты в центральной базе данных.

Отказ от ответственности: я не связан ни с одной из компаний, упомянутых выше.

1 голос
/ 24 мая 2011

Сбор данных об изменениях предназначен для того, чтобы делать то, что вы хотите, но он требует, чтобы каждая таблица настраивалась индивидуально, поэтому в зависимости от количества имеющихся у вас таблиц может потребоваться некоторая логистика. По умолчанию данные также будут храниться в таблицах захвата только в течение нескольких дней, поэтому вам может потребоваться пакет служб SSIS для их извлечения и хранения в течение более длительных периодов.

1 голос
/ 24 мая 2011

Я не помню, есть ли уже какой-то инструмент для этого, но вы всегда можете использовать триггеры (тогда у вас будет доступ к временным таблицам с измененными строками - INSERTED и DELETED).К сожалению, это может быть довольно трудной задачей, если вы хотите отслеживать все таблицы.Я считаю, что должно быть какое-то более простое решение, но не помню, как я сказал.

РЕДАКТИРОВАТЬ.

Может быть, это может быть полезно: - Изменение отслеживания http://msdn.microsoft.com/en-us/library/cc280462.aspx

0 голосов
/ 24 мая 2011

Журналы sql сервера невозможно проанализировать просто так. Есть некоторые сторонние инструменты, доступные для чтения журналов, но, насколько я знаю, вы не можете запросить у них статистику и тому подобное. Если вам нужна такая информация, вам нужно создать своего рода аудит, чтобы фиксировать все эти события в отдельных таблицах. Вы можете использовать «триггеры DDL».

0 голосов
/ 24 мая 2011

http://msdn.microsoft.com/en-us/library/cc280386.aspx

Это позволяет проводить аудит на уровне базы данных;этого может быть или не быть достаточно для удовлетворения бизнес-требований, поскольку записи в базе данных обычно не имеют особого смысла без логики их склеивания.Например, зная, что пользователь x вставил в таблицу «time_booked» запись с внешним ключом к таблицам «projects», «users», «time_status», может не иметь особого смысла без SQL-запроса склеить эти 4 таблицывсе вместе.

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

...