Oracle11g SSIS数据源在Oracle数据库中为单字节时,将字符串列显示为DT_WSTR

Oracle11g SSIS数据源在Oracle数据库中为单字节时,将字符串列显示为DT_WSTR,oracle11g,ssis,bids,Oracle11g,Ssis,Bids,我正在开发一个SSIS包,用于从Oracle 11g数据库的表中提取数据,并将其加载到SQL Server 2014数据库的表中 Oracle数据库中的表具有定义为VARCHAR2的字符串列(单字节/代码页8859-1);SQL Server数据库中的表具有定义为VARCHAR(单字节)的字符串列 但是,当我将OLE DB源/ADO.NET源添加到SSIS包并将其配置为从Oracle源中的表中选择列时,外部列(高级编辑器)将字符串列显示为DT_WSTR(Unicode) 这(请参阅“Oracle

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

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

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

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

如何使OraOLEDB提供程序/SSIS OLE DB数据源以单字节形式公开源中的字符串列

我试过的
  • 将(OLE DB源的)AlwaysUseDefaultCodePage属性设置为true,并将DefaultCodePage属性设置为1252(8859-1是该属性的子集)
  • 将(OLE DB源的)AlwaysUseDefaultCodePage属性设置为true,并将DefaultCodePage属性设置为28591(8859-1的值)
  • 已重新安装Oracle客户端
约束条件
  • 我正在传输2M+行,包执行所需的时间是个问题。理想情况下,我不想在数据流中添加可能对性能产生负面影响的Unicode>非Unicode数据转换
  • 我无法控制Oracle服务器/数据库配置
环境配置 Windows客户端
  • Windows 7 Pro
  • 投标/Visual Studio 2013
  • Oracle客户端11g版本5(仅32位-未安装64位客户端)
  • Oracle NLS_LANG=ENGLISH_UNITED KINGDOM.WE8MSWIN1252(在WOW6432节点注册表中设置-无覆盖环境变量)
SSIS包/数据流任务/OLE DB数据源 LocaleID=英语(联合王国)

客户端会话连接信息
  • CLIENT_CHARSET=UTF8(当使用完整即时客户端从SSI调用查询时)
  • CLIENT_CHARSET=Unknown(使用jdbcthin从SQL开发人员调用查询时)
数据库服务器
  • NLS_语言=英语
  • NLS_地区=联合王国
  • NLS_字符集=WE8ISO8859P1
使用高级编辑器(右键单击组件以将其显示为选项),可以手动设置列的输出类型。见下文:

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


环境变量
NLS_LANG
覆盖注册表设置(如果有)。要确保OraOLEDB客户端使用所需的
NLS_LANG
值,请确保执行SSIS包的用户设置了该环境变量。您可以通过编辑
HKEY_USERS\来实现这一点。您是否可以在OLEDB源的高级编辑器中更改输出列的数据类型?
SELECT * FROM V$SESSION_CONNECT_INFO
SELECT * FROM SYS.NLS_DATABASE_PARAMETERS