问题标签 [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 回答
399 浏览

oracle - 调试 ORA-01000

我正在更改旧的 Spring 应用程序以使用动态配置的连接池。整个系统中的所有查询都使用 JdbcTemplate,或者通过 Jms 连接到 Oracle AQ——我已经检查过,每次获得 ResultSet 时,它都会在 finally{} 块内的框架代码中关闭。在我转向动态配置的连接池之前,该应用程序从未遇到任何问题。我目前使用 C3P0 作为我的连接池,但是使用 DBCP2 和 Atomikos 池也会出现同样的问题。这是问题:

在处理任意时间后(它似乎因应用程序正在执行的操作而有所不同,但最终总是会发生)我用完了连接。出于绝望,我已将连接数提高到 10k,但这只会延长不可避免的时间。我运行这个查询:

果然,

好的,我已经知道我的游标用完了。我知道我在网上看到的下一条建议是运行以下查询:

我一共得到了九排……这些家伙超过了三排。如果我删除“have”子句并将所有游标计数加起来,则大约有 120 个游标。不是10k!

这是应用程序从 JdbcTemplate 正确(也隐式地)关闭的插入语句中隐式获取新序列值。即便如此,41和10k不在一个范围内!

我知道 v$open_cursor 表仅代表“缓存”游标,并且“当前打开的游标”统计中计数的一些游标可能已经标记为“可关闭”。有没有办法弄清楚这些打开的游标中涉及的确切进程或sql?

我尝试了几种方法来试图弄清楚应用程序发生了什么。我创建了一个特殊的数据源包装器,它将包装所有连接、语句、准备好的语句、可调用语句及其所有生成的结果集,将它们保存在内存中的特殊集合中,并在关闭时将它们删除。我以为我可以通过这种方式捕捉到它——相反,通过这个池打开的每一个资源都被关闭了。每最后一个。我什至在连接池和弹簧引擎的内部进行了调试,以观察 Oracle 瘦 ForwardOnlyResultSet 被标记为已关闭。

我几乎可以怀疑问题出在与 AQ 的交互上,只是这种机制在旧版本的应用程序中运行良好。

我什至尝试通过显式捕获 ORA-01000 错误并将其用作硬重置连接池的触发器来解决该问题。只要它在处理简单的任务,它就可以工作,但是对于某些进行数千次数据库操作的大型进程,我在进程完成之前就失去了连接;硬重置连接池会使事务无效,整个事情进入无限循环。情况不好,四面八方。

我完全不知所措......从应用程序方面来看,它看起来完全无懈可击,而从数据库方面来看,通过查看 v$open_cursor,它看起来不像我有很多打开的游标,只是在统计。不幸的是,统计数据似乎很重要。

帮助?

0 投票
2 回答
581 浏览

oracle - 如何在响应式扩展中创建 Hot observable

我正在尝试将响应式扩展与 Oracle AQ 一起使用。当消息到达 Oracle 队列时,它会触发“OracleAQMessageAvailableEvent”,告诉消费者有消息。在 OracleAQMessageAvailableEventHandler 中,消费者调用 OracleAQQueue.Dequeue() 来检索消息。

我已经将上述内容与RX一起使用。以下是我使用的代码。

问题是,如果我在一切正常后订阅消息,但如果我多次订阅消息(即我的应用程序中的多个消费者),那么每个消费者都会尝试调用“_queue.Dequeue()”,并且第一次调用之后的每个调用都会失败如果我们没有新消息。

谁能指导我该怎么做。我认为,我的场景适用于 Hot Observable,但我正在努力解决它。

0 投票
1 回答
2721 浏览

oracle - 如何清除 Oracle 中的高级队列

该文档清楚地说明了如何清除 Oracle AQ:

但是,存储会发生什么变化,尤其是队列表、索引和 LOB 段的高水位标记?是否也需要缩小表?

在生产中,队列几乎总是空的(应该如此),但在我们的测试系统中,由于各种原因,它们会填满数百万行,因此有时需要清空它们。

是否有必要查看基础表和索引,还是自动处理?

非常感谢!

0 投票
0 回答
372 浏览

oracle - oracle AQ 中一个队列可以拥有的最大消息数是多少?

您好我正在使用 Oracle AQ 来满足 jms 要求。在创建队列时是否可以设置任何属性来指定队列可以拥有的最大消息数?

另外,队列可以拥有的默认最大消息数是多少?

0 投票
1 回答
1110 浏览

oracle - Oracle 高级队列 - 订阅者消息跟踪

Oracle Advanced Queuing 如何跟踪订阅者为多消费者队列出列的哪些消息?

USER_QUEUE_SUBSCRIBERS 表跟踪每个队列的订阅者。尽管跟踪给定队列的订阅者状态(例如订阅者出列的最后一条消息是什么?),但我找不到表/视图。

0 投票
1 回答
564 浏览

oracle - 在多消费者队列上使用 ODP.NET OracleAQQueue.Listen

我有一个连接到 Oracle AQ 多消费者队列的客户端应用程序。我想使用 OracleAQQueue.Listen 来监听队列中的新消息。 API 文档显示 Listen 方法可用于多消费者队列。我的监听队列代码如下所示。

我遇到的问题是在我调用 queue.Listen() 的代码行上,我得到了 Oracle 异常:

谷歌搜索有关此特定错误的建议并没有太大帮助。我已经多次将我的订阅者删除并重新添加到队列中,但均无济于事。我的猜测是在调用 Listen 之前我没有正确设置某些属性,但我无法弄清楚问题所在。

有任何想法吗?

0 投票
1 回答
133 浏览

jms - Jboss EAP 6.3 与 OracleAQ jms 的集成

我有在 Jboss eap 6.3 和 Hornetq queue for jms 上工作的应用程序。我必须将队列从 hornetq 更改为 OracleAQ。是否有任何现成的资源适配器来连接它,或者我必须为自己写一个新的?对于我如何实现这一目标的任何提示,我将不胜感激。提前致谢。

0 投票
0 回答
889 浏览

oracle - oracle 12c ODP.NET 64bit 访问冲突异常

我们正在使用 Oracle 12c 64 位 ODP.NET 客户端在 Oracle 12c 数据库上使用 AQ。我们已经能够连接并使用数据库,但在出队消息时偶尔会遇到数据损坏和访问冲突异常 (AVE)。AVE 以一种糟糕的方式终止了我们的应用程序。

我们从运行 Windows Server R2 2012 标准 64 位的机器连接。IDE 是 Visual Studio Professional 2015。

我真的很感激在这个问题上的一些帮助。我们将尝试一些事情,比如使用 32 位客户端

从事件日志:

0 投票
0 回答
503 浏览

c++ - 从 OCCI / C++ 设置 SYS.AQ$_JMS_TEXT_MESSAGE 类型的 Oracle AQ

我有一个用 C++ 编写的应用程序,它需要填充 SYS.AQ$_JMS_TEXT_MESSAGE 类型的队列。

我正在使用 OCCI,一个 C++ API 来操作 Oracle 数据库,并且我已经成功地填充了其他类型的队列。

是否可以使用 OCCI 填充 SYS.AQ$_JMS_TEXT_MESSAGE 类型的队列?

0 投票
2 回答
15043 浏览

plsql - 如何在 Oracle AQ 中停止和启动队列

我必须使用哪些命令来停止或启动 Oracle AQ 队列?

我需要停止队列以执行维护和分析,然后在分析完成后启动队列。