设为首页 收藏本站
查看: 1316|回复: 0

[经验分享] SQL Server 2014 64位版本链接32位Oracle数据库

[复制链接]

尚未签到

发表于 2017-7-13 22:59:53 | 显示全部楼层 |阅读模式
  问题背景:
  刚进入公司不久的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数据全部成功结束。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-393589-1-1.html 上篇帖子: SQL Server 数据库的安全管理(登录、角色、权限) 下篇帖子: 使用SQL脚本创建数据库,操作主键、外键与各种约束(MS SQL Server)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表