在Oracle 12.2c中,清除队列don';更新计数器un gv$aq
我在Oracle 12.2c中遇到了一个问题,该代码在Oracle 10g中运行良好: 我创建一个消息队列:在Oracle 12.2c中,清除队列don';更新计数器un gv$aq,oracle,queue,Oracle,Queue,我在Oracle 12.2c中遇到了一个问题,该代码在Oracle 10g中运行良好: 我创建一个消息队列: begin dbms_aqadm.create_queue_table( queue_table => 'QT_test', queue_payload_type => 'RAW', storage_clause => 'PCTFREE 0 PCTUSED 99', sort_list => 'ENQ_TIME', comment => 'Test
begin
dbms_aqadm.create_queue_table(
queue_table => 'QT_test',
queue_payload_type => 'RAW',
storage_clause => 'PCTFREE 0 PCTUSED 99',
sort_list => 'ENQ_TIME',
comment => 'Test Queue Table',
secure => FALSE);
dbms_aqadm.create_queue(
queue_name => 'Q_Test',
queue_table => 'QT_test',
queue_type => dbms_aqadm.NORMAL_QUEUE,
max_retries => 3,
retry_delay => 1);
end;
我将消息排入队列并毫无问题地查看它:
declare
eq_msgid RAW(16);
usermsg RAW(160);
eq_opt dbms_aq.enqueue_options_t;
msg_prop dbms_aq.message_properties_t;
BEGIN
msg_prop.priority := 1;
eq_opt.visibility := dbms_aq.immediate;
msg_prop.delay := dbms_aq.no_delay;
msg_prop.expiration := 1;
dbms_aqadm.start_queue('Q_Test');
dbms_aq.enqueue('Q_Test', eq_opt, msg_prop, usermsg, eq_msgid);
COMMIT;
end;
/
SELECT * FROM GV$AQ GV, all_queues AQ WHERE OWNER = USER AND GV.QID = AQ.QID AND
AQ.QUEUE_TABLE='QT_TEST';
SELECT * FROM AQ$QT_TEST;
我执行清除,但计数器未更新:
declare
po dbms_aqadm.aq$_purge_options_t;
begin
po.block := false;
dbms_aqadm.purge_queue_table(queue_table => 'QT_TEST',purge_condition => NULL,purge_options => po);
end;
/
SELECT * FROM GV$AQ GV, all_queues AQ WHERE OWNER = USER AND GV.QID = AQ.QID AND
AQ.QUEUE_TABLE='QT_TEST';
SELECT * FROM AQ$QT_TEST;
我无法在QT中显示消息,我无法将任何内容出列,但GV$AQ中的计数器显示旧消息的计数