成功部署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生效。

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

后记

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

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

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

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

时间: 2024-11-07 17:09:13

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

SSIS教程:创建简单的ETL包 -- 6. 对项目部署模型使用参数(Using Parameters with the Project Deployment Model)

在本课中,将修改在第 5 课: 添加包部署模型的包配置中创建的包,以便使用项目部署模型.您将使用一个参数替换该配置值,以便指定示例数据位置.还可以复制本教程附带的已完成的 Lesson 5 包. 使用 Integration Services 项目配置向导,您将该项目转换为项目部署模型,并且使用参数而不是配置值来设置 Directory 属性.本课部分介绍了您将现有 SSIS 包转换为新的项目部署模型时要遵循的步骤. 再次运行包时,Integration Services 服务将使用参数填充该变

SSIS教程:创建简单的ETL包 -- 5. 添加包部署模型的包配置(Adding Package Configurations for the Package Deployment Model)

包配置允许您从开发环境的外部设置运行时属性和变量. 配置允许您开发灵活且易于部署和分发的包.Microsoft Integration Services 提供了以下配置类型: XML 配置文件 环境变量 注册表项 父包变量 SQL Server 表 Step 1: 复制第 4 课包 Step 2: 启用和配置包配置 创建映射到 Directory 属性的新的包级别变量 在 SSIS 设计器中,单击“控制流”选项卡的背景. 这会将要创建的变量的作用域设置为包. 在 SSIS 菜单中,选择“变量”.

SSIS教程:创建简单的ETL包 -- 4. 增加错误处理流程(Adding Error Flow Redirection)

为了处理在转换过程中可能发生的错误,MicrosoftIntegration Services 允许根据每个组件和每个列来决定如何处理无法转换的数据. 可以选择忽略某些列中的失败.重定向整个失败的行或者只是使组件失败. 默认情况下,Integration Services 中的所有组件被配置为在发生错误时失败. 而使组件失败又会导致包失败,并使所有后续处理停止. 如果不让失败导致包停止执行,一个好方法是通过配置使在转换中发生潜在处理错误时这些错误能够得到处理. 虽然可能选择忽略失败以确保包成功运

Tomcat7中配置Oracle 11g数据库DBCP连接池

将       ojdbc6.jar       tomcat-jdbc-7.0.37.jar            拷贝到工程的WEB-INF\lib  下面 一.在Tomcat的配置文件Tomcat7.0\conf\context.xml中添加信息: ? 1 2 3 4 5 6 7 8 9 10 11 <?xml version='1.0' encoding='utf-8'?> <Resource  name="jdbcoracle"   auth="C

SQL点滴9—SQL Server中的事务处理以及SSIS中的内建事务

原文:SQL点滴9-SQL Server中的事务处理以及SSIS中的内建事务 我们可以把SSIS中的整个package包含在一个事务中,但是如果在package的执行过程中有一个表需要锁定应该怎么处理呢?SSIS内建的事务处理可以解决这个问题.在此之前首先来熟悉一下SQL Server中的事务的概念. 事务 SQL Server中的事务是单个的工作单元.如果某一事务成功,则在该事务中进行的所有数据修改均会提交,成为数据库中永久的组成部分.如果事务遇到错误且必须取消或回滚,则所有的数据修改均被清除

maven中引入oracle驱动报错Missing artifact com.oracle:ojdbc14:jar:10.2.0.4.0

问题:引入依赖之后会报错. 1.首先我们要去下载一个oracle的驱动jar包,ojdbc6.jar(我这里本机安装了oracle,所以在oracle安装目录 F:\app\zyh\product\11.1.0\db_1\jdbc\lib 目录下会有驱动的jar包,如果你没有安装oracle,那么可以从官网上下载jar包,反正就是必须要先有一个ojdbc6.jar,只要搞到就行了). 2.以我本机为例子,打开命令提示符(cmd),进入ojdbc6.jar所在目录,在我这里就进入F:\app\zy

SqlServer中创建Oracle连接服务器

转自太祖元年的:http://www.cnblogs.com/jirglt/archive/2012/06/10/2544025.html参考:http://down.51cto.com/data/910072SqlServer中创建Oracle连接服务器 第一种:界面操作 (1)展开服务器对象-->链接服务器-->右击“新建链接服务器”(2)输入链接服务器的IP (3)链接成功后 第二种:语句操作 注:需要提前安装Oracle客户端程序,重启机器.(如果没有Oracle客户端程序,提示“未找

在Java中开源的数据库连接池

在Java中开源的数据库连接池有以下几种 : 1, C3P0 C3P0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象. https://github.com/swaldman/c3p0 2,Proxool 这是一个Java SQL Driver驱动程序,提供了对你选择的其它类型的驱动程序的连接池封装.可以非常简单的移植到现存的代码中.完全可配

oracle 数据库连接

两种方式:1.IP+SID方式 2.配置链接方式 1..IP+SID方式 DbHelperOracle.connectionString = string.Format(@"Data Source=(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = {0})(PORT = 1521)) ) (CONNECT_DATA = (SID = {1}) (SERVER = DEDICATED) ) );User Id={2}