2012-04-06 2 views
3

Это Oracle 11.2.0.3.Почему OracleAQ оставляет мертвых подписчиков в очереди?

У нас возникла проблема, когда мы используем JMS Oracle для OracleAQ. Это отлично работает, за исключением того, что мы начали замечать, что очередь заполняется 1000, а затем миллионы сообщений с течением времени. Некоторые из них находятся в состоянии PROCESSED, но большинство из них ГОТОВ. Мы проследили это поведение до «зомби» или мертвых подписчиков на эту тему. Когда процесс Java завершается и не получает возможности отменить регистрацию, он оставляет запись подписчика в очереди, и ORacle, похоже, не обнаруживает, что он мертв. Настолько, что MONTHS позже, новое сообщение, отправленное в нашу очередь с несколькими абонентами, затем будет умножаться на число подписчиков, которое, по его мнению, намного выше, чем на самом деле. (Мы впервые заметили это, когда достигли максимального абонентского лимита.)

У нас запущены процессы qmon - я даже попытался увеличить минимальное количество процессов без эффекта. Очистка очереди происходит очень хорошо, если в очереди нет мертвых подписчиков.

Кто-нибудь это видит раньше, и, надеюсь, нашел решение?

+0

Я столкнулся с той же проблемой и попытался ее решить. Если я найду решение, разместите его здесь для справки другого пользователя. – gyan

ответ

1

Ok, поэтому я не мог иметь лучшее решение, чем это:

1) Создать свой подписчика с именем и отслеживать имя абонента.

2) Убедитесь, что у вас есть крюк выключения для приложения, чтобы выполнить ниже процедуру, которая отменяет подписку и отменяет регистрацию подписчика.

3) В случае неожиданного отключения/аварии, когда не-подписка не может быть сделано, должно быть очистки задача выполнить код ниже:

DECLARE 
aqAgent SYS.AQ$_AGENT; 
BEGIN 
    for idx in (select consumer_name from 
    DBA_QUEUE_SUBSCRIBERS a where a.queue_name = '<Your Oracle AQ Name>') loop 
    aqAgent := SYS.AQ$_AGENT(idx.consumer_name, NULL, NULL); 
    DBMS_AQADM.REMOVE_SUBSCRIBER('<Your Oracle AQ Name>', aqAgent); 
    end loop; 
END; 

Это позволит убедиться, что система остается полной -доказательство.

 Смежные вопросы

  • Нет связанных вопросов^_^