成功部署SSIS中含有Oracle数据库连接的ETL包

RT,正式写之前,我想说,真TMD不容易!!!

写博客,责任心,很重要

百度搜出来的内地博客技术文章(CSDN、ITEYE、CNBLOGS……),大部分都是不全面,只针对一个遇到问题点的记录,可以说毫无参考价值,甚至会把你指向错误的方向。

为什么?因为无当时系统环境交待,工具版本信息,其它客观因素(非原生,有插件等等)。但是搞技术的都知道,这些因素非常重要。

但我们再看看台湾 dotblogs 上的文章(百度偶尔抽风,给点tw的结果),案例:

http://www.dotblogs.com.tw/jamesfu/archive/2014/04/03/ssdtbi.aspx

技术日志就该这样写:解决问题不仅仅是告诉你怎么做,而且后续的更新,都会体现在这篇日志里面。你可以想想博主写完博客后,基本会经常上去看,去关注,而且有后续的最新情况,都会更新在这篇日志中,以避免误导访客。(试想,如果不更新“不用安装VS2013”,多少人得去下(购)载(买),还得先安装,这得浪费多少时间?)

吐槽结束,正文开始。


ETL连接Oracle数据库

人人都知道连接Oracle数据库要装驱动,但是这个驱动有很多种不同的版本、含义:

  • 开发会用Oracle驱动(官方,非官方,通用)
  • PL/SQL会用Oracle驱动(官方,非官方,通用)
  • 微软SSIS会用Oracle驱动(官方,非官方,通用)
  • 更多的还没接触到……

不同的驱动(甚至还有32位、64位的区别),用在不同的作用下时,配置、加载、使用方法都不尽相同,所以,请以后不要再一刀切:连不上?下个Oracle驱动三!!!

开发ETL用的是SQL2008R2(包括SSDT2008工具),服务器环境也是WIN SERVER 2008R2。在单独下载了几次Oracle驱动无用后(PL/SQL可以连接,SSIS就是提示无法加载Oracle驱动的错误),安装了OracleXE112_Win32(不建议64位,因为SSDT只有32位的,具体我没试过):

http://www.oracle.com/technetwork/database/database-technologies/express-edition/downloads/index.html

相比安装Oracle完整版,这个Oracle Express Edition版小,而且安装非常简单,不会出现安装过程中复制文件丢失等抽风式错误,安装完后,也不需要你设置环境变量等奇葩东西。安装完成后,重新打开SSDT工具,新建【OLE DB连接】,在【提供程序】处选择“Oracle Provider for OLE DB”连接方式

 详见此贴:http://www.flybi.net/question/1051

注意:如果未出现这个连接方式,请先关闭SSDT,再到OracleXE安装目录,搜索:OraOleDB11.dll文件(11是版本号),然后在CMD中运行:regsvr32 {本机OracleXE安装目录}/OraOleDB11.dll,提示注册成功,再重新打开SSDT,就可以了。

部署ETL包

测试过两种ETL包的部署方式:

  1. 在本机直接发布到本机的SQL SERVER
  2. 在本机另存包副本,再到另一台服务器部署(环境相同,只是SQL是2012)

其实目前没发现有什么差异性(因为都需要目标服务器有Oracle的驱动),但是包的配置【保护级别】建议按下面的方式选择“依靠服务器存储和角色进行访问控制”:

否则部署后,执行作业会报错,提示“无法解析加密的XML文件,或是敏感数据无法访问”之类的错误(具体没有截图了)。

另外在SQL SERVER建作业的时候,执行步骤就选择了包的位置,其它所有配置都没怎么修改:

自己在执行作业这一步,卡了很久(1-2个工作日),就报一个错:“192.168.1.1(Oracle数据库连接地址)连接无效”,很简短的错误,根本没法排查。但是当我注册Regsvr32 OraOleDB.dll驱动后,才反应过来:SQL Server服务没有停止,Regsvr32后很可能没有对SQL SERVER生效。

果然,重启服务器后,再执行包,就正常了。

 


 更新:SSDT for VisualStudio 2013、Sql Server 2014,服务器环境未变,Oracle驱动未变


又折腾了一下午,部署了3个包上去,已经稳定执行了(5分钟一次)。

在这个环境下,就不能用“Oracle Provider for OLE DB”连接Oracle源了,死活要报错:

就算加【转换数据】控件,把字符转了,在开发的时候可以执行,但是部署上去依旧报同样的错误。而且,测试的时候,我将尾部的写入目标库环节去掉,然后只执行取数,还是会报错,提示Ora相关组件未注册(实际已经regsvr32并重启)。

不过,换回连接Oracle源的连接方式为官方的Microsoft OLE DB Provider for Oracle”就没问题,不用转换字符,直接部署就可以用。


后记

由于花在这上面的时间太多,导致一看到说装Oracle驱动的日志就头大,再一看还要分32/64位驱动就头皮发麻了。整个文章涉及的步骤,我都从头到尾在WIN7+SSDT2010上测试过,同时包也部署在SQL2008R2和SQL2012的数据库上成功运行过。

另外,由于是在服务器上折腾,所有很容易忽略一个情况:电脑很少重启,呵呵。

最后我想说,如果不是网速给力,不停地尝试过程中,需要下载大量的安装程序(各种Oracle驱动,Oracle完整安装包,SQLserver安装包,SSDT安装包……),加起来几十个G,我都折腾了3-4个工作日(安装、卸载也费时间):

你现在可以想象一下:如果你写(拷)一篇日志,里面全是些下载东西然后就可以解决问题的方法,但是背景、环境不交待清楚,你这得耽误同行多少时间?

posted @ 2015-10-16 11:45  sfrost  阅读(1648)  评论(0编辑  收藏  举报