无法从 Oracle Advanced 异常队列中删除消息

Posted

技术标签:

【中文标题】无法从 Oracle Advanced 异常队列中删除消息【英文标题】:Can't DELETE message from Oracle Advanced exception Queue 【发布时间】:2018-04-25 19:50:30 【问题描述】:

例如,我有一个包含 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'

【问题讨论】:

【参考方案1】:

高级队列表被其他用户锁定,但我没有收到关于它的好消息。

我运行了以下命令来弄清楚:

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;

【讨论】:

以上是关于无法从 Oracle Advanced 异常队列中删除消息的主要内容,如果未能解决你的问题,请参考以下文章

在作业过程中引用作业编号 - oracle plsql

Machine Learning with Oracle Database Advanced Analytics

《Advanced Data Structures》读书笔记

Oracle Advanced Queuing 之03(订阅&通知)

DataProcessor简易的通用多进程数据生成工具类(Advanced for HVD)

怎么解决无法找到系统文件apache2的异常