问题标签 [oracle-aq]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1725 浏览

oracle10g - Oracle AQ 异步通知

我计划在 OLTP 应用程序中使用 Oracle AQ 异步通知功能。在高峰时段,它排队的消息数量可能会在一分钟内达到 1000 条。出队回调过程将处理消息并将条目插入到由消息类型确定的表中。

我担心的是,它生成的大量入队通知(每个通知依次调用的 PL/SQL 回调过程)是否会导致数据库争用?是否建议为此目的使用异步通知,或者我应该使用出队轮询过程,我可以在连续循环中一次将一条消息出队。

我的数据库版本是10gR2

非常感谢您的专家帮助!

0 投票
1 回答
1032 浏览

oracle - Oracle AQ - 队列消息复制

我们正在升级我们的基础架构,为此我们正在从 Oracle 10g 迁移到 11g。

我们正在使用 Oracle GoldenGate 进行数据复制,据我们所知,它不支持 AQ 消息的复制。

对于持久队列,我们​​有可用的导入/导出选项。但是也有一些缓冲队列需要复制。

任何人都可以指导我们如何在这种情况下避免数据丢失。

感谢任何帮助。

0 投票
1 回答
986 浏览

oracle - Oracle AQ dequeue 方法的建议

我需要将来自 Oracle 队列的消息连续出列。

据我所知,我们可以通过两种方式使消息出队,通过异步自动通知方法或通过手动轮询过程,一次可以将一条消息出队。

我不能使用异步通知功能,因为它在高峰时段接收到的消息数量可能会在 5 分钟内达到 1000 条,而且我不想通过在后台产生多个回调过程来使数据库过载。

通过手动轮询过程,我可以创建一个 24*7 运行的一次性调度程序作业,该作业调用一个存储的 proc,在 WAIT 模式(一种侦听消息)的循环中使消息出队。这种方法的问题是 1) 调度程序作业连续运行并占用一个永久作业槽 2) 存储过程不会退出,因为它在循环中运行以等待消息。

是否有任何替代/更好的解决方案,我不需要让工作/程序不断运行以查找消息?

我可以使用自动通知方法来获取第一条消息的通知,取消订阅订阅者并将更多消息出列并在没有更多消息时再次订阅队列吗?这是一种安全的方法吗,我会在订阅和取消订阅之间丢失任何消息吗?顺便说一句,我们使用 Oracle 10gR2 数据库,所以我不能使用 PURGE ON NOTIFICATION 选项。

感谢您的专家解决方案!!

0 投票
1 回答
459 浏览

java - 数据库故障转移后基于 Spring 的 JMS 使用者未启动

我正在为我的应用程序编写基于 Spring 的 JMS 消费者,在阳光明媚的日子里一切正常,但是如果数据库机器重新启动,它会停止工作并且没有与数据库建立连接,而其他数据库组件则获得正确的数据库连接。如果我仅重新启动 oracle 消费者的 orcl 服务可以正常工作,但如果我重新启动整台机器,它们将无法正常工作。

0 投票
0 回答
164 浏览

sql - dbms_aq 包方法不可访问

我在这件事上头疼了一天。我无法调用 dbms_aq 包方法。这是我的代码。

我正在尝试从触发器调用此过程,并且我检查了它是否被正确调用。但不能调用 dbms_aqadm 和 dbms_aq 程序。

当不从触发器调用时,这可以正常工作。

任何想法?

0 投票
2 回答
209 浏览

java - 通过 VPN 收听 Oracle AQ

我正在尝试从位于数据中心的 My DB 接收通知。当我在与数据库相同的网络上时,我可以收到通知,但是当通过 VPN 连接时,没有通知。谁能告诉我如何通过 VPN 收听 AQ。

0 投票
1 回答
3014 浏览

oracle - 注册订阅者未从队列中获取消息

我们有一个在 Oracle 11.2 上使用 Oracle AQ 的流程。它工作得很好,昨天购买,队列中的消息停止发送给订阅者。这是我们必须创建队列和注册处理程序的设置。

