以编程方式检查 Oracle AQ 队列是否存在
Programmatically check if Oracle AQ Queue exists
我们有一个基于 Oracle AQ 的消息传递系统 - 它运行良好,入队和出队没有任何问题。
现在我们收到了在启动前和运行时添加一些完整性检查的请求,例如 "check if the queue actually exists for the supplied db-user" 和 "periodically check the amount of messages in the queue"。
后者似乎相当容易解决,查找队列表,计算消息数量,但第一个让我感到奇怪。
通过 DatabaseMetaData
中的文档和可用方法,我看不出有什么方法可以在不尝试 enqueue/dequeue 的情况下实际检查它。数据库告诉我有关表、键、模式等的所有信息,但我终其一生都找不到队列。奇怪的是,我也找不到队列表,尽管它们可能根本不是经典方式中的 "table"。
我错过了什么吗?信息不可用或在其他地方?
要检查您的用户是否存在队列,我建议您检查 USER_QUEUES
table:
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'
table user_queses/all_queses/dba_queses
- 包含有关问题的信息。
查看 v$aq
- 包含有关问题的统计信息。 (统计数据不实时刷新。)
我们有一个基于 Oracle AQ 的消息传递系统 - 它运行良好,入队和出队没有任何问题。
现在我们收到了在启动前和运行时添加一些完整性检查的请求,例如 "check if the queue actually exists for the supplied db-user" 和 "periodically check the amount of messages in the queue"。
后者似乎相当容易解决,查找队列表,计算消息数量,但第一个让我感到奇怪。
通过 DatabaseMetaData
中的文档和可用方法,我看不出有什么方法可以在不尝试 enqueue/dequeue 的情况下实际检查它。数据库告诉我有关表、键、模式等的所有信息,但我终其一生都找不到队列。奇怪的是,我也找不到队列表,尽管它们可能根本不是经典方式中的 "table"。
我错过了什么吗?信息不可用或在其他地方?
要检查您的用户是否存在队列,我建议您检查 USER_QUEUES
table:
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'
table user_queses/all_queses/dba_queses
- 包含有关问题的信息。
查看 v$aq
- 包含有关问题的统计信息。 (统计数据不实时刷新。)