问题描述
有如下设置的来源:
美国语言
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;
有解决问题的方法吗?
美国语言
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链接是完全不同的数据传输方法。
通过将数据转换为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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle DataGuard高可用性解决方案详解
孙莹
426次阅读
2025-03-26 23:27:33
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
385次阅读
2025-04-15 17:24:06
墨天轮个人数说知识点合集
JiekeXu
364次阅读
2025-04-01 15:56:03
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
357次阅读
2025-04-08 09:12:48
Oracle SQL 执行计划分析与优化指南
Digital Observer
329次阅读
2025-04-01 11:08:44
Oracle 19c RAC更换IP实战,运维必看!
szrsu
296次阅读
2025-04-08 23:57:08
风口浪尖!诚通证券扩容采购Oracle 793万...
Roger的数据库专栏
293次阅读
2025-03-24 09:42:53
切换Oracle归档路径后,不能正常删除原归档路径上的归档文件
dbaking
287次阅读
2025-03-19 14:41:51
oracle定时任务常用攻略
virvle
286次阅读
2025-03-25 16:05:19
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
272次阅读
2025-04-15 14:48:05