问题描述
嗨,汤姆,
您能否解释一下dbms_aq.dequeue中使用的出队选项dbms_aq.remove和dbms_aq.remove_nodata之间的区别。
2.dbms_aq.dequeue是否会生成比普通delete语句更多的recolog日志
建议使用MSG_ID或dbms_aq.dequeue使用MSGID删除队列表。
你能建议我吗?
谢谢。
您能否解释一下dbms_aq.dequeue中使用的出队选项dbms_aq.remove和dbms_aq.remove_nodata之间的区别。
2.dbms_aq.dequeue是否会生成比普通delete语句更多的recolog日志
建议使用MSG_ID或dbms_aq.dequeue使用MSGID删除队列表。
你能建议我吗?
谢谢。
专家解答
1) 来自
https://docs.oracle.com/database/121/ADQUE/aq_intro.htm#CHDCEDDG
当使用REMOVE_NODATA模式对消息进行出队时,不会检索消息的有效负载。当用户已经检查了消息有效负载 (可能是通过先前的浏览出队) 时,此模式可能会很有用。
因此,实际上我们是在没有收到消息的情况下出队,因为我们要么已经有了,要么不关心它。
2) 并非如此。它类似于在带有几个索引的表上删除 (因为在封面下,这是我们实现消息存储的方式)
不要每个人都针对队列表直接执行DML,因为我们保留随时更改实现的权利。有一天,除了消息等之外,我们可能会在MSG_ID列中存储 * 其他 * 内容。
https://docs.oracle.com/database/121/ADQUE/aq_intro.htm#CHDCEDDG
当使用REMOVE_NODATA模式对消息进行出队时,不会检索消息的有效负载。当用户已经检查了消息有效负载 (可能是通过先前的浏览出队) 时,此模式可能会很有用。
因此,实际上我们是在没有收到消息的情况下出队,因为我们要么已经有了,要么不关心它。
2) 并非如此。它类似于在带有几个索引的表上删除 (因为在封面下,这是我们实现消息存储的方式)
不要每个人都针对队列表直接执行DML,因为我们保留随时更改实现的权利。有一天,除了消息等之外,我们可能会在MSG_ID列中存储 * 其他 * 内容。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。