2009-08-30 3 views
2

This question был задан довольно давно, и хотя он охватывает возможные решения для SQL 2005 и 2008, у него нет хорошего решения для SQL 2000, которое все еще слишком распространено.Как отслеживать таблицы в SQL Server для изменений

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

Я НЕ хочу опросить базу данных по нескольким причинам. 1) Я не хочу добавлять дополнительную нагрузку на серверы. 2) Я предпочел бы получать уведомления почти в режиме реального времени, а не ждать, пока частота опроса истечет.

Теперь я могу поместить логику в приложения, которые обновляют базу данных, но данные могут быть обновлены из нескольких источников, в том числе в Интернете, и я не хочу иметь дело с веб-серверами, отправляющими уведомления через границы DMZ и т. Д. . И я не хочу поддерживать это в 20 различных приложениях (более сильная проблема).

Я видел это на SQL 2000 с использованием расширенных хранимых процедур и триггеров, но для xp, похоже, сложно сделать кросс-платформу, и они ломаются при установке на SQL 2005 и 2008. Возможно, это просто плохой код в примеры, которые я видел, я не уверен, но я ищу что-то, что работает в SQL 2000 и более поздних версиях.

Любые идеи?

EDIT:

Я думал о потере поддержки в 2000 году, но это на самом деле не решает мою проблему. Я бы хотел, чтобы решение продолжало работать в течение долгих лет. Одна из проблем со многими технологиями microsoft заключается в том, что они отказываются от поддержки для них. Например, службы уведомлений делают то, что мне нужно, но они решили отказаться от этого в 2008 году и не будут доступны в следующей версии. Поэтому я ищу решение, которое имеет хорошие шансы на то, что он будет торчать.

ответ

5

Очень простое решение

Вы могли бы иметь триггер, который вызывает веб-страницу, с уведомлением о обновлении.

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

Альтернативный план

В триггер, запись в очереди. (Я, случается, влюблен в MSMQ). Затем у вас есть что-то, ожидающее этой очереди, и вы получите сообщения в режиме реального времени. Опять же, он подвержен частоте обновлений, как указано выше.

Лучше план

Есть триггер, которая отправляет данные в таблицу «tblUpdatedThings», который затем опрос. Но я знаю, что вы не хотите опроса. Несмотря на это, я считаю это лучше, из-за причин, которые я описываю.

2

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

 Смежные вопросы

  • Нет связанных вопросов^_^