以编程方式检查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队列中使消息出队