Журнал активности пользователей для базы данных SQL Server - PullRequest
2 голосов
/ 27 апреля 2011

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

User X updated category HELLO. Name changed from 'HELLO' to 'Hi There' on 24/04/2011       
User Y deleted vehicle Test on 24/04/2011.
User Z updated vehicle Bla. Name changed from 'Blu' to 'Bla' on 24/04/2011.
User Z updated vehicle Bla. Wheels changed from 'WheelsX' to 'WheelsY' on 24/04/2011.
User Z updated vehicle Bla. BuildProgress changed from '20' to '50' on 24/04/2011

Моя первоначальная идея состоит в том, чтобы на все мои действия, которые имеют базу данных crud, добавить пару строк кода, которые бы вводили эти строки в таблицу.

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

Теперь, когда я использую MVC и ADO.NET Entity Data Model, мне интересно, есть ли более быстрый способ найти столбцы, которые были изменены, и создать журнал, подобный приведенному выше.

Ответы [ 3 ]

1 голос
/ 24 июля 2011

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

Когда база данных находится в режиме полного восстановления, сервер SQL регистрирует все обновления, вставки и удаления (и другие).такие как операторы create, alter, drop ..) в свой журнал транзакций.

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

Но вам понадобится сторонняя программа чтения журнала транзакций sql .Red Gate предлагает бесплатное решение только для SQL Server 2000.Если ваш сервер 2005 или выше, вы, вероятно, захотите использовать ApexSQL Log

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

0 голосов
/ 28 апреля 2011

У вас может быть триггер (ПОСЛЕ вставки / обновления / удаления) для каждой таблицы, которую вы хотите отслеживать.Красота в функции columns_updated (), которая возвращает значение barbinary, указывающее, какие столбцы были обновлены.

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

0 голосов
/ 28 апреля 2011

Как я вижу, у вас есть два варианта:

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

OR

  • Наличие кода для обработки изменений. У вас будет базовый класс с данными, а с отражением вы можете перебрать все свойства объекта и посмотреть, что изменилось. А затем сохраните это в своей таблице Log. Конечно, это кодирование будет на вашем уровне доступа к данным.

Кстати, если у вас хорошая структура кода / архитектура, я бы выбрал второй вариант.

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