Как проверить все изменения в приложении .net с помощью SQL Server

У меня есть приложение .net, которое использует EF наряду с главным образом SQL Server 2008, но несколько клиентов используют 2005. В базе данных есть несколько сотен таблиц. Мне нужно проверить выбор этих таблиц, чтобы записать все вставки/обновления/удаления данных. Я думал о том, чтобы иметь копии этих таблиц для записи всех изменений вместе с датой и временем и именем пользователя, а затем иметь триггер в фактической таблице для вставки изменений данных в соответствующую таблицу аудита. Это лучший способ сделать это? Является ли триггер лучшим способом или вместо этого я должен использовать EF? Я думал о том, чтобы иметь только одну таблицу аудита, но полагаю, что это может очень быстро выйти из-под контроля.


person knappster    schedule 15.04.2013    source источник
comment
Вы рассматривали возможность использования профилировщика SQL-сервера для записи всех операций с этими таблицами?   -  person Siraf    schedule 15.04.2013
comment
Обратите внимание: профилировщик SQL Server предназначен для анализа проблем, а не для использования в качестве инструмента аудита. Несмотря на то, что это оказывает значительную нагрузку на сервер, будет сложно использовать результаты в качестве надежной базы для любых проверок.   -  person Sascha    schedule 15.04.2013
comment
Хранение его в одной таблице аудита означает: а) Хранение всей информации аудита, например. XML, что может ограничить ваши возможности поиска по аудиту, или b) множество практически анонимных столбцов, например. IntColumn1, IntColumn2 и т. д., в которые вставляются данные, но для которых теперь нужно знать отображение из каждой таблицы в эти столбцы, или в) Сверхширокая таблица, содержащая все возможные столбцы из всех проверенных таблиц. Лично мне ни один из них так не нравится.   -  person Damien_The_Unbeliever    schedule 15.04.2013


Ответы (3)


Аудит SQL Server — непростая задача, особенно когда вам нужно поддерживать старые версии SQL Server.

  • Отслеживайте изменения с помощью DbContext. Это добавит накладные расходы вашему приложению и (как вы уже заметили) легко станет чертовски кошмаром (ключ-значение не масштабируется, изменения структуры для таблиц истории необходимо скорректировать (например, как вы отражаете удаленный столбец). )

  • CDC — если ваш SQL-сервер поддерживает CDC, это хороший вариант, который оказывает меньшее влияние на ваше приложение.

  • Варианты сторонних производителей, такие как Аудит SQL Server. Вам нужно выяснить, делают ли они то, что вам нужно.

Изменить: CDC недоступен в SQL 2005.

person Sascha    schedule 15.04.2013
comment
Ура, аудит SQL Server выглядит хорошо, нужно будет изучить это немного подробнее... - person knappster; 15.04.2013

Также проверьте это: http://doddleaudit.codeplex.com/

Мы используем его для аудита изменений БД в нашем продукте. Вы также можете легко изменить его в соответствии с вашими потребностями.

person Zoran Causev    schedule 15.04.2013

Начиная с SQL Server 2008, у вас есть некоторые встроенные в функционале делать, думаю, что хочешь.

person Laurent S.    schedule 15.04.2013