2014-12-04 2 views
0

У нас есть несколько процессов, которые читают одну таблицу базы данных, получают доступную запись и работают с ней. Он работает нормально.механизм ожидания/уведомления для нескольких считывателей в Oracle sql?

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

Что было бы рекомендовано для устранения таких ожиданий и продолжения сразу после создания записи? Одним из решений может быть триггер, который делает что-то при создании записи. Но это решение требует знания рабочих процессов для доставки записи в один из незанятых процессов.

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

Предоставляет ли Oracle 10 такой или подобный механизм?

ответ

1

Посмотрите на Database Change Notification в 10g, с которого было переименовано Уведомление о непрерывном запросе.

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

+0

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

+0

Невозможно, чтобы один запрос ожидал изменений вещей; Запросы Oracle всегда совпадают по времени и возвращают результаты только с момента начала запроса. Однако DCN или CQN могут запускать процесс PL/SQL или JDBC, который затем запускает запрос. –

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