1

我们有一个在 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() 手动使消息出队。任何有关如何排除故障的建议将不胜感激!

4

1 回答 1

0

有关在 oracle aq 中要考虑的某些方面,请参阅此链接。似乎某些版本的数据库在metalink中报告了问题。如果您之前有工作版本,也请尝试重新创建对象。

于 2014-09-24T18:35:08.573 回答