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

AQ propagation between databases with different NLS_LENGTH_SEMANTICS

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

"ORA-25215: user_data type and queue type do not match"

传播时。

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

create or replace type obj_sepa_msg as object
(
  client    varchar2(50),
  cartridge varchar2(20),
  iban      varchar2(34),
  file_name varchar2(4000),
  data      clob
)

可以在具有不同 NLS_LENGTH_SEMANTICS 的数据库之间传播,但只能传播系统变量有效负载,例如 sys.xmltypesys.number。但是,如果您使用的数据库版本为 11.2.0.3 或更低版本,则不能将它们放入 object type。如果您需要对象类型,您可以这样做。传播到远程数据库时,向订阅者添加转换,以便在传播之前将您的 object type 转换为 sys.xmltype,请注意,您仍然需要指定有效负载为 sys.xmltype。然后在远程数据库中将消息出列后,您可以在 dbms_aq.message_properties_t type 中指定转换,以将 sys.xmltype 转换为您想要的有效负载。