所以现在,当消息发布到队列时,我运行这个查询:

并且所有消息都处于 READY 状态。当我查询 v$process 时,我看到程序“QMNC”正在按照这个Oracle 故障排除文档运行。我可以通过调用 DBMS_AQ.dequeue() 手动使消息出队。任何有关如何排除故障的建议将不胜感激!

0 投票
1 回答
6922 浏览

java - 如何在使用 Java 提交时在 Oracle AQ 表上排队并使用 JMS 客户端使用

我正在为企业级产品编写 Java 组件,并希望利用 Oracle 11g 数据库的特定功能,即活动队列。我想要完成的确切场景是 - 1. 在提交时将消息写入 oracle 活动队列/队列表 2. 使用 JMS 使用者从队列中读取该消息

我遵循了http://docs.oracle.com/cd/B28359_01/java.111/b31224/streamsaq.htm上的演示和教程

特别是,我想关注代码的入队部分 -

这对我来说很好,因为我们希望确保消息仅在事务提交时对消费者可见。

问题 - 在演示中,我们创建了有效载荷类型 RAW 的队列

通过使用在 RAW 中创建的队列,我可以将消息排入队列,但是 JMS 消费者无法订阅队列,从而引发(空指针)异常,消费者需要预期类型的​​参数。简而言之,这段代码在 init 上抛出了一个空指针异常。

JNDI.properties

尝试在 Camel 中设置消费者时,我遇到了类似的异常。

通过一些研究,我认为队列有效负载类型可能是问题所在。因此,我更改了队列表创建脚本并使用 JMS 消息作为有效负载类型

在这种情况下,JMS 消费者能够连接,但入队代码现在失败 - ORA-25215:用户数据类型和队列类型不匹配

问题是如何将来自 Java 生产者的仅在提交时可见的消息排入队列并能够与骆驼或通用 JMS 消费者一起使用?

约束(过滤掉网上已有的一些答案) - 不能使用 PL/SQL、spring 事务、JTA。我已经看到了诸如如何使用 Java 将 JMS 消息排入 Oracle AQ之类的示例,其中队列表是使用 SYS.AQ$_JMS_MESSAGE 类型创建的,但示例生产者是 JMS MessageProducer 而不是 Oracle 指南中的那个。我不是试图将 JMS 消息 (AQJmsMessage) 排入队列,而是使用 Oracle 指南中解释的 AQMessage 类型,并使用提交时可见选项。

我的感觉是,如果问题仅基于负载类型的不匹配,那么消费者端必须进行一些配置来指定负载类型,或者生产者端能够以 JMS 消费者的方式编写消息理解。有没有办法做到这一点?

0 投票
0 回答
406 浏览

oracle-aq - 带有特定标头的 Oracle AQ 出列消息

我在 Oracle 中有一个“进程”和一个“Process_DLQ”。无法处理的消息将在最大重试次数后转发到 DLQ。每条消息还有一个带有循环计数的自定义标题。

我想在 PL/SQL 中做的是将所有消息排入队列,这些消息的循环计数小于 X。我没有找到传递消息选择器的方法。有没有办法只浏览消息而不使它们出队?我只会在条件匹配时出队。就像 JMS 浏览器 API 允许我们使用的一样。

0 投票
1 回答
307 浏览

java - JMS TextMessage - 部署到 WebLogic 后不起作用

将我的应用程序从 OC4J 迁移到 WebLogic 10.3.6 服务器后,我遇到了一个奇怪的问题。

我的应用程序将JMS TextMessage生成到 OracleAQ 队列中。它工作正常。但是在将应用程序部署到 WebLogic 之后,生成的文本消息被存储在USER_DATA_TEXT_LOB(clob) 列而不是USER_DATA_TEXT_VC底层队列中的 (varchar2) 列中,而USER_DATA_TEXT_LEN它非常少(少于 1k 个字符)。

因此,消费者应用程序无法将消息出列并抛出错误:Payload is NULL.

感谢这方面的任何帮助。

更新:

我已经尝试使用 jms BytesMessage 并且它按预期工作。