現在、Oracle DBMS_SCHEDULERを使用して実行するプロセスがあります。このプロセスは、バックエンドが外部デバイスからデータを受信するたびに実行されます。Oracleスケジューラは、外部データの受信時にジョブが作成され、ジョブがすぐに実行され、完了時にジョブが自動的に破棄されるように設定されます。
ここでの問題は、複数のデバイスが同時にデータを送信している可能性があることです。プロセスには、実行中の異なるポイントで排他ロックを取得することが含まれるため、1つのジョブがすでに実行中の別のジョブにステップインする場合があります(ORA-20000で拒否されます)。
この問題を解決するために、Oracle AQ(アドバンスドキュー)メカニズムを何らかの方法で使用したいと思います。FIFOで実行されるジョブのキューを想定しています。プロセスが現在外部デバイスAからのデータを処理している間に外部デバイスBがデータを送信したとしても、キューはデバイスAの処理が完了するまでデバイスBからのデータの処理を防ぎます。
Oracleドキュメントには、このタイプのAQ処理に関する特定のセクションはないようですが、かなり一般的なシナリオのようです。Oracle AQでこの種の問題を解決した人はいますか?