28 ноября 2017

Oracle Streams и AQ_TM_PROCESSES

    Параметр Oracle AQ_TM_PROCESSES в очередях сообщений контролирует мониторинг времени и обработку сообщений с задержкой и заданным сроком действия. Он может принимать значение от 0 до 10. Установка параметра AQ_TM_PROCESSES в ноль отключает Queue Monitor Coordinator, что, как написано в документации Oracle, приведет к серьезным проблемам в работе Oracle Streams. Но даже значение отличное от нуля может привести к проблемам. У моего заказчика при AQ_TM_PROCESSES = 1 трейс-файлы начали "распухать" от сообщений "Streams AQ: waiting for messages in the queue".
    В Oracle 10g был добавлен режим автонастройки Queue Monitor Coordinator. Для его включения параметр AQ_TM_PROCESSES должен быть пустым. Oracle настоятельно рекомендует, что бы параметр AQ_TM_PROCESSES оставался пустым.

Как проверить значение AQ_TM_PROCESSES?
    Запрос "select value from v$parameter where name = 'aq_tm_processes'" не позволяет проверить параметр AQ_TM_PROCESSES, т.к. даже если он пустой (т.е. включен режим автонастройки), то запрос к v$parameter всеравно вернет ноль. Поэтому для его проверки можно использовать следующий скрипт:
declare
  aq_tm_processes pls_integer;
begin
  select value
     into aq_tm_processes
  from v$parameter
  where name = 'aq_tm_processes';
  if aq_tm_processes = 0 then
    select 0
       into aq_tm_processes
    from v$parameter
    where name = 'aq_tm_processes'
       and (isDefault = 'FALSE' or isModified <> 'FALSE');
  end if;
  dbms_output.put_line('AQ_TM_PROCESSES = ' || aq_tm_processes);
exception
  when no_data_found then
    dbms_output.put_line('AQ_TM_PROCESSES is empty');
end;
Как в AQ_TM_PROCESSES установить пустое значение?
    Попытка очистить значение параметра AQ_TM_PROCESSES в Oracle Enterprise Manager Console приводит к ошибке: "Applying dynamic parameter(s) failed. ORA-02017: integer value required". Т.к. по умолчанию AQ_TM_PROCESSES является пустым, то просто сбросим параметр AQ_TM_PROCESSES в значение по умолчанию выполнив комманду:
ALTER SYSTEM RESET AQ_TM_PROCESSES SCOPE=SPFILE SID='*';
Сброс параметра AQ_TM_PROCESSES в значение по умолчанию избавил трейс-файлы моего заказчика от сообщений "Streams AQ: waiting for messages in the queue". Хотя может это совпадение...

P.S. Да прибудут с вами грамотно настроенные сервера баз данных!

Комментариев нет:

Отправить комментарий