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