问题标签 [advanced-queuing]

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 投票
2 回答
4180 浏览

database - Oracle aq 传播,ORA-25215:user_data 类型和队列类型不匹配

我正在处理从一个数据库到另一个数据库的 AQ 传播,但是当我安排传播并将第一条消息排队到 LOCAL AQ 表时,我在 DBA_QUEUE_SCHEDULES.LAST_ERROR_MSG 中遇到错误,“ORA-25215:user_data 类型和队列类型不匹配”。请注意,AQ 表中使用的两种对象类型是相同的,出于测试目的,我使用的是这个:

并且两个 AQ 表也是相同的,我使用相同的脚本创建它们并且只更改了名称,一个 LOCAL 另一个 REMOTE。LOCAL AQ 表在 LOCAL 数据库中,REMOTE 表在 SCHEMA_NAME.REMOTE 数据库中。

这是我用来创建 AQ 表的脚本:

以下是用于创建订阅者、出列程序等的脚本:

本地数据库:

远程数据库:

将消息排队到 LOCAL AQ 表的脚本:

另请注意,在 SYS.AQ$_MESSAGE_TYPES 表(LOCAL db)中,已验证状态 = 'F' 用于创建传播,并且:

返回 0,这意味着表类型不兼容。在我进行了一些挖掘之后,我发现如果 LOCAL 和 REMOTE 数据库 NLS_LENGTH_SEMANTICS 不同,则无法进行远程传播,但是在这种情况下并非如此。我已经检查过了。任何想法是我做错了什么,或者我怎样才能找到这两个表之间的不同之处以及如何解决它?或者它可能是某些数据库参数值之间的差异?

Oracle 数据库 11g 版本 11.2.0.3.0

0 投票
1 回答
205 浏览

database - 具有不同 NLS_LENGTH_SEMANTICS 的数据库之间的 AQ 传播

是否可以在具有不同的两个数据库之间传播 AQ 消息NLS_LENGTH_SEMANTICS,即 LOCAL 数据库具有 BYTE( nls_database_parametersview) 和 REMOTE 数据库具有 CHAR( nls_database_parametersview),如果可以,那么如何?我已经尝试将会话NLS_LENGTH_SEMANTICS参数值设置为BYTE然后重新创建远程数据库 AQ OBJECT_TYPE,用 BYTE 覆盖对象类型属性声明并在本地数据库中创建 OID 类型并在传播中使用转换,但它没有成功,仍然得到

“ORA-25215: user_data 类型和队列类型不匹配”

传播时。

这是我在 AQ 表中使用的对象类型:

0 投票
1 回答
4535 浏览

oracle - Oracle 高级队列 - ORA-38818 - 对已编辑对象的非法引用

似乎需要一些帮助。我正在尝试根据以下脚本基于对象类型构建一些队列表;

0。

1.

2.

类型及其主体编译没有错误,问题发生在;

3.

我收到了这个错误描述;
ORA-38818:非法引用已编辑对象 SCH_UTL.O_UTL_Q_LOG
ORA-06512:在“SYS.DBMS_AQADM”第 81 行
ORA-06512:在第 2 行
38818. 00000 - “非法引用已编辑对象 %s.%s”
*原因: 试图违反“非编辑对象
可能不依赖于已编辑对象”的规则。

以防万一,我正在开发 XE 11g R2。

非常感谢任何人的帮助!

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 投票
1 回答
26 浏览

plsql - 传播时是否可以在远程数据库中指定转换?

Fe 在一个数据库中我有有效载荷类型(varchar2,数字)。在传播时,我添加了转换,指定此有效负载需要转换为 sys.xmlType,因为我在数据库之间有不同的 nls_length_semantics,我不能简单地传播这些对象类型。到目前为止一切顺利,我已经尝试过了,它传播成功。我想要实现的是,在远程数据库中排队时,sys.xmlType 有效负载将转换为类型(varchar2,数字)。可能吗?

