Самый простой способ создания аудита и архивирования информации в базе данных SQL, совместно используемой несколькими приложениями - PullRequest
1 голос
/ 11 декабря 2010

У нас есть несколько приложений, которые обновляют определенную таблицу ms sql 2005 (веб-приложение asp.net, служба c # windows, анализатор электронной почты для инструмента автоматизации баз данных (использует sql + VB)) и хотели бы хранить информацию аудита в таблице , Например. ModifiedBy, ModifiedDate, где ModifiedBy = Имя приложения, обновляющего запись.

Мы также хотели бы заархивировать информацию на столе; когда мы обновляем определенную запись, сохраняем текущую запись в таблице myTable_Archive, отмечаем ее датой и соответствующим образом обновляем текущую запись в myTable.

Каков наилучший поддерживаемый и проверяемый подход к решению этой проблемы при минимальном воздействии на существующие приложения? Или кто-то может предложить лучший маршрут? Вызов процедуры хранения, общей библиотеки c # (с использованием nhibernate / ado.net и т. Д.) Или встроенной функции ms sql 2005, если таковая имеется, например.

Ответы [ 2 ]

2 голосов
/ 11 декабря 2010

Я обнаружил, что проще всего с помощью триггеров.Чтобы получить требование ModifiedBy = Имя приложения, вам нужно сделать две вещи

1) Обновить строки Connections, чтобы задать имя приложения, например, ..Database=Foo;Application Name = Parser;

2) Затем в вашем триггереВы можете получить имя через

select program_name from sys.dm_exec_sessions where session_id = @@SPID

2 голосов
/ 11 декабря 2010

Наиболее поддерживаемым (и достаточно стандартным) способом проведения такого аудита является использование триггеров в рассматриваемых таблицах.

Поскольку они существуют полностью в базе данных, ваши приложенияне изменится вообще.

Конечно, триггеры будут влиять на производительность (так как теперь один меняет более одной таблицы в вызове).

...