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