2017-05-05 24 views
2

Oracle AQをベースとするメッセージング・システムがあります。問題なくエンキューおよびデキューすることができます。Oracle AQキューが存在するかどうかをプログラムで確認する

スタートアップ前とランタイム中に、たとえば、「キューが実際に指定されたdb-userに存在するかどうかを確認する」と「定期的にキュー内のメッセージの量を確認する」などのサニティチェックを追加する要求があります。

後者は解決するのがかなり簡単だと思われますが、キューのテーブルを調べ、メッセージの数をカウントしますが、最初は奇妙です。 DatabaseMetaDataからドキュメントと利用可能なメソッドを見て、エンキュー/デキューを試みないでこれを実際にチェックする方法はありません。データベースは、テーブル、キー、スキーマなどについて私にすべてを教えてくれますが、私の人生はキューを見つけることができません。奇妙なことに、私もキューテーブルを見つけることはできませんが、これらは単に古典的な方法では "テーブル"ではないかもしれません。

何か不足していますか?情報が利用できないか、別の場所にありますか?

答えて

2

キューは、ユーザーのために存在するかどうかを確認するために、私はあなたがUSER_QUEUESテーブルをチェック助言:

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

試してみてください。名前を知っている(DBA権限を持つ)別のユーザーのために

SELECT * FROM USER_QUEUES 
WHERE 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 - quesuesに関する統計情報が含まれています。 (統計はリアルタイムで更新されません)

+0

これは通常十分です。ただし、v $ aqの統計情報が間違っていることがあります。キューの深さは、読み取るデータがある場合でも、たとえば負の値としてリストされます。最も安全な方法は、ステータスのキュー表のフィルタリングでselect countを使用することです。 – user2612030

関連する問題