2017-05-05 4 views
2

Nous avons un système de messagerie basé sur Oracle AQ - il fonctionne très bien, enceing et deque sans aucun problème.Vérifie par programme si la file d'attente Oracle AQ existe

Maintenant nous avons reçu une requête pour ajouter des vérifications de santé avant le démarrage et pendant l'exécution, par exemple "vérifier si la file existe réellement pour l'utilisateur db fourni" et "vérifier périodiquement le nombre de messages dans la file d'attente". Ce dernier semble raisonnablement facile à résoudre, rechercher des queuetables, compter le nombre de messages, mais le premier me dérange. En parcourant la documentation et les méthodes disponibles de DatabaseMetaData, je ne vois pas un moyen de réellement vérifier cela sans essayer de mettre en file d'attente/dequeue. La base de données me dit tout sur les tables, les clés, les schémas et ainsi de suite, mais je ne peux pas pour la vie de moi trouver des files d'attente. Bizarrement, je ne peux pas non plus trouver les queuetables, bien que ceux-ci ne puissent simplement pas être une "table" de la manière classique.

Ai-je raté quelque chose? L'information est-elle indisponible ou dans un autre endroit?

Répondre

2

Pour vérifier si une file d'attente existe pour l'utilisateur, je vous conseille de vérifier la table USER_QUEUES:

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

Pour un autre utilisateur dont le nom que vous connaissez (avec les droits DBA):

SELECT * FROM DBA_QUEUES 
WHERE owner = '<that_user_name>' 
    AND name = '<that_queue>' 
1

Essayez cette requête.

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 - contient des informations sur les questions.

afficher v$aq - contient des statistiques sur les questions. (les statistiques ne sont pas actualisées en temps réel.)

+0

Ceci est normalement suffisant. Cependant, notez que dans certains cas, les statistiques de v $ aq peuvent être tout à fait fausses. La profondeur de la file d'attente peut être listée comme négative, par exemple, même s'il y a des données à lire. L'approche la plus sûre consiste à utiliser le compte select sur le filtrage de la table de file d'attente sur l'état. – user2612030