问题背景:

刚进入公司不久的BI新手,最近接部门的一个交接项目,需要在SQL Server上通过openquery来获取Oracle数据库的数据。各种配置,各种设置折腾了一周之久。在此,将自己的问题解决过程拿出来与大家分享。这里需要强调一点,网络资源虽然强大,但是每个人的问题一定是specific的,切忌生搬硬套。

系统配置:Windows server 2012 R2,64bit Intel Xeon 8 threads,48GB Memory;

预装软件:VS 2012 32bit,SQL Server 2014 64bit,Oracle Client 11g 32bit;其中,所有盘符及其子文件均已设置SQL SERVER\Agent均有读写、可执行权限。

在以上条件下,SSMS中的Linked server无法显示Oracle provider,ODBC中也没有Oracle home的驱动。因此,无法直接通过openquery来操作Oracle数据库的表。

解决方案:

问题的解决从一周前说起。

刚开始,本人信息检索能力比较差,很久都没有找到有效信息。基本在Oracle Community、MSDN、Stackoverflow这三个社区找到点信息。但试了一下均不奏效。其中有一个帖子说在安装64bit的Oracle database后问题解决了,但是不知道是何原因。

接下来,一位同事遇到相同的问题,我给他说,我听说过database的解决方案但没有尝试。接下来,他在Work station上安装了database也成功在SSMS中通过openquery链接了Oracle数据库。但是,当我想自己装的时候,他说不确定自己装的是哪个版本的database。经确认他装的是32bit,并在2008版的SSMS上。接下来他推荐我先安装32bit的database试一下。

1)安装32bit Oracle数据库 (失败)

我首先尝试公司软件库中的32bit数据库,结果安装成功后,SSMS、ODBC中均无任何反应。在网上又经过搜索,什么system32文件夹dll文件的检查、注册表的修改都做过,没有效果。最后结论,32bitSSMS-->32bitOracle,64bitSSMS-->64bitOracle,所以我想不明白为什么那个同事的是32bit的。

然后,我就卸载Oracle 32bit的数据库。。。各种坑。。。(按照网上完全卸载来做的)

2)安装64bit Oracle数据库 (无法安装)

按照网上的卸载过程,注册表需要删除,但是由于Oracle的注册表系列对32bit Client端和database是通用的,所以卸载完成后,Client端也不能用了。连带构建的SSIS包也无法使用,32bit的Oracle Provider失效。于是,就必须重装32bit Client端。。。

Oracle 11g安装包的通病是,它无法兼容Win7及以上版本,于是,调整setup.exe文件为Vista兼容模式。最终,安装成功。测试后32Bit Oracle Provider亦能正常使用。那么,就接着安装64bit的database。

新的问题又出现了!database安装包的setup.exe点击后出现黑框后,接下来就没有反应了!!!无论是否设置兼容模式,均是这种情况。接下来,分别测试了64bit Client端、32bit database、32bit Client端、64bit instant Client、32bit instant Client均出现类似情况,令人苦闷至极!最后,回到很久以前使用的方法,ODAC 64bit Xcopy,然而并没有什么卵用,命令提示符下安装ODAC竟然Access denied。

3)转机,命令提示符下安装64bit Client端

在此时,我已十分沮丧,在网上搜索解决方案,然而也是令人失望。。。网上建议大致为重装系统、盘符空间大小问题、重装32bit SSMS、问答无结果。然而,由于服务器牵涉用户较多且我费了九牛二虎之力方将现有的job在SSMS上部署成功,因此,上述解决方案均不适用。无意中,看见博客园袁晓平关于64bit SSMS通过ODBC链接32bit Oracle的帖子(http://www.cnblogs.com/yuanxiaoping_21cn_com/archive/2013/11/20/3433020.html),让我重新燃起希望。里面提到要同时安装32bit和64bit Client端,然后,修改注册表,构建ODBC DSN,在SSMS中利用ODBC进行链接。其中,两种Client端是同时安装的,而我的情况是已经安装了32bit。

先不管,试试64bit Client端。然后,打开安装包,setup.exe一闪而过。。。我瞬间石化,仿佛又回到了问题的起点,始终无法进入Universal Installation界面。设置兼容模式亦是如此。不过,我还是决定试试通过命令提示符来启动.exe文件。首先,将所有的兼容模式disable掉,然后在命令提示符下cd到安装文件夹,直接安装。UI界面出来了,这一刻我激动万分。

4)修改配置文件改变兼容性

