Как фиксировать изменения данных на уровне таблицы в SQL Server 2008 R2? - PullRequest
0 голосов
/ 24 июня 2011

У меня большой объем данных, нормализованный в более чем 100 таблиц.Есть несколько приложений, которые изменяют базовые данные в этих таблицах, и я хочу вызывать события этих изменений.Мне известны следующие возможные варианты:

  • Сбор данных изменений
  • Отслеживание изменений
  • Использование триггеров на каждой таблице (неверный вариант, но возможный)

Может ли кто-нибудь поделиться наилучшим способом сделать это, если кто-то уже делал это раньше?

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

Ответы [ 3 ]

0 голосов
/ 24 июня 2011

Одной из возможностей являются уведомления о запросах SQL Server: Использование уведомлений о запросах

0 голосов
/ 02 апреля 2013

Пока вы хотите «пакетировать» несколько изменений, я думаю, что вы должны следовать по маршруту Сбор данных изменений или Отслеживание изменений (в зависимости от того, хотите ли вы просто знатьчто то изменилось или какие изменения произошли).

Они должны использоваться процедурой «опроса», где вы запрашиваете изменения каждые несколько минут (секунд, миллисекунд ???) и генерируете события.Хорошая вещь об этом заключается в том, что до тех пор, пока вы сохраняете последнюю версию строки предыдущего опроса - для каждой таблицы - вы можете проверять изменения в любой момент после последнего опроса.Вы не полагаетесь на подход триггеров в реальном времени, что, если вы остановитесь, вы потеряете все события навсегда.Процедура может быть легко создана внутри процедуры, которая проверяет каждую таблицу, и вам потребуется всего лишь 1 таблица для хранения последней версии строки для каждой таблицы.

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

0 голосов
/ 24 июня 2011

Два варианта, которые я могу придумать:

  1. Триггеры - это правильный способ захвата событий изменений в слое БД
  2. Codewise, я проверяю в своем приложении, что каждая таблица изменяется только в одном месте кода, независимо от того, что это за изменение (я называю это концентратором для этой таблицы, поскольку она направляет много разных путей в одно место), таким образом становится очень легко отследить события изменения в слое кода
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...