Как проверить все изменения в приложении.net с SQL Server
У меня есть приложение.net, которое использует EF наряду с главным образом SQL Server 2008, но несколько клиентов используют 2005. В базе данных есть несколько сотен таблиц. Мне нужно проверить выбор этих таблиц, чтобы записать все данные вставки / обновления / удаления. Я думал о том, чтобы иметь копии этих таблиц для записи всех изменений вместе с датой и временем и именем пользователя, а затем иметь триггер на фактической таблице для вставки изменений данных в соответствующую таблицу аудита. Это лучший способ сделать это? Является ли триггер лучшим способом или я должен вместо этого использовать EF? Я думал о том, чтобы иметь только одну контрольную таблицу, но я считаю, что она может очень быстро выйти из-под контроля.
3 ответа
Аудит SQL Server - непростая задача, особенно если вам требуется поддержка более старых версий SQL Server.
Отслеживайте изменения с помощью вашего DbContext. Это добавит накладные расходы вашему приложению и (как вы уже отметили) легко превратится в настоящий кошмар (ключ-значение не масштабируется, необходимо скорректировать структурные изменения для таблиц истории (например, как вы отражаете пропущенный столбец))
CDC - если ваш SQL-сервер поддерживает CDC, это хороший вариант и оказывает меньшее влияние на ваше приложение
Сторонние варианты, такие как Аудит SQL Server. Вам нужно будет выяснить, делают ли они то, что вам нужно.
Изменить: CDC не доступен в SQL 2005
Также проверьте это: http://doddleaudit.codeplex.com/
Мы используем его для аудита изменений в нашей продукции. Вы также можете легко изменить его в соответствии с вашими потребностями.
Начиная с SQL Server 2008, у вас есть некоторые встроенные функции, которые, я думаю, вам нужны.