Temos um processo que atualmente usa o Oracle DBMS_SCHEDULER para executar. O processo é executado sempre que o back-end recebe dados de um dispositivo externo. O planejador Oracle é configurado para que um trabalho seja criado na recepção de dados externos, o trabalho seja executado imediatamente e o trabalho seja destruído automaticamente quando concluído.
O problema aqui é que vários dispositivos podem estar enviando dados ao mesmo tempo. Como o processo envolve a obtenção de bloqueios exclusivos em pontos diferentes durante a execução, ocasionalmente um trabalho é executado em outro que já está em execução (é rejeitado com o ORA-20000).
Gostaria de usar de alguma forma o mechansim do Oracle AQ (fila avançada) para resolver esse problema. Eu imagino uma fila de trabalhos que são executados FIFO. Mesmo que o dispositivo externo B envie dados enquanto o processo está processando dados do dispositivo externo A, a fila impede o processamento de dados do dispositivo B até que o processamento do dispositivo A seja concluído.
Não parece haver uma seção específica sobre esse tipo de processamento de AQ na documentação do Oracle, mas parece que seria um cenário bastante comum. Alguém mais resolveu esse tipo de problema com o Oracle AQ?
fonte