SSIS无法在unicode和非unicode

时间:2016-08-26 06:47:48

标签: sql-server oracle unicode ssis

我有一个SSIS软件包,可以在各种服务器上完美运行,但不会在2个新添加的服务器上运行。 它使用OLEDB(64位,我认证)来从具有3个VARCHAR2列的表中的ORACLE数据库获取数据,并将这些行插入到具有3个nvarchar列的SQL 2012表中,具有相同的大小。

该软件包在我们部署的所有服务器中运行良好。我们最近添加了2台新服务器,希望(我个人检查可能的主要罪魁祸首:ODAC,dtexec版本,tns名称)相同的软件具有相同的版本,但该软件包不再工作。它给我们带来了一个着名的错误:

   Description: Column "C_CODE" cannot convert between unicode and non-unicode s
tring data types.
End Error
Error: 2016-08-26 08:33:26.20
   Code: 0xC02020F6
   Source: Upsert Lines OLE DB Source [87]
   Description: Column "S_DESC" cannot convert between unicode and non-unicode s
tring data types.
End Error
Warning: 2016-08-26 08:33:26.20
   Code: 0x800470C8
   Source: Upsert Lines OLE DB Source [87]
   Description: The external columns for OLE DB Source are out of synchronizatio
n with the data source columns. The external column "C_CODE" needs to be updated
.
The external column "S_DESC" needs to be updated.
End Warning

我得到的第一个警告是"无法从Oracle服务器读取代码页"所以我试着把"每次使用默认值#34;与ANSI或UTF-8代码页结合使用(使用此网站获取代码页:https://msdn.microsoft.com/en-us/library/windows/desktop/dd317756%28v=vs.85%29.aspx)。

我使其工作的唯一方法是通过将外部列更改为ansi字符串来手动将OLE DB Source块修改为包,使其在dev环境中不可编译,然后进行数据转换以更改exernal列再次为utf-8字符串。 这样它在其他服务器上不起作用,但在“故障”中完美无缺。服务器

我当时认为软件包无法从Oracle服务器读取代码页的事实是罪魁祸首,但我无法弄清楚如何修复它。

问题不在于你可以在任何地方找到关于这个问题的数百万个问题。给出的错误来自OLE DB Source块。我知道数据转换。

提前致谢

3 个答案:

答案 0 :(得分:1)

问题是NLS_LANG注册表项的值,它被设置为不正确的值。 我通过删除所述密钥解决了,一切正常。

答案 1 :(得分:1)

只是偶然发现了这篇文章(以及许多其他有关此问题的文章),并相信我已经找到了根本原因。至少在我的服务器上,64位版本的Windows Oracle驱动程序在安装过程中存在错误。我已经检查了32位版本,并且此错误不存在,这可以解释行为。

似乎64位版本在错误的位置创建了NLS_LANG注册表项。默认情况下,64位驱动程序在此处创建它-“ HKEY_LOCAL_MACHINE \ SOFTWARE \ ORACLE”

我在这里手动创建了它-“ HKEY_LOCAL_MACHINE \ SOFTWARE \ ORACLE \ KEY_OraClient12Home1”,该问题已解决。作为参考,我的NLS_LANG密钥设置为“ ENGLISH_UNITED KINGDOM.WE8MSWIN1252”。我只是在上面的分支中将它创建为字符串的副本。

我希望这对其他人有帮助。

答案 2 :(得分:0)

我们使用 32 位 SSIS 和 Oracle 即时客户端,我需要在这个注册位置添加条目

"Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ORACLE\KEY_OraClient12Home1_32bit"

“NLS_LANG” 值为 “AMERICAN_AMERICA.WE8MSWIN1252”。这解决了我的问题。