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

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

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

  1. 获取类路径中含有beans.xml的jar包名称

    获取类路径中含有beans.xml的jar包名称 package com.stono; import java.io.File; import java.io.IOException; import ...

  2. SSIS教程:创建简单的ETL包 -- 1. 创建项目和基本包

    在本课中,将创建一个简单 ETL 包,该包可以从单个平面文件(Flat File)源中提取数据,使用两个查找转换组件转换该数据,然后将该数据写入AdventureWorksDW2012 的 FactC ...

  3. SSIS教程:创建简单的ETL包

    SSIS: Microsoft SQL Server Integration Services.是一个可用于生成高性能数据集成解决方案的平台,其中包括数据仓库的提取(Extract).转换(Trans ...

  4. SSIS教程:创建简单的ETL包 -- 3. 添加日志(Adding Logging)

    Microsoft Integration Services 包含日志记录功能,可通过提供任务和容器事件跟踪监控包执行情况以及进行故障排除. 日志记录功能非常灵活,可以在包级别或在包中的各个任务和容器 ...

  5. SSIS教程:创建简单的ETL包 -- 2. 添加循环(Adding Looping)

    在第 1 课:创建项目和基本包中,创建了从单个平面文件源中提取数据的包,然后使用查找转换功能对数据进行了转换,最后将数据加载到AdventureWorksDW2012 示例数据库的 FactCurre ...

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

    在本课中,将修改在第 5 课: 添加包部署模型的包配置中创建的包,以便使用项目部署模型.您将使用一个参数替换该配置值,以便指定示例数据位置.还可以复制本教程附带的已完成的 Lesson 5 包. 使用 ...

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

    包配置允许您从开发环境的外部设置运行时属性和变量. 配置允许您开发灵活且易于部署和分发的包.Microsoft Integration Services 提供了以下配置类型: XML 配置文件 环境变 ...

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

    为了处理在转换过程中可能发生的错误,MicrosoftIntegration Services 允许根据每个组件和每个列来决定如何处理无法转换的数据. 可以选择忽略某些列中的失败.重定向整个失败的行或 ...

  9. 在Maven仓库中添加Oracle数据库的JDBC驱动依赖

    在使用idea连接oracle数据库时发现直接添加oracle依赖 <dependency><groupId>com.oracle</groupId><art ...

随机推荐

  1. MCMC: The Metropolis Sampler

    本文主要译自 MCMC: The Metropolis Sampler 正如之前的文章讨论的,我们可以用一个马尔可夫链来对目标分布 \(p(x)\) 进行采样,通常情况下对于很多分布 \(p(x)\) ...

  2. 4.Rabbits and Recurrence Relations

    Problem A sequence is an ordered collection of objects (usually numbers), which are allowed to repea ...

  3. BHP Net Tool

    #导入需要用到的包 import sys import getopt import threading import socket import subprocess #定义全局变量 listen = ...

  4. Kindle Unlimited上的技术书籍

            直达链接:Kindle Unlimited         前不久,亚马逊在中国也推出了电子书包月服务.消息不灵通的我过了好久才看到这个消息,随后第一时间上官网查看具体情况.      ...

  5. DNS学习笔记之DNS理论知识

    DNS: Domain Name System (将域名和ip地址相互转化) 域名是一个范围,例如baidu.com,.com.而www.baidu.com是个主机名,即FQDN: Full Qual ...

  6. 浅析c#中登录窗体和欢迎窗体关闭的问题

    第一次在cnbogs发文章,这次来个很基础的,主要给小白看. 在c#的winform编程中,我们经常会做登录窗体或欢迎窗体,并把他们作为启动窗体. 但是,我们有可能会遇到一些问题. 请看下面的代码: ...

  7. shiro中的filterChainDefinitions

    anno:对所有请求放行 logout:立刻退出当前登录用户,并重定向到指定redirectUrl,如果没有指定redirectUrl,貌似是默认重定向到登录页面. authc:当访问需要通过权限验证 ...

  8. oracle rac安装

    http://blog.chinaunix.net/xmlrpc.php?r=blog/article&id=4681351&uid=29655480 参考 1.百度文库中的收藏 2. ...

  9. Python os._exit() sys.exit()

    os._exit()会直接将python程序终止,之后的所有代码都不会继续执行. sys.exit()会引发一个异常:SystemExit,如果这个异常没有被捕获,那么python解释器将会退出.如果 ...

  10. windows7 阻止copyfile到windows目录的解决办法

    一. windows7 x64,uac会阻止copyfile到c:/windows.提示拒绝访问. [会引起uac提示的3种情况: Administrator access token checks. ...