SSIS连接Oracle参考
Wu Shuo
Vanceinfo
相关知识:
1, 理解服务器之间的访问机制:连接oracle的时候,是按照SQL Server 引擎的版本去载入oracle provider的版本。如果SQL Server是64bit的,只能载入64 bit oracle的provider。32bit的SQL Server只能使用32bit的oracle的provider。
2, 很多SQL Server的图形界面工具都是32bit的,比如SSIS,32位的 import/export wizard,这些32bit的工具只能load 32 bit的oracle provider。如果想知道这个工具是不是32bit的,去检查工具所对应的exe文件是不是在program files(x86)子路径下,或者在进程管理器中检查是否带有32字样。
3, Linked server或SSIS去 连接oracle的时候,首先会读取a文件,然后读取a文件,然后用直接去连oracle,连接成功以后会再次读取a
文件,然后开始载入oracle OLEDB的DLL文件。在64位操作系统上安装的32位SQL Server中,读到的路径是这样的:oracle10g客户端安装步骤
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.1.2.118)(PORT=1521))(CONNECT_DATA=(SID=express)(CID=(PROGRAM=D:\Program Files (x86)\Microsoft SQL Server\MSSQL.1\MSSQL\)(HOST=SCT-IT-SQLTEST)(USER=SYSTEM))))
在64 bit的操作系统上按照32 bit的SQL Server服务器以及32 bit的oracle客户端,是可以创建linked server和SSIS程序包的。但是,oracle在处理包含括号文件全路径名称时有个bug,这个bug在8i,9i和10g的版本上都存在。必须通过打oracle的补丁来解决。
4, 如果使用64 bit的SQL Server服务器和64 bit 的oracle 客户端,linked server和SSIS是可以工作的。但是oracle在64 bit的OLEDB provider上有个bug,会导致连接服务器访问失败。报错信息如:
Msg 7333, Level 16, State 2, Line 1
Cannot fetch a row using a bookmark from OLE DB provider "OraOLEDB.Oracle" for
linked server <linked server name>.
这个问题在32位环境下使用32位 MSDAORA (Microsoft’s OLEDB Provider for Oracle) provider或者32-bit ORAOLEDB (Oracle’s OLEDB Provider) provider时不会发生。只发生在使用64-bit ORAOLEDB provider时(MSDAORA没有64位版本存在)。
5, 如果在一个64 位的SQL Server上想同时使用linked server和SSIS的BIDS去连oracle,必须要同时安装64 位和32位的oracle客户端。但是,在oracle 10g早期的版本中,貌似有一个bug导致oracle 10g的32 位和64 位客户端无法同时在一台机器上工作。我这次在11g和10g上都安装了双客户端,没有遇到这个问题,但不确定该问题是否已经被解决。
6, 32 位上还可以使用oracle的ODBC driver 创建ODBC数据源,然后在创建连接的时候使用Microsoft OLEDB for ODBC provider 然后指向oracle的ODBC数据源。如果是64位的SQL Server 2005,默认安装是没有64bit的Microsoft OLEDB for ODBC provider的。需要去下载并安装64 位 Microsoft OLEDB for ODBC provider,然后就可以按照同样的方法使
用oracle的ODBC。www.microsoft/downloads/details.aspx?FamilyID=000364db-5e8b-44a8-b9be-ca44d18b059b&displaylang=en
7, 使用oracle ODBC provider比较容易遇到中文字符的问题,建议尽量使用OLEDB的provider。
步骤:
1, 根据Oracle版本(10g或11g),安装相对应的64位客户端Administrator模式,并配置相应的LISTENER和SERVICE NAME。
2, 安装32位Administrator模式客户端,并配置相应的LISTENER和SERVICE NAME。
3, 在SSIS中使用Oracle Provider for OLEDB连接即可。
常见问题:
1, 设计时运行正常,运行时报TNS无法解析的错误。
在BIDS设计环境下,只有32位的本地服务命名可以正确连接。而在运行时需要64位程序调用包时(例如SQLServer存储过程),则需要改为64位命名。因此,我建议在双客户端下都建立本地服务命名,并以包配置的形式保存连接字符串。这样在切换运行环境时,只需要修改一下连接串中的命名即可。
2, 遇到Oracle数据可以预览,但执行ETL出错的问题。
检查SSIS工程属性,将Run64BitRuntime置为False。
3, 执行包正常,用作业调用时包卡住。
检查包日志。一般来说此类问题是SQL Server Agent操作账号的权限不够,无法获取全部Oracle连接信息导致。将SQL Server Agent操作账号从Local System改为Administrator即可。
4, RAC集连接
当配置oracle客户端服务名以便应用程序访问ORACLE数据库时,一般使用oracle实例的虚IP。这样当ORACLE RAC 中的一个实例DOWN掉后,ORACLE RAC会自动切换到另一个实例。但是通过这样配置的ORACLE 服务名,客户端在利用它连接ORACLE数据库时,会经常提示ORA-12545错误。关于连接Oracle RAC 不到主机问题,请尝试以下方法看是否能解决:
方法一:修改ORACLE客户端所在的机器上的HOSTS文件来解决这个问题。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。