我有一个SSIS包,在多个服务器上运行良好,但在两个新添加的服务器上却无法正常工作。它使用OLEDB(64位,我已经验证过)从一个拥有3个VARCHAR2列的ORACLE数据库中获取数据,并将行插入到具有相同大小的3个nvarchar列的SQL 2012表中。
该包在我们部署的所有服务器上都能完美运行。最近我们添加了两台新服务器,它们应该使用相同版本的软件(我个人检查了可能的主要原因:ODAC、dtexec版本和tns名称),但该包不再工作。它给出了著名的错误提示:
我收到的第一个警告是“无法从Oracle服务器读取代码页”,因此我尝试将“每次使用默认值”与ANSI或UTF-8代码页结合使用(使用此网站获取代码页:https://msdn.microsoft.com/en-us/library/windows/desktop/dd317756%28v=vs.85%29.aspx)。
唯一让我成功的方法是手动修改包中的OLE DB源块,将外部列更改为ansi字符串,使其在开发环境中无法编译,然后放置一个数据转换器,将外部列再次更改为utf-8字符串。这样在其他服务器上无法正常工作,但在“有故障”的服务器上完美运行。
我认为问题不像您可以在任何地方找到的关于此问题的数百万个问题那样。给出错误的是OLE DB源块。我了解数据转换。
提前致谢。
该包在我们部署的所有服务器上都能完美运行。最近我们添加了两台新服务器,它们应该使用相同版本的软件(我个人检查了可能的主要原因: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服务器读取代码页”,因此我尝试将“每次使用默认值”与ANSI或UTF-8代码页结合使用(使用此网站获取代码页:https://msdn.microsoft.com/en-us/library/windows/desktop/dd317756%28v=vs.85%29.aspx)。
唯一让我成功的方法是手动修改包中的OLE DB源块,将外部列更改为ansi字符串,使其在开发环境中无法编译,然后放置一个数据转换器,将外部列再次更改为utf-8字符串。这样在其他服务器上无法正常工作,但在“有故障”的服务器上完美运行。
我认为问题不像您可以在任何地方找到的关于此问题的数百万个问题那样。给出错误的是OLE DB源块。我了解数据转换。
提前致谢。