Я разрабатываю приложение, используя базу данных Oracle и службу WCF/WebAPI. Служба должна знать об изменении определенной таблицы в базе данных. Я занимался серфингом в Интернете и нашел технологию в Oracle RDBMS с именем "Уведомление об изменении базы данных", которое, я думаю, действительно то, что мне нужно в такой ситуации. Но моя команда вела меня использовать триггер для этой цели.
Может ли кто-нибудь объяснить преимущества и недостатки каждой технологии для уведомления службы о изменениях таблицы?
Я хочу отслеживать операции insert
, update
, delete
в таблице, способ, которым я планирую уведомлять службу, - использовать пакет UTL_HTTP
для вызова методов службы.
Заранее спасибо!
Обновление: уведомления должны быть отправлены как можно скорее. Таким образом, любые способы, которые работают периодически (например, помещать оповещения в очередь и обрабатывать их с помощью задания oracle каждые 1 минуту), не подходят.
Похоже, что ваша команда думает о DBMS_ALERT, которая использует триггер для отправки сигналов событий таблицы. Это может работать в вашем сценарии (учитывая, что мы не знаем деталей того, чего вы пытаетесь достичь). Узнайте больше.
Однако Уведомление об изменении базы данных тоже будет работать. Вы отметили свой вопрос C#
. Если вы используете ODP, вам обязательно стоит подумать о возможности использования встроенной поддержки. Узнайте больше.
Это случай, когда лучшим решением будет вопрос. Вы, ребята, знаете свою ситуацию лучше, чем мы. Я предлагаю вам поговорить с командой. Просто имейте в виду, что если вы будете настаивать на другом решении, бремя будет на вас, чтобы заставить его работать; если у вашей команды есть опыт внедрения триггерного решения, то это может быть более безопасная ставка.
Триггеры базы данных подходят для сложных значений по умолчанию или для комплексной проверки данных. Не используйте их для логики приложения, например, для отправки сообщений. Когда будут проблемы с http-соединением, вы не сможете изменить свои данные. В любом случае, вы можете создать очередь уведомлений (используя, например, новую таблицу или Oracle Queue) и заполнить ее с помощью триггеров, которые могут быть безопасными. Затем напишите задание, которое будет запрашивать эту очередь и отправлять уведомления.
Когда вы смотрите концепцию уведомления об изменении базы данных (см. Http://docs.oracle.com/cd/B19306_01/appdev.102/b14251/adfns_dcn.htm#BGBDBAIJ, рисунок 13.2), вы видите, что он использует тот же подход,
Поэтому я голосую за уведомление об изменении базы данных. Вам не нужно использовать триггеры, просто регистрировать объекты и писать код процедуры уведомления.