无法从 Oracle 高级异常队列中删除消息
Can't DELETE message from Oracle Advanced exception Queue
例如,我有一个包含 3 条消息的异常高级队列。如果我尝试将它们出列,它工作正常,但在我的应用程序中,我需要通过 MSGID 删除其中的一些。我尝试使用 SQL 命令,但它延迟了很多,然后我超时了。
高级队列:
CREATE_QUEUE_TABLE (
queue_table => 'AQUSER.event_message_queue_qt',
queue_payload_type => 'AQUSER.EventMessageType',
sort_list => 'ENQ_TIME, PRIORITY');
CREATE_QUEUE (
queue_name => 'AQUSER.event_message_queue',
queue_table => 'AQUSER.event_message_queue_qt',
max_retries=> 10,
retry_delay=> 600);
CREATE_QUEUE (
queue_name => 'AQUSER.event_message_queue_ex_q',
queue_table => 'AQUSER.event_message_queue_qt',
queue_type => DBMS_AQADM.EXCEPTION_QUEUE);
正在尝试通过 MSGID 删除:
select * from event_message_queue_qt
where Q_NAME = 'event_message_queue_ex_q'
and MSGID = '6AA2E0C9A14ABA97E053119A14333514'
高级队列 table 已被其他用户锁定,但我没有收到有关它的好消息。
我运行下面的命令来弄清楚:
select
(select username from v$session where sid=a.sid) blocker,
a.sid,
' is blocking ',
(select username from v$session where sid=b.sid) blockee,
b.sid
from v$lock a, v$lock b
where a.block = 1
and b.request > 0
and a.id1 = b.id1
and a.id2 = b.id2;
例如,我有一个包含 3 条消息的异常高级队列。如果我尝试将它们出列,它工作正常,但在我的应用程序中,我需要通过 MSGID 删除其中的一些。我尝试使用 SQL 命令,但它延迟了很多,然后我超时了。
高级队列:
CREATE_QUEUE_TABLE (
queue_table => 'AQUSER.event_message_queue_qt',
queue_payload_type => 'AQUSER.EventMessageType',
sort_list => 'ENQ_TIME, PRIORITY');
CREATE_QUEUE (
queue_name => 'AQUSER.event_message_queue',
queue_table => 'AQUSER.event_message_queue_qt',
max_retries=> 10,
retry_delay=> 600);
CREATE_QUEUE (
queue_name => 'AQUSER.event_message_queue_ex_q',
queue_table => 'AQUSER.event_message_queue_qt',
queue_type => DBMS_AQADM.EXCEPTION_QUEUE);
正在尝试通过 MSGID 删除:
select * from event_message_queue_qt
where Q_NAME = 'event_message_queue_ex_q'
and MSGID = '6AA2E0C9A14ABA97E053119A14333514'
高级队列 table 已被其他用户锁定,但我没有收到有关它的好消息。
我运行下面的命令来弄清楚:
select
(select username from v$session where sid=a.sid) blocker,
a.sid,
' is blocking ',
(select username from v$session where sid=b.sid) blockee,
b.sid
from v$lock a, v$lock b
where a.block = 1
and b.request > 0
and a.id1 = b.id1
and a.id2 = b.id2;