3

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

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

后者似乎很容易解决,查找队列,计算消息数量,但第一个让我很奇怪。浏览文档和 中的可用方法DatabaseMetaData,我看不到在不尝试入队/出队的情况下实际检查这一点的方法。数据库告诉我有关表、键、模式等的所有信息,但我终生无法找到队列。奇怪的是,我也找不到队列表,尽管这些可能根本不是经典方式的“表”。

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

4

2 回答 2

3

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

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

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

SELECT * FROM DBA_QUEUES
 WHERE owner = '<that_user_name>'
   AND name  = '<that_queue>'
于 2017-05-05T08:47:47.930 回答
2

试试这个查询。

   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- 包含有关问题的统计信息。(统计数据不会实时刷新。)

于 2017-05-05T09:13:26.720 回答