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