暂无图片
暂无图片
1
暂无图片
暂无图片
1
暂无图片

ORA-24067: 超过队列xxx.SMS_MT_QUEUE的最大订户数量

原创 jieguo 2022-03-29
991

使用oracle aq队列的系统,你可能遇到这个错误:
image.png
当然你可以delete的方式删除数据,避免上述报错但这样会存在高水位问题,将来性能受影响,不推荐。
这时你想清空数据,但报错信息如下:
SQL> truncate table AQ$_SS_MT_TAB_H;
truncate table AQ$_SS_MT_TAB_H
*
ERROR at line 1:
ORA-24005: Inappropriate utilities used to perform DDL on AQ table
test.AQ$_SS_MT_TAB_H

那么对于队列如何清空数据呢?
可以用DBMS_AQADM.PURGE_QUEUE_TABLE方式处理
image.png

DECLARE
qt dbms_aqadm.aq$_purge_options_t;
BEGIN
   qt.block := FALSE;
   DBMS_AQADM.PURGE_QUEUE_TABLE(
     queue_table     => 'TEST.SS_MT_TAB',
     purge_condition => NULL,
     purge_options   => qt);
END;
/
SQL> select sum(bytes) from dba_segments where segment_name='AQ$_SS_MT_TAB_I';

SUM(BYTES)
----------

SQL> select sum(bytes) from dba_segments where segment_name='AQ$_SS_MT_TAB_H';

SUM(BYTES)
----------

SQL>  select sum(bytes) from dba_segments where segment_name='SS_MT_TAB';

SUM(BYTES)
----------
     65536
复制

参考:http://docs.oracle.com/cd/B28359_01/server.111/b28420/aq_admin.htm
image.png

除了上述方法还可以重建队列的方式:(动作稍大,不推荐,了解即可)

1.停止和删除aq
exec dbms_aqadm.stop_queue('sms_mt_queue'); 
exec dbms_aqadm.drop_queue('sms_mt_queue'); 
exec dbms_aqadm.drop_queue_table('ss_mt_tab'); 
/
--2.创建队列表
begin dbms_aqadm.create_queue_table(queue_table=>'ss_mt_tab', queue_payload_type=>'SYS.AQ$_JMS_TEXT_MESSAGE',multiple_consumers => true); end;
/
--3.创建队列
exec dbms_aqadm.create_queue(queue_name=>'sms_mt_queue', queue_table=>'ss_mt_tab');
/
--4.启动队列
EXECUTE DBMS_AQADM.START_QUEUE (Queue_name => 'SMS_MT_QUEUE');
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

墨天轮福利君
暂无图片
3年前
评论
暂无图片 0
您好,您的文章已入选墨力原创作者计划合格奖,10墨值奖励已经到账请查收! ❤️我们还会实时派发您的流量收益。
3年前
暂无图片 点赞
评论