就在高兴的时候,安装检测,系统版本不兼容。我将兼容性设置后,再用命令提示符打开,结果一闪而过。然后,我就拼命搜索有关Oracle安装,兼容性设置问题。有一个博客园帖子提到,在安装database时,可以添加当前系统版本到配置文件xxx.xml,就可以通过系统检测。我想Client端必定也存在此类文件,果不其然,被我找到了。

首先,进入解压后安装包路径,进入\client\stage\prereq目录,找到prerequisite.properties配置文件,打开。有如下信息:

prerequisite_input=client/client_prereq.xml
rulemap=oui/rulemap.xml;common/rulemap.xml
knowledgesource=oui/knowledgesrc.xml
reffiles=client/refhost.xml;client/refhost_instantClient.xml
javalibs=oui/OraPrereqChecks.jar; client/clientprereq.jar

每行等号相当于指向了一个具体配置文件的位置,下来,检查系统版本的配置文件最可能在黑色标记的行。但是最好还是一个个找。根据第一行,猜测文件应在\client目录下,于是找到\client\stage\prereq\client目录下果真有client_prereq.xml,然后,打开检查。发现refhost.xml文件夹中有这么一段

<CERTIFIED_SYSTEMS>
  <OPERATING_SYSTEM>
    <!--Microsoft Windows 2000-->
    <VERSION VALUE="5.0"/>
    <SERVICE_PACK VALUE="1"/>
  </OPERATING_SYSTEM>

</CERTIFIED_SYSTEMS>

于是,我根据自己系统版本,添加记录为

<OPERATING_SYSTEM>
    <!--Windows Server 2012 R2-->
    <VERSION VALUE="6.2"/>
    <SERVICE_PACK VALUE="1"/> 
</OPERATING_SYSTEM>

然后,用命令提示符安装setup.exe文件,结果安装成功。

5)配置ODBC,配置SSMS Linked Server (成功)

最后,在64bit ODBC中可以找到Oracle home1的driver,于是,修改Oracle Client安装目录下的tns文件,ODBC测试连接成功。

在SSMS中,新建Linked Server,直接选择Oracle provider for ole db,输入相应配置,在Security选项输入用户名、密码,测试成功。修改Linked server中Oraoledb.provider的配置,选中Allow in process,利用openquery测试,成功。回过头在测试原来32bit下的SSIS包和已部署的agent job,均不影响。

至此,64bit SSMS连接并获取32bit Oracle数据全部成功结束。

