成功部署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包的部署方式:
- 在本机直接发布到本机的SQL SERVER
- 在本机另存包副本,再到另一台服务器部署(环境相同,只是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个工作日(安装、卸载也费时间):

你现在可以想象一下:如果你写(拷)一篇日志,里面全是些下载东西然后就可以解决问题的方法,但是背景、环境不交待清楚,你这得耽误同行多少时间?
成功部署SSIS中含有Oracle数据库连接的ETL包的更多相关文章
- 获取类路径中含有beans.xml的jar包名称
获取类路径中含有beans.xml的jar包名称 package com.stono; import java.io.File; import java.io.IOException; import ...
- SSIS教程:创建简单的ETL包 -- 1. 创建项目和基本包
在本课中,将创建一个简单 ETL 包,该包可以从单个平面文件(Flat File)源中提取数据,使用两个查找转换组件转换该数据,然后将该数据写入AdventureWorksDW2012 的 FactC ...
- SSIS教程:创建简单的ETL包
SSIS: Microsoft SQL Server Integration Services.是一个可用于生成高性能数据集成解决方案的平台,其中包括数据仓库的提取(Extract).转换(Trans ...
- SSIS教程:创建简单的ETL包 -- 3. 添加日志(Adding Logging)
Microsoft Integration Services 包含日志记录功能,可通过提供任务和容器事件跟踪监控包执行情况以及进行故障排除. 日志记录功能非常灵活,可以在包级别或在包中的各个任务和容器 ...
- SSIS教程:创建简单的ETL包 -- 2. 添加循环(Adding Looping)
在第 1 课:创建项目和基本包中,创建了从单个平面文件源中提取数据的包,然后使用查找转换功能对数据进行了转换,最后将数据加载到AdventureWorksDW2012 示例数据库的 FactCurre ...
- SSIS教程:创建简单的ETL包 -- 6. 对项目部署模型使用参数(Using Parameters with the Project Deployment Model)
在本课中,将修改在第 5 课: 添加包部署模型的包配置中创建的包,以便使用项目部署模型.您将使用一个参数替换该配置值,以便指定示例数据位置.还可以复制本教程附带的已完成的 Lesson 5 包. 使用 ...
- SSIS教程:创建简单的ETL包 -- 5. 添加包部署模型的包配置(Adding Package Configurations for the Package Deployment Model)
包配置允许您从开发环境的外部设置运行时属性和变量. 配置允许您开发灵活且易于部署和分发的包.Microsoft Integration Services 提供了以下配置类型: XML 配置文件 环境变 ...
- SSIS教程:创建简单的ETL包 -- 4. 增加错误处理流程(Adding Error Flow Redirection)
为了处理在转换过程中可能发生的错误,MicrosoftIntegration Services 允许根据每个组件和每个列来决定如何处理无法转换的数据. 可以选择忽略某些列中的失败.重定向整个失败的行或 ...
- 在Maven仓库中添加Oracle数据库的JDBC驱动依赖
在使用idea连接oracle数据库时发现直接添加oracle依赖 <dependency><groupId>com.oracle</groupId><art ...
随机推荐
- python中try except执行顺序
python中try except finally的执行顺序 先执行try中语句 如果try中抛出异常, 执行异常中语句. 如果try 或 except 中没有return语句,执行完try 或者 e ...
- CSS counter-reset 属性
一.实例 对部分和子部分进行编号(比如 "Section 1"."1.1"."1.2")的方法: eg: css部分: ol { list- ...
- RGB与HSV颜色空间
RGB颜色空间 1.三基色原理:大多数的颜色可以通过红.绿.蓝三色按照不同的比例合成产生,同样绝大多数单色光也可以分解成红绿蓝三种色光 红绿蓝三基色按照不同的比例相加合成混色称为相加混色.其中一 ...
- aes rsa加密
aes在加密时,若加密字符串的长度不是16,则会在后面加0x00补足16位,所以在解密后还应该去除0x00 小于16字节的原文会得到16字节长度的密文,小于32字节的原文会得到32字节长度的密文,大于 ...
- 【转载】ANSYS 动力分析 (9) - 瞬态动力分析 (1)
原文地址:http://htbbzzg.blog.163.com/blog/static/69725206201081663611208/ 第四章 瞬态动力分析 第一节:瞬态动力分析的定义和目的 ...
- AJAX原理及应用
Ajax技术的核心是XMLHttpRequest对象(简称XHR),可以通过使用XMLHttpRequest对象获取到服务器的数据,然后再通过DOM将数据插入到页面中呈现.也就是javascript可 ...
- C/C++文字常量与常变量的概念与区别 分类: C/C++ 2015-06-10 22:56 111人阅读 评论(0) 收藏
以下代码使用平台是Windows 64bits+VS2012. 在C/C++编程时,经常遇到以下几个概念:常量.文字常量.符号常量.字面常量.常变量.字符串常量和字符常量,网上博客资料也是千篇千律,不 ...
- PetaPoco ORM 增加返回DataTable的方法
public DataTable ExecuteDataTable(Sql sql) { return ExecuteDataTable(sql.SQL, sql.Arguments); } publ ...
- C#四种深拷贝方法
//四种深拷贝方法 public static T DeepCopyByReflect<T>(T obj) { //如果是字符串或值类型则直接返回 if (obj is string || ...
- Oracle学习笔记(二)
2.Oracle用户管理 (1)创建用户:create user 用户名 identified by 密码(需要dba权限); sql>create user yzw identified by ...