Программно проверить, существует ли Oracle AQ Queue

У нас есть система обмена сообщениями, основанная на Oracle AQ - она ​​работает очень хорошо, ставит в очередь и удаляет без проблем.

Теперь мы получили запрос на добавление некоторых проверок работоспособности перед запуском и во время выполнения, например, "проверить, существует ли очередь для указанного пользователя db" и "периодически проверять количество сообщений в очереди".

Последнее кажется достаточно простым для поиска, поиска в очереди, подсчета количества сообщений, но первое меня утомляет. Просматривая документацию и доступные методы от DatabaseMetaDataЯ не вижу способа на самом деле проверить это, не пытаясь поставить в очередь /dequeue. База данных сообщает мне все о таблицах, ключах, схемах и т. Д., Но я не могу за свою жизнь найти очереди. Странно, я также не могу найти очереди, хотя они могут просто не быть "таблицей" в классическом смысле.

Я что-то пропустил? Информация недоступна или находится в другом месте?

2 ответа

Решение

Чтобы проверить, существует ли очередь для вашего пользователя, я советую вам проверить USER_QUEUES Таблица:

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

Для другого пользователя, имя которого вы знаете (с правами администратора):

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 - содержит статистику о квестах. (статистика не обновляется в режиме реального времени.)

Другие вопросы по тегам