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