У нас есть процесс с использованием Oracle AQ на Oracle 11.2. Все работало нормально, купил вчера, сообщения в очереди перестали отправляться подписчику. Вот настройка, которую мы должны создать для создания очереди и регистрации обработчика.
DBMS_AQADM.CREATE_QUEUE_TABLE (
queue_table => 'mdms_queue_table',
queue_payload_type => 'U$_MDM_QUEUE_OBJECT',
multiple_consumers => TRUE
);
DBMS_AQADM.CREATE_QUEUE (
queue_name => 'mdms_queue',
queue_table => 'mdms_queue_table'
);
DBMS_AQADM.START_QUEUE (
queue_name => 'mdms_queue'
);
DBMS_AQADM.ADD_SUBSCRIBER (
queue_name => 'mdms_queue',
subscriber => SYS.AQ$_AGENT(
'mdms_queue_subscriber',
NULL,
NULL )
);
DBMS_AQ.REGISTER (
SYS.AQ$_REG_INFO_LIST(
SYS.AQ$_REG_INFO(
'mdms_queue:mdms_queue_subscriber',
DBMS_AQ.NAMESPACE_AQ,
'plsql://P_MDMS_QUEUE_CB_PROCEDURE?PR=0',
HEXTORAW('FF')
)
),
1
);
DBMS_AQADM.GRANT_QUEUE_PRIVILEGE (
'ALL','UIMSMGR.MDMS_QUEUE', 'BAN_DEFAULT_M');
Итак, теперь, когда сообщения помещаются в очередь, я запускаю этот запрос:
select DBA_QUEUES.NAME , aq.*
from gv$aq aq,
dba_queues
where aq.qid = dba_queues.qid
and
name like '%MDMS_QUEUE%'
И все сообщения сидят в состоянии READY. Когда я запрашиваю v$process, я вижу, что программа «QMNC» работает в соответствии с этим устранением неполадок Oracle. Док. Я могу вручную убрать сообщения из очереди, вызвав DBMS_AQ.dequeue(). Буду признателен за любые предложения по устранению неполадок!