SQL Server 2014 64位版本链接32位Oracle数据库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server 2014 64位版本链接32位Oracle数据库相关的知识,希望对你有一定的参考价值。

问题背景:

刚进入公司不久的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数据库的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver2014应该下载哪个版本

求个SQL server 2008 64位安装包,急用急用,最好是百度云盘,拜托了

SQLserver2012安装出现错误

64位 SQL Server2008链接访问Oracle 过程汇总解决方法记录

windows server 2003 64 位能不能支持 SQL 2000? 是需要安装SQL sp4的补丁吗? 顺求 2003 64位系统..

Sql server 2012 企业中文版安装图文教程(附下载链接)