是否可以在两个具有不同NLS_LENGTH_SEMANTICS
的数据库之间传播AQ消息,即LOCAL数据库具有BYTE(nls_database_parameters
视图),REMOTE数据库具有CHAR(nls_database_parameters
视图),如果那怎么样?我已经尝试将会话NLS_LENGTH_SEMANTICS
参数值设置为BYTE
,然后重新创建REMOTE数据库AQ OBJECT_TYPE,使用BYTE覆盖对象类型属性声明并在本地数据库中创建OID类型并使用transform in propagation,但它没有成功,仍然没有得到
" ORA-25215:user_data类型和队列类型不匹配"
传播。
这是我在AQ表中使用的对象类型:
create or replace type obj_sepa_msg as object
(
client varchar2(50),
cartridge varchar2(20),
iban varchar2(34),
file_name varchar2(4000),
data clob
)
答案 0 :(得分:0)
可以在具有不同NLS_LENGTH_SEMANTICS
但仅限于系统变量有效负载的数据库之间传播,例如sys.xmltype
或sys.number
。但是,如果您使用的是数据库版本11.2.0.3或更低版本,则无法将它们放入object type
。如果你需要对象类型,你可以做这样的事情。传播到远程数据库时向用户添加转换,以便在传播之前将object type
转换为sys.xmltype
,请注意您仍需要指定有效负载为sys.xmltype
。然后,在远程数据库中出列消息后,您可以在dbms_aq.message_properties_t type
中指定转换,以将sys.xmltype
转换为所需的有效负载。