所以总而言之,它看起来像这样:

  1. 将消息排入本地队列;

  2. 传播开始;

  3. Payload从对象类型转换为sys.xmlType;

  4. 消息正在排队到远程数据库;

  5. Payload 从 sys.xmlType 转换为 objectType;

  6. 消息已入队。

0 投票
1 回答
199 浏览

oracle - 通过多个队列传播消息

是否可以通过几个队列传播消息?我有两个远程和本地数据库,在远程我有一个 aq 表 AQ1,在本地我有两个 aq 表 AQ2 和 AQ3。是否可以安排从 AQ1 到 AQ2 再从 AQ2 到 AQ3 的传播,所以我在 AQ2 中从 AQ1 收到的消息会自动传播到 AQ3?

我问这个原因我有这个问题,当消息从 AQ1 传播到 AQ2 时,它不会自动传播到 AQ3。当我查看时user_queue_schedules,甚至没有触发到 AQ3 的传播。但是,如果我将消息排队到 AQ2,它确实会传播到 AQ3。

0 投票
1 回答
3501 浏览

plsql - Oracle Advanced QUEUE 不存在是其他模式

我有这个问题中描述的相同问题:Grant permission to queues to another schema in oracle

但是授予其他用户的权限根本不起作用。

我的队列:

使用 schema 创建的此队列USER1。在这个模式中,pkg1当我调用它时,我有一个带有过程的包,它的入队:

我有第二个模式 USER2,他有权pkg1由特定角色 (ROLE1) 执行。但是当他调用 proc1 时,收到下一个错误:

我已经在 USER1 中执行了这个特权命令,但没有成功:

我真的开始了解 Ad.Queues 是如何工作的。我在这里错过了什么吗?谢谢。

EDIT1: 授予此队列特权后:

0 投票
1 回答
404 浏览

xml - 如何使用 Oracle Advanced 通知 XML 更改

我们有一个带有包含 XMLType 属性的 UDT 有效负载的 Oracle 12c AQ。我们可以创建一个在 XMLType 属性匹配某些条件时触发的通知程序吗?

我在网上没有看到任何这样的例子。

edit=> 仅在有效负载的 xml 部分与某些条件匹配的新消息时收到通知。就像是:

仅当有效负载的 XML 部分与条件匹配时,此订阅者才会收到通知。<=结束编辑

0 投票
2 回答
6996 浏览

java - 如何将 Spring Boot JMS 从 ActiveMQ 迁移到 Oracle Advanced Queuing

我正在研究 Spring Boot 和 JMS 示例,是的,我对此很陌生

由于我们使用 Oracle,因此我想将 Spring Boot 和 JMS 示例从 ActiveMQ 迁移到 Oracle Advanced Queueing。但是,我真的发现这方面的信息很少。

据我所知,我需要为 Oracle 版本替换下面的代码,但我没有设法找出方法。

}

源代码可以在Github找到

帮助将不胜感激!

0 投票
4 回答
11939 浏览

java - 如何在 Spring Boot 中实现 Oracle AQ 队列?

我已经了解了如何使用 AQ (Streams?) 包创建 Oracle 数据库。我还在 Oracle 中创建了一些队列(手动)。(使用 PL/SQL 和 SQL)。

但是,我很难从 Spring 建立正确的连接。

以下作品(使用oracle.AQjava包):

(基于https://docs.oracle.com/cd/B10501_01/appdev.920/a96587/apexampl.htm

这表明我可以连接到 Oracle 并使用 AQ 功能。

现在,我正在尝试创建 Java 配置的 bean,以便使用JmsTemplate.

(是的,队列已经存在;-))

使用以下配置类:

并具有 yml 属性:

但是有了这个,我得到了我无法理解的错误:

我相信发生 Cast 异常是因为它是一个ProxyConnection[PooledConnection[oracle.jdbc.driver.T4CConnection@40016ce1]]. 但我不知道如何解决这个问题。