暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 当一个数据库使用直通配置时,跨数据库链路移动数据

askTom 2018-11-10
348

问题描述

有如下设置的来源:

美国语言
Nls _ 领土独联体
NLS_CURRENCY?。
NLS_ISO_CURRENCY CIS
NLS_NUMERIC_CHARACTERS,
Nls _ 日历格里高利
日期格式DD.MM.RR
美国语言
NLS_CHARACTERSET WE8DEC
Nls _ 排序二进制
Nls_time _ 格式HH24:MI:SSXFF
NLS_TIMESTAMP_FORMAT DD.MM.RR HH24:MI:SSXFF
NLS_TIME_TZ_FORMAT HH24:MI:SSXFF TZR
NLS_TIMESTAMP_TZ_FORMAT DD.MM.RR HH24:MI:SSXFF TZR
NLS_DUAL_CURRENCY?。
NLS_NCHAR_CHARACTERSET UTF8
NLS_COMP二进制
Nls_length _ 语义字节
Nls_nchar_conv_exp假

具有设置的接收器:

美国语言
Nls _ 领土独联体
NLS_CURRENCY р。
NLS_ISO_CURRENCY CIS
NLS_NUMERIC_CHARACTERS,
Nls _ 日历格里高利
日期格式DD.MM.RR
美国语言
字符集CL8MSWIN1251
Nls _ 排序二进制
Nls_time _ 格式HH24:MI:SSXFF
NLS_TIMESTAMP_FORMAT DD.MM.RR HH24:MI:SSXFF
NLS_TIME_TZ_FORMAT HH24:MI:SSXFF TZR
NLS_TIMESTAMP_TZ_FORMAT DD.MM.RR HH24:MI:SSXFF TZR
NLS_DUAL_CURRENCY р.
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_COMP二进制
Nls_length _ 语义字节
Nls_nchar_conv_exp假

问题是: 如何从源到接收器收紧西里尔字母中的文本,而无需在源上创建数据库对象。

临时解决方案是:
在源数据库中,将创建一个视图,其中所有文本字段都将转换为RAW
选择...UTL_RAW.cast_to_raw (文本 _ 列) 原始 _ 列... 从...

DB链接和视图在接收器库中创建。
选择。.. UTL_RAW.cast_to_varchar2 (原始 _ 列) 文本 _ 列...从。.. @ DBLink_name;

有解决问题的方法吗?

专家解答

没有方法可以禁用数据库链接中发生的标准 (预期) 字符集转换。因此,如果一个数据库不正确地存储您的西里尔数据 (例如在WE8DEC中),而另一个则正确地存储 (例如在CL8MSWIN1251中),那么从WE8DEC到CL8MSWIN1251的转换将发生,并且将损坏数据。为了避免这种情况,您可以通过将数据移动为RAW来保护数据,也可以修复原始数据库的字符集。

通过将数据转换为RAW来保护数据需要一个中间视图,就像您的示例一样,因为否则您无法控制查询的数据类型转换发生的位置。它可能发生在源数据库中,这是我们需要的,也可能发生在目标数据库中,这将为时已晚,这取决于SQL引擎做出的决定。

您可以使用DMU实用程序的CSREPAIR功能更改原始数据库的 (不正确的) 字符集 (https://docs.oracle.com/cd/E89575_01/DUMAG/ch5_advanced_topics.htm#GUID-71456178-0A83-478B-BE03-272B73303FAC)。

另一个非平凡的解决方案是使用GoldenGate而不是DB link。在GG中,您可以覆盖源数据库字符集,以避免出现问题的转换。当然,GG复制和DB链接是完全不同的数据传输方法。

 

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论