Oracle Mutli消费者队列消息未被删除

使用Oracle多消费者队列时,消息出队后,消息仍保留在队列表中。 保留设置为0。

创建队列表:

   BEGIN DBMS_AQADM.CREATE_QUEUE_TABLE(
     Queue_table        => '"ZEE_EXEC"."ZEE_SYNC"',
     Queue_payload_type => 'ZEE_EXEC.T_SYNC',
     storage_clause     => 'PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 TABLESPACE ZEE_GENERAL',
     Sort_list          => 'ENQ_TIME',
     Multiple_consumers =>  TRUE,
     Compatible         => '10.0.0');
  END;

创建队列:

BEGIN DBMS_AQADM.CREATE_QUEUE(
     Queue_name          => 'ZEE_EXEC.SYNCQUEUE',
     Queue_table         => 'ZEE_EXEC.ZEE_SYNC',
     Queue_type          =>  0,
     Max_retries         =>  5,
     Retry_delay         =>  0,
     dependency_tracking =>  FALSE);
  END;

使用PLSQL离队:

DECLARE
dequeue_options     DBMS_AQ.dequeue_options_t;
message_properties  DBMS_AQ.message_properties_t;
message_handle      RAW(16);
message             T_SYNC;
BEGIN
   dequeue_options.navigation := DBMS_AQ.FIRST_MESSAGE;
   dequeue_options.consumer_name := 'ZEE_TOPIC';
   DBMS_AQ.DEQUEUE(
      queue_name          =>     'ZEESYNCQUEUE',
      dequeue_options     =>     dequeue_options,
      message_properties  =>     message_properties,
      payload             =>     message,
      msgid               =>     message_handle);
   COMMIT;
END;

使用JAVA出队(样本):

q_sess = q_conn.createQueueSession(true, Session.AUTO_ACKNOWLEDGE);
topic = ((AQjmsSession) q_sess).getTopic("ZEE_EXEC", "SYNCQUEUE");
ORADataFactory orad = TSync.getORADataFactory();
        receiver = ((AQjmsSession) q_sess).createTopicReceiver(topic, "ZEE_TOPIC", null, orad);

我试过使用不同的实现。 我可以明确地将会话事务设置为true或false,对AUTO_ACKNOWLEDGEMENT,CLIENT_ACKNOWLEDGEMENT和SESSION_TRANSACTED的确认没有区别。 当使用PLSQL和JAVA出队时接收到消息,但消息保留在队列中。 保留设置为0.使用JAVA对消息,topicSession和会话进行确认并没有区别。

我在数据库方面并不强大,然而研究表明:

SELECT * FROM dba_tab_privs WHERE grantee = 'ZEE_EXEC' AND table_name = 'dbms_aqjms';

应该显示一些结果,但它不。 我可能没有足够的权限将邮件出列吗? 如果是的话我怎么能看到它,但不承认它?

调试应用程序我没有得到任何异常,它在消息上确认并在会话上提交正确,唯一一次我得到异常的情况是将会话事务设置为false。

链接地址: http://www.djcxy.com/p/76429.html

上一篇: Oracle Mutli Consumer queue message not removed

下一篇: oracle