2016-07-04 70 views
0

我们在应用程序中实现了多个AQ。由于很少发生异常情况,消息不能传送到AQ之一。所以我们需要实现监控,以便在过去10分钟内队列中没有入队/出队时生成警报。我尝试在队列表上使用SCN_TO_TIMESTAMP(MAX(ora_rowscn))函数,但是如果此时队列为空,它不会返回任何结果。如何监视Oracle高级队列中的零活动

请建议实施此的最佳方法..谢谢!

回答

0

创建一个状态表 - 1行(每个想要监视的队列)。

任何时候DEQUEUE都会针对您要监控的队列触发。 只需简单地更新该记录的“LAST_DEQUEUE_TIME”即可。 ;)

现在你只需要一个过程来唤醒​​每个〜10分钟,并偷看那条记录。

可能会有更多“优雅”的解决方案,但是,这可能是最简单的方法。

您还可以添加一列来判断DEQUEUE此时是否处于打开/关闭状态(例如,如果您为了某些维护而禁用了DEQUEUE,例如,此状态表会知道,并且扫描它的过程会能够说 - 而不是“恐慌”);)

0

感谢您的快速解决方案同上,是的,这将工作。尽管我发现使用GV $ PERSISTENT_QUEUES的LAST_ENQUEUE_TIME和LAST_DEQUEUE_TIME字段的内置解决方案。