SQL Server 2014 64位版本链接32位Oracle数据库的更多相关文章

  1. Linux 64位编译\链接32位程序

    测试机器:Ubuntu14.04 64位 gcc编译32位程序,添加参数-m32: $ gcc -c -fno-builtin -m32 TinyHelloWorld.c ld链接32位代码,添加参数 ...

  2. win10 64位IIS链接32位ACCESS数据库

    window10中IIS运行.asp文件链接数据库时出现错误,显示“An error occurred on the server when processing the URL. Please co ...

  3. SQL Server 2014 各版本介绍

    SQL Server 2014 各版本介绍 目前,SQL Server 2014 分为主要版本和专业版. 在选择版本的时候可以根据您具体的需要进行抉择,如果你需要一个免费的数据库管理系统,那么就选择 ...

  4. SQL SERVER 2014 安装图解(含 SQL SERVER 2014 安装程序共享)

    开篇介绍 2015年1月1日,新的一年开始之际,本来应该好好做点有意义的事情来跨个年的.结果,老习惯 - 睡觉之前一定要折腾一下电脑,说干就干,给新到的 DELL 电脑装虚机,下载 SQL SERVE ...

  5. Sql Server 2014完全卸载

    经历过好多次Sql server的安装与卸载,有时发现自己卸载的费时费力,单纯地卸载个软件就要吐血了,那么现在我觉得是时候整理一下了. 1.在运行中输入services.msc,然后找到所有跟Sql ...

  6. 转:SQL SERVER 2014 安装图解(含 SQL SERVER 2014 安装程序共享)

    开篇介绍 2015年1月1日,新的一年开始之际,本来应该好好做点有意义的事情来跨个年的.结果,老习惯 - 睡觉之前一定要折腾一下电脑,说干就干,给新到的 DELL 电脑装虚机,下载 SQL SERVE ...

  7. 谈谈我的微软特约稿:《SQL Server 2014 新特性:IO资源调控》

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 撰写经历(Experience) 特约稿正文(Content-body) 第一部分:生活中资源 ...

  8. SQL Server 2014 新特性:IO资源调控

    谈谈我的微软特约稿:<SQL Server 2014 新特性:IO资源调控> 2014-07-01 10:19 by 听风吹雨, 570 阅读, 16 评论, 收藏, 收藏 一.本文所涉及 ...

  9. SQL Server 2014内存优化表的使用场景(转载)

    最近一个朋友找到走起君,咨询走起君内存优化表如何做高可用的问题 大家知道,内存优化表作为In-Memory OLTP功能是从SQL Server 2014开始引入,用来对抗Oracle 12C的In- ...

随机推荐

  1. ML(1)--概念理解

    机器是如何模拟人来学习的? 人:  observations===>learning===>skill 人从出生开始经过大量的观察(也可能经过身边的的指导)进行学习然后得到相应的技能(比如 ...

  2. jsp变量的使用规则

    jsp是一种弱类型的交而不能语音,虽然看似没有像强类型语言那么多的代码规范,但是在实际使用的过程当中依然有不少的问题.下面就简单的梳理一下. 1.首先,jsp是一种弱类型的脚本语言,变量在使用之前无需 ...

  3. OpenFlow协议1.0及1.3版本分析

    OpenFlow是SDN控制器和交换之间交流的协议,在SDN领域有着十分重要的地位. OpenFlow协议发展到现在已经经过了1.0.1.3.1.4等版本.其中1.0和1.3版本使用的是最为广泛的. ...

  4. [Tyvj 1730] 二逼平衡树

    先来一发题面QwQ [TYVJ1730]二逼平衡树 Time Limit:2 s   Memory Limit:512 MB Description 您需要写一种数据结构(可参考题目标题),来维护一个 ...

  5. 统一代码风格工具——editorConfig

    前面的话 在团队开发中,统一的代码格式是必要的.但是不同开发人员的代码风格不同,代码编辑工具的默认格式也不相同,这样就造成代码的differ.而editorConfig可以帮助开发人员在不同的编辑器和 ...

  6. ios扫雷

    就这些代码敲了我两个小时...... //  ViewController.m //  扫雷 // //  Created by 晚起的蚂蚁 on 2017/3/22. //  Copyright © ...

  7. 让你能看懂的 JavaScript 闭包

    让你能看懂的 JavaScript 闭包 没有废话,直入主题,先看一段代码: var counter = (function() { var x = 1; return function() { re ...

  8. 一次使用pywin32学到的知识

    FindWindow这个函数检索处理顶级窗口的类名和窗口名称匹配指定的字符串.这个函数不搜索子窗口. FindWindowEx:FindWindowEx是在窗口列表中寻找与指定条件相符的第一个子窗口 ...

  9. js实现轮播图动画

    在网页浏览中,可以看到轮播图是无处不在的,这是一个前端工程最基本的技巧.首先看看几个网页的呈现的效果. QQ音乐: 网易云音乐: 天猫: 接下来将从简到难总结几种实现轮播图的方法. 1.样式一:鼠标滑 ...

  10. python实战===实现读取txt每一行的操作,账号密码

    最近搞到了一批163邮箱的账号和密码,但是里面有部分账号不能用,密码是错的. 以此为背景 人工手动挨个登录检查效率太低! 于是写了下面这个脚本: import linecache import smt ...