【发布时间】:2013-10-29 23:35:19
【问题描述】:
我们有一个 SSIS 包将数据从 Oracle 数据库下载到 SQL Server 数据仓库。对于这个数据仓库,设置了几个环境;开发、测试和生产。开发和测试共用一台机器,Prod 是独立的。
当 SSIS 包在 PROD 机器上运行时,它将 Varchar2 列从我们的 Oracle 源数据库以 DT_WSTR 格式下载到 MSSQL,并将其保存到 NVarchar 列。 IE。所涉及的所有步骤都支持 Unicode。
当同一个包在 DEV/Test 框上针对同一个源数据库运行时,它以某种方式将外部列视为 Varchar,将其派生到数据流中的 DT_STR 并拒绝将其存储在 NVarchar 列中。
所有操作系统都是 Win2K8r2,MSSQL 2008 64 位。包在 32 位模式下运行,从 BIDS 或 SQL 代理运行时会看到相同的行为。
有人想知道为什么吗?我已经看到了禁用验证外部元数据的建议 (https://stackoverflow.com/a/18383598/2903056),但这对我们的情况来说不是一个实用的建议。
【问题讨论】:
-
尝试文本,而不是 DT_STR
-
很抱歉,更改包的内容不是一个选项(此时)。我相信如果一个盒子能正确地做到这一点,另一个也可以。只是这个问题在很多包中都出现了......
-
每个环境的 Oracle 源代码是否相同?比较您的 SQL Server 语言环境/排序规则?
-
是的,在这两种情况下,Oracle 源都是同一台服务器上的同一个数据库。 SQL Server 具有相同的排序规则和区域设置;唯一的例外是我们的 PROD 机器上的Locaton 设置。这设置为美国,DEV 设置为荷兰。我已手动编辑注册表以将所有 NLS_LANGUAGE 键设置为 AMERICAN。
-
当您查看源转换的输出列的高级属性时,指定输出为 varchar2 列的 SSIS 数据类型是什么?您是否仔细检查以确保它在两种环境中都相同?