oracle AQ для запланированных заданий

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

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

Я хотел бы как-то использовать Oracle AQ (advanced queueing) mechansim для решения этой проблемы. Я представляю себе очередь заданий, которые выполняются FIFO. Даже если внешнее устройство B отправляет данные, в то время как процесс в настоящее время обрабатывает данные от внешнего устройства a, очередь предотвращает обработку данных от устройства B до обработки для устройство является полным.

там, кажется, не быть конкретный раздел по этому типу обработки AQ в документации Oracle, но кажется, что это было бы довольно распространенным сценарием. Кто-нибудь еще решил эту проблему с Oracle AQ?

21
задан Nordlys Jeger
28.04.2023 15:14 Количество просмотров материала 3442
Распечатать страницу

1 ответ

вы можете реализовать это следующим образом: программа задания планировщика реализована как бесконечный - никогда не проваливающийся цикл. Этот цикл извлекает сообщения из AQ и обрабатывает их. Задания планировщика submitsted только один раз - от системных событий даже спровоцировать AFTER STARTUP ON DATABASE.

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

но я думаю, dbms_scheduler очень могущественен в наши дни, и есть способы ограничить параллельные выполнения для расписания.

PS: ORA-20000 определяемый пользователем код ошибки. База данных никогда не возвращает такую ошибку самостоятельно.

0
отвечен ibre5041 2023-04-29 23:02

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх