Как узнать, когда новая запись добавляется в базу данных - PullRequest
4 голосов
/ 01 апреля 2011

У меня есть база данных, используемая двумя разными приложениями.Приложение 1 выполнит все операции в базе данных.У нас нет контроля над этим приложением.

Приложение2 необходимо будет предупреждать о добавлении, изменении или удалении записи из таблицы.Но мы не можем записать некоторые триггеры в sql.

Пример. Существует программное обеспечение для выставления счетов, которое добавляет счет в таблицу счетов, и соответствующая запись в таблице клиентов будет обновляться с учетом новых баллов, полученных из счета.Теперь у нас есть другое программное обеспечение для анализа, которое извлекает данные из таблицы клиентов и динамически выдает им ваучеры.Я не могу зацикливаться или запрашивать БД очень часто, если это не единственная оставленная опция.

Я также хочу знать, есть ли какая-либо функция в ядре базы данных.

Любые предложения, пожалуйста ..

Ответы [ 5 ]

5 голосов
/ 01 апреля 2011

Вы можете взглянуть на следующую статью .

3 голосов
/ 01 апреля 2011

App1 отправляет сообщение в App2 до / после манипуляции с БД.

0 голосов
/ 20 февраля 2015

Может быть, вы можете отслеживать эти изменения по совету, который был дан в этих ссылках:

https://msdn.microsoft.com/en-us/library/bb933994.aspx

https://msdn.microsoft.com/en-us/library/cc305322(v=sql.110).aspx

или попробуйте сделать черч в гугле со следующим: кто отслеживать изменения базы данных mssql

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

"Но мы не можем написать некоторые триггеры в sql."

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

Кто-то ответил: «App1 отправляет сообщение в App2», на что было дано замечание «Не соответствует ACID». Замечание является верным (учитывая некоторую разумную интерпретацию термина «КИСЛОТА»). Дело в том, что ваше приложение2 хочет получать, скажем, уведомления о вставке, в тот момент, когда абсолютно точно , что вставка действительно произошла. Эта точка уверенности достигается только тогда, когда СУБД имеет , успешно зафиксировало такую ​​вставку.

Следовательно, триггер, который вам нужен, является своего рода триггером, который запускается после удачного коммита (существуют ли они?).

И тогда возникает проблема: что должно произойти с зафиксированными данными, если по какой-либо причине этот триггер завершится неудачно? Ваши данные зафиксированы, ваше приложение 1 считает, что все в порядке, но ваше приложение 2 все еще не получило уведомление, которое должно было быть получено.

Решение этой проблемы состоит в том, что ваше приложение1, а также ваша СУБД и ваше приложение2 должны быть готовы к двухэтапной фиксации. Я не сомневаюсь, что, поскольку вы «не можете ничего сделать с app1», вы также не сможете заставить его участвовать в 2PC.

Шаблон "слушатели базы данных" - это простой и некорректный дизайн. По крайней мере, если вы дорожите «абсолютной последовательностью».

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

Не могли бы вы дать нам некоторый контекст, например, что такое приложение, какие изменения и т. Д.? Это просто триггеры, которые запрещены? (Почему это?).

Возможно, вы оставили опрос БД в цикле, проверяя SELECT MAX(id) FROM table, чтобы увидеть, больше ли идентификатор, чем в прошлый раз (то есть что-то новое есть). Без триггеров вы не увидите изменения или удаления, если только вы не написали App1 и не можете одновременно записывать его в таблицу аудита, регистрируя все операции.

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