Как следить за обновлениями базы данных из приложения? - PullRequest
0 голосов
/ 01 февраля 2012

Я работаю с базой данных SQL Server с ODBC, C ++.Я хочу обнаружить изменения в некоторых таблицах базы данных: другое приложение вставляет или обновляет строки, и я должен обнаружить все эти изменения.Это не должно быть немедленным триггером, допустимо использовать опрос для периодической проверки таблиц базы данных на предмет изменений.

Ниже приведен способ, которым я думаю, что это можно сделать, и вам нужно ваше мнение, является ли это стандартом/ правильный способ сделать это, или существуют лучшие подходы.

Я подумал о следующем: я добавляю триггеры в SQL Server, которые при любой модификации вставляют идентификаторы измененных / добавленных строкв специальную таблицу, которую я буду периодически проверять из моего заявления.Предположим, есть 3 таблицы: клиенты, продукты, услуги.я сделаю три дополнительные таблицы: Change_Customers, Change_Products, Change_Services и вставлю идентификаторы модифицированных строк соответствующих таблиц.Затем я периодически читаю эти таблицы Change_ * из своего приложения и удаляю обработанные записи.

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

Ответы [ 3 ]

3 голосов
/ 01 февраля 2012

Уведомления о запросах - это технология, предназначенная для в точности того, что вы описываете.Вы можете использовать уведомления о запросах от управляемых клиентов через хорошо известный класс SqlDependency , но есть и собственные способы Ole DB и ODBC.См. Работа с уведомлениями о запросах , параграфы о SSPROP_QP_NOTIFICATION_MSGTEXT (OleDB) и SQL_SOPT_SS_QUERYNOTIFICATION_MSGTEXT (ODBC).См. Таинственное уведомление для объяснения того, как работают уведомления о запросах.

Это единственное решение без опроса, которое работает с любыми обновлениями.Триггеры и опросы изменений имеют серьезные проблемы с масштабируемостью и производительностью.Сбор данных изменений и отслеживание изменений действительно затрагивают другую тему (синхронизация наборов данных для периодически подключаемых устройств, например Sync Framework).

1 голос
/ 01 февраля 2012

Изменение сбора данных (CDC) - http://msdn.microsoft.com/en-us/library/cc645937.aspx

Сначала вам нужно включить CDC в базе данных. :: USE db_name ИДТИ EXEC sys.sp_cdc_enable_db GO

Включить CDC для таблицы, затем :: sys.sp_cdc_enable_table

Затем вы можете запросить изменения

0 голосов
/ 01 февраля 2012
  • Если ваша версия Sql Server 2005 года - вы можете использовать Notification Services
  • Если ваш Sql Server 2008+ - есть наиболее предпочтительный способ использования триггеров и регистрациивносить изменения в таблицы журналов и периодически опрашивать эти таблицы из приложения, чтобы увидеть изменения
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...