【问题标题】:SSIS Data Source Shows String Column as DT_WSTR When it is Single Byte in Oracle DatabaseSSIS 数据源在 Oracle 数据库中为单字节时将字符串列显示为 DT_WSTR
【发布时间】:2016-05-17 14:29:24
【问题描述】:

我正在开发一个 SSIS 包,用于从 Oracle 11g 数据库中的表中提取数据并将其加载到 SQL Server 2014 数据库中的表中。

Oracle 数据库中的表具有定义为 VARCHAR2 的字符串列(单字节/代码页 8859-1); SQL Server 数据库中的表具有定义为 VARCHAR(单字节)的字符串列。

但是,当我将 OLE DB 源/ADO .NET 源添加到 SSIS 包并将其配置为从 Oracle 源中的表中选择列时,外部列(高级编辑器)将字符串列显示为 DT_WSTR(Unicode )。

Oracle article(请参阅“Oracle Unicode 支持如何工作”部分)建议“当客户端字符集不是服务器字符集的超集或数据库字符集是多字节字符集时,OraOLEDB 会自动启用Unicode 模式。”

如何让 OraOLEDB 提供程序/SSIS OLE DB 数据源将源中的字符串列公开为单字节?

我尝试过的

  • 将(OLE DB 源的)AlwaysUseDefaultCodePage 属性设置为 true,并将 DefaultCodePage 属性设置为 1252(8859-1 是此属性的子集)。
  • 将(OLE DB 源的)AlwaysUseDefaultCodePage 属性设置为 true,并将 DefaultCodePage 属性设置为 28591(8859-1 的 Windows equivalent)。
  • 重新安装了 Oracle 客户端。

约束

  • 我正在传输 2M+ 行,并且包执行所需的持续时间是一个问题。理想情况下,我不想向可能对性能产生负面影响的数据流添加 Unicode > 非 Unicode 数据转换转换。
  • 我无法控制 Oracle 服务器/数据库配置。

环境配置

Windows 客户端

  • Windows 7 专业版
  • 投标/Visual Studio 2013
  • Oracle 客户端 11g 修订版 5(仅限 32 位 - 未安装 64 位客户端)
  • Oracle NLS_LANG = ENGLISH_UNITED KINGDOM.WE8MSWIN1252(在 Wow6432Node 注册表中设置 - 没有覆盖环境变量)

SSIS 包/数据流任务/OLE DB 数据源

LocaleID = 英语(英国)

客户端会话连接信息

SELECT * FROM V$SESSION_CONNECT_INFO
  • CLIENT_CHARSET = UTF8(当使用完整即时客户端从 SSIS 调用查询时)
  • CLIENT_CHARSET = 未知(当使用 jdbcthin 从 SQL Developer 调用查询时)

Oracle 服务器

SELECT * FROM SYS.NLS_DATABASE_PARAMETERS
  • NLS_LANGUAGE = 英语
  • NLS_TERRITORY = 英国
  • NLS_CHARACTERSET = WE8ISO8859P1

【问题讨论】:

  • OLEDB Source的高级编辑器中的输出列的数据类型不能改一下吗?

标签: oracle11g ssis bids


【解决方案1】:

正如您已经指出的,当您的客户端字符集不是数据库的超集时,Oracle 客户端会使用“unicode mode”。数据库的字符集肯定是WE8ISO8859P1。您的客户的字符集尚未确定。客户端会话连接信息不是可靠来源。

环境变量NLS_LANG 会覆盖注册表设置(如果有)。要确保 OraOLEDB 客户端使用所需的 NLS_LANG 值,请确保执行 SSIS 包的用户设置了该环境变量。你可以意识到这一点,例如通过编辑HKEY_USERS\<that user's id>\Environment\NLS_LANG。我建议先让它等于数据库WE8ISO8859P1,以排除WE8MSWIN1252 不被Oracle 客户端视为超集。

this 上的优秀文章。

【讨论】:

    【解决方案2】:

    使用高级编辑器(右键单击组件以将其显示为选项),您可以手动设置列的输出类型。请参阅下面的文章:

    http://www.sqlservergeeks.com/sql-server-data-type-conversion-options-in-ssis/

    【讨论】:

    • 假设隐式转换可能并不总是有效,msdn 文档中有一个大矩阵显示可以/不能以这种方式转换
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2020-11-06
    • 2022-06-19
    • 1970-01-01
    相关资源
    最近更新 更多