我们有一个在 Oracle 11.2 上使用 Oracle AQ 的流程。它工作得很好,昨天购买,队列中的消息停止发送给订阅者。这是我们必须创建队列和注册处理程序的设置。
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() 手动使消息出队。任何有关如何排除故障的建议将不胜感激!