当前位置: 首页 > news >正文

成功部署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个工作日(安装、卸载也费时间):

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

转载于:https://www.cnblogs.com/sfrost/p/4884443.html

相关文章:

  • ios申请真机调试( xcode 5)详细解析
  • 国家气象局免费天气预报接口,城市代码(JSON格式)
  • 第四次作业 合同管理、配置管理和外包管理
  • Git 1.9.5.msysgit.1
  • ​Java并发新构件之Exchanger
  • 本地管理员密码解决方案 Local Admin Password Solution (LAPS)
  • 自适应电脑、手机和iPad的网页设计方法
  • 团队博客作业Week4 --- 学霸网站--NABC
  • Effective Java
  • 虚拟机克隆后网络配置
  • 解决 居中 问题
  • 提交(post)xml文件给指定url的2种方法
  • Why NO to: MySQL, Symfony, CakePHP, Smarty, etc.
  • grub引导程序
  • 不使用(a+b)/2这种方式,求两个数的平均值
  • CSS3 变换
  • Cumulo 的 ClojureScript 模块已经成型
  • DataBase in Android
  • ES学习笔记(12)--Symbol
  • Java-详解HashMap
  • js ES6 求数组的交集,并集,还有差集
  • Material Design
  • SQLServer插入数据
  • yii2中session跨域名的问题
  • 安装python包到指定虚拟环境
  • 程序员该如何有效的找工作?
  • 从零开始在ubuntu上搭建node开发环境
  • 当SetTimeout遇到了字符串
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 关于使用markdown的方法(引自CSDN教程)
  • 关于字符编码你应该知道的事情
  • 观察者模式实现非直接耦合
  • 理清楚Vue的结构
  • 前端性能优化——回流与重绘
  • 协程
  • 用jQuery怎么做到前后端分离
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • ​Java并发新构件之Exchanger
  • ​如何防止网络攻击?
  • #{}和${}的区别是什么 -- java面试
  • $(selector).each()和$.each()的区别
  • (02)Hive SQL编译成MapReduce任务的过程
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (2)STL算法之元素计数
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (Git) gitignore基础使用
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (论文阅读11/100)Fast R-CNN
  • (篇九)MySQL常用内置函数
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (一) springboot详细介绍
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)