以编程方式检查Oracle AQ队列是否存在

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以编程方式检查Oracle AQ队列是否存在相关的知识,希望对你有一定的参考价值。

我们有一个基于Oracle AQ的消息传递系统 - 它运行良好,排队和出列没有任何问题。

现在我们得到了一个请求,要求在启动之前和运行时添加一些健全性检查,例如“检查提供的db-user是否实际存在队列”和“定期检查队列中的消息数量”。

后者似乎相当容易解决,查找可疑,计算消息数量,但第一个奇怪我。通过DatabaseMetaData的文档和可用方法,我没有看到一种方法来实际检查这一点而不试图入队/出队。数据库告诉我关于表,键,模式等的所有信息,但我不能为我的生活找到队列。奇怪的是,我也找不到这种可疑的东西,虽然这些可能根本就不是经典方式的“桌子”。

我错过了什么吗?信息不可用或在其他地方?

答案

要检查您的用户是否存在队列,我建议您检查USER_QUEUES表:

SELECT * FROM USER_QUEUES
 WHERE name  = '<that_queue>'

对于您知道其名称的另一个用户(具有DBA权限):

SELECT * FROM DBA_QUEUES
 WHERE owner = '<that_user_name>'
   AND name  = '<that_queue>'
另一答案

试试这个查询。

   select name, queue_type, waiting,ready,expired 
    from user_queues qu
    join V$AQ v on qu.qid = v.qid
   where qu.name = 'queu_name'

user_queses/all_queses/dba_queses - 包含有关问题的信息。

查看v$aq - 包含有关问题的统计数据。 (统计数据不会实时刷新。)

以上是关于以编程方式检查Oracle AQ队列是否存在的主要内容,如果未能解决你的问题,请参考以下文章

Oracle AQ c#并在c#中从oracle队列中使消息出队

如何以编程方式检查 Photoshop 画笔是不是存在

ActiveMQ - 以编程方式删除队列

如何在 Oracle AQ 中清除队列

使用 Oracle AQ 队列配置 Web Logic JMS 模块

编写一个工具以编程方式检查 Netezza(纯数据)是不是存在偏差并获取查询计划