我们有一个基于Oracle AQ的消息传递系统 - 它运行良好,可以毫无问题地进行排队和出队。
现在我们收到了一个请求,要求在启动前和运行时添加一些健全性检查,例如"检查提供的db-user"是否实际存在队列。和"定期检查队列中的消息量"。
后者似乎相当容易解决,查找可疑,计算消息数量,但第一个让我感到奇怪。
通过DatabaseMetaData
中的文档和可用方法,我没有看到实际检查这一点而不尝试入队/出队的方法。数据库告诉我关于表,键,模式等的所有信息,但我不能为我的生活找到队列。奇怪的是,我也找不到这个问题,尽管这些可能根本就不是一个表格。以经典的方式。
我错过了什么吗?信息不可用或在其他地方?
答案 0 :(得分:2)
要检查您的用户是否存在队列,我建议您检查USER_QUEUES
表:
SELECT * FROM USER_QUEUES
WHERE name = '<that_queue>'
对于您知道其名称(具有DBA权限)的其他用户:
SELECT * FROM DBA_QUEUES
WHERE owner = '<that_user_name>'
AND name = '<that_queue>'
答案 1 :(得分:1)
尝试此查询。
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
- 包含有关问题的统计信息。 (统计数据不会实时刷新。)