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數據全部成功結束。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM