Выполнить действие .NET при изменении базы данных - PullRequest
3 голосов
/ 11 октября 2011

У нас есть процесс, который должен запускаться при изменении определенной таблицы базы данных в Oracle.На данный момент подобный процесс был разработан с использованием триггеров и ряда последующих действий с базой данных, которые происходят при запуске этого триггера.

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

Я предполагаю, что это было сделано в другом месте, поэтому мне было интересно, какие подходы другие люди использовали для решения таких требований?заранее

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

Ответы [ 5 ]

1 голос
/ 11 октября 2011

Вы должны взглянуть на Oracle Database Extensions для .NET .

Из статьи, приведенной в статье:

Oracle Database Extensions для .NET предоставляет следующее:

  • Хост Common Language Runtime (CLR) для базы данных Oracle
  • Доступ к данным через поставщик данных Oracle для классов .NET
  • Мастер развертывания Oracle для Visual Studio .NET

Вы по-прежнему будете использовать триггеры для обнаружения изменений в БД, но вместо запуска всей описанной вами логики на стороне БД вы сможете выполнять эту логику из модуля .NET.

0 голосов
/ 11 октября 2011

Если вы используете драйвер Oracle .NET, вы можете использовать Oracle Continuous Query Notification (CQN) , чтобы сделать это.

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

Единственное известное мне предостережение: когда он первоначально запускает запрос на подписку на непрерывное уведомление, он на мгновение требует монопольной блокировки. Обычно это не имеет большого значения, так как вы просто выводите его один раз при запуске, поэтому любые другие запросы к БД в той же таблице будут блокироваться на долю секунды.

0 голосов
/ 11 октября 2011

Oracle предоставляет два механизма, чтобы довольно хорошо справляться с тем, что описывается ... на стороне БД вы реализуете триггеры для обнаружения изменений или чего-либо еще, что должно привести к действию на стороне .NET ...

Для связи вы используете механизм публикации / подписки, основанный на встроенной технологии организации очередей Oracle (называемой Advanced Queuing Technology, AQ) - хороший пример см. http://www.devart.com/dotconnect/oracle/docs/AQ.html (не аффилирован, просто счастливый клиент) ).

Другой вариант - использовать встроенный пакет DBMS_ALERTER для связи, который является транзакционным и асинхронным - см. Пример http://www.devart.com/dotconnect/oracle/docs/Devart.Data.Oracle~Devart.Data.Oracle.OracleAlerter.html

Просто чтобы прояснить:
Вышеуказанные технологии (DBMS_ALERTER и AQ) являются встроенными в Oracle, не относятся к каким-либо сторонним библиотекам ... вам просто нужен поставщик ADO.NET, поддерживающий их ...

РЕДАКТИРОВАТЬ - после РЕДАКТИРОВАНИЯ с ОП:

Если у вас есть контроль над кодом или вызовом кода, который инициирует изменение данных (WebService?), Тогда действительно лучший способ справиться с этим - это чисто на стороне .NET ... это также помогает справляться с ситуациями, когда такое изменение приводит к ошибке и т. д.

0 голосов
/ 11 октября 2011

Это похоже на Павла; но не предполагает, что Oracle установлен на компьютере с Windows.

Вы можете использовать dbms_scheduler для создания задания, которое будет вызывать ваш внешний процесс.

Вы можете напрямую вызвать удаленное внешнее задание из Oracle (для этого требуется установить агент планировщика Oracle, но не более)

требуется немного усилий для настройки аутентификации и тому подобное, но это работает.

затем вы используете событие , чтобы начать работу (вызывается из вашего триггера).

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

0 голосов
/ 11 октября 2011

Звучит возможно, но, скорее всего, потребуется некоторая работа ногами. Я думаю, что вы хотите заглянуть в Oracle Access Manager http://download.oracle.com/docs/cd/E12530_01/oam.1014/e10355/toc.htm

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