Oracle与SQL Server集成报错:调度SSIS包出现BadImageFormatException
解决SSIS包通过SQL Server作业调度执行时的Oracle客户端位数冲突问题
这个问题我太熟了——核心就是位数不兼容搞的鬼!你手动运行SSIS包正常,是因为咱们平时用的Visual Studio/SSDT都是32位程序,和你装的32位Oracle客户端匹配;但SQL Server Agent是64位进程,它去加载32位的Oracle组件时,就会抛出那个BadImageFormatException。
给你两个靠谱的解决方案,按需选就行:
方案一:让SQL Server作业强制用32位运行时(最快见效)
这是不需要动Oracle客户端的快捷办法:
- 打开SSMS,找到你的目标作业,右键选「属性」
- 切换到「步骤」标签页,选中执行SSIS包的那个步骤,点「编辑」
- 在弹出的窗口里切到「执行选项」,把使用32位运行时的复选框勾上
- 保存设置后重新跑作业,基本就能解决问题
方案二:安装64位Oracle客户端(长期兼容方案)
如果你的服务器上没有其他必须依赖32位Oracle组件的程序,推荐直接装64位客户端:
- 下载和你的Oracle 11g服务器版本匹配的64位客户端安装包
- 安装完成后,检查系统的
PATH环境变量,确保64位Oracle客户端的bin目录排在32位的前面(如果之前装过32位的话) - 重启SQL Server Agent服务,让新的环境变量生效
- 再执行作业就没问题了
几个额外提醒
- 要是你用的是ODBC连接Oracle,记得配置对应位数的ODBC数据源:32位的数据源得通过
C:\Windows\SysWOW64\odbcad32.exe打开配置,64位的用C:\Windows\System32\odbcad32.exe - 确认SSIS包的连接管理器里选的Provider和你装的Oracle客户端位数匹配,比如用
Oracle Provider for OLE DB的话,要对应32/64位版本
内容的提问来源于stack exchange,提问作者sss
相关产品推荐
相关产品推荐

