问题背景:

刚进入公司不久的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. angular JS中使用jquery datatable 自定义搜索按钮点击事件 和mRender的 ng-click事件

    'use strict'; app.controller('DataTableCtrl', function ($scope, $compile) { $scope.searchFiles = { n ...

  2. Unity3D 中材质球(Material)预制体打包成AB(AssetBundle)出现材质丢失问题的解决方案

    关于Unity3D中打AB(AssetBundle)资源包,默认是不连Shader一同打包进去的,所以得自行添加,添加方式比较简单,不需要往项目中添加Shader,只是点选一下就可以了,具体实现方式如 ...

  3. 再起航,我的学习笔记之JavaScript设计模式03

    我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 上一 ...

  4. MongoDB备份和恢复

    mongodump备份数据 该命令可以导出所有数据到指定目录中, 也能通过参数指定备份服务器 mongodump -h dbhost -d dbname -o dbdirectory dbhost: ...

  5. swift UIButton边框添加阴影效果

    btn.layer.shadowOpacity = 0.8 //阴影区域透明度 btn.layer.shadowColor = UIColor.black.cgColor // 阴影区域颜色 btn. ...

  6. Tp3.2提交表单与操作表单

    笔记笔记 先去建个表———— 然后把我输入的东西 存到表里: <input type="submit" id="tijiao" value="提 ...

  7. java中链接数据库的具体操作以及pstmt.setObject(i+1, objects[i])这行代码的意思

    package dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStat ...

  8. Linux - 简明Shell编程08 - 函数(Function)

    脚本地址 https://github.com/anliven/L-Shell/tree/master/Shell-Basics 示例脚本及注释 #!/bin/bash function Check( ...

  9. JavaScript获取和创建元素

    1.JavaScript中获取元素 常用的获取document中元素的方法: 1) document.getElementById()  =>通过元素ID获取文档中特定的元素,如获取 id = ...

  10. MATLAB中绘制图形的时候,坐标和标题倒置

    1.如上图所示,直方图的坐标轴以及标题文字都颠倒了 原因: 在MATLAB显示的subplot函数中,图像与直方图这些不属于一类,所以在显示的时候会出现这种情况 解决办法:1>将图像与直方图分开 ...