SSIS连接Excel、Oracle 32位64位驱动
概述
本文针对SSIS连接Excel、Oracle等数据源的驱动问题做出解释,并给出一般解决办法。
问题
(1)在VS里开发SSIS包运行正常,在定时调度报错:“由于初始化连接程序时出错……
(2)明明装了oracle客户端,VS就是报找不到驱动程序
(
SSIS 错误代码 DTS_E_OLEDB_NOPROVIDER_64BIT_ERROR。所请求的 OLE DB 访问接口 MSDAORA.1 尚未注册 -- 可能是由于没有可用的 64 位访问接口。错误代码: 0x00000000。
已获得 OLE DB 记录。源:“Microsoft OLE DB Service Components” Hresult: 0x80040154 说明:“没有注册类”。
)
这些错误在连接Excel、oracle、informix的过程中都有可能遇到。
原因
关于32位和64位程序
(1)64位的操作系统下可以运行32位、64位的程序,32位操作系统可以运行32位程序,不能运行64位程序。
(2)32位程序需要32位的驱动,64位程序需要64位的驱动。
(3)这里的程序并不包括SSIS包,SSIS包只是个xml文件,并没有32位64位之分(PS:但“脚本任务”是VB或C#等语言编写的,也会被编译)。
常用的软件和驱动
(1)微软的VS环境只有32位的(即使随64位的sqlserver安装的也是32位的VS),32位的VS编辑时会去找32位的驱动,所以如果需要在VS中编辑SSIS包,需要安装32位的驱动。如果你只装了64位的驱动,就会无法编辑程序。但是也许可以运行。
(2)连接Oracle的驱动常见的有两种,一个是微软做的MSDAORA.1,这个驱动程序只有32位的;另一个是oracle做的OraOLEDB.Oracle.1,这个驱动既有32位也有64位,对应着就是oracle32、64位的客户端,这两个客户端是可以共存的。

(3)plsql developer只有32位的,但是通过一定的配置可以使用64位的oralce客户端连接到oracle数据库。
(4)连接informix的驱动也有32、64位,也可以共存。
(5)常见连接excel的驱动有jet4和AccessDatabaseEngine两种,jet4只有32位的;AccessDatabaseEngine 有32位和64位的驱动,但是最坑爹的是他们不能共存。前面介绍说VS只有32位的,所以开发SSIS时必须用AccessDatabaseEngine32位驱动,但是运行时如果是64位的run程序来跑就会报错,就会造成这样的问题“能开发的机器不能运行,能运行的机器不能开发”
解决
(1)连接Oracle的64位SSIS环境安装:
无论开发还是运行环境,先装Oracle的32位驱动,再装64位驱动,注意修改安装位置和开始菜单中的名称便于管理。然后重启机器(经验证明这步很关键)。在VS中使用OraOLEDB.Oracle.1驱动进行连接。
(2)连接Excel的64位SSIS环境安装
开发环境安装AccessDatabaseEngine 32位驱动,运行环境安装64位驱动。在VS中使用AccessDatabaseEngine驱动进行连接。
