過去已有很多在SQL 2005/SQL 2008建立Oracle Linked Server的經驗,本屬稀鬆平常小事,今天第一次在SQL 2008 R2 x64執行,發現有些眉角,特筆記之。

  1. 需安裝64位元版Oracle Provider for OLE DB
    明明機器每天在跑.NET程式連Oracle,卻發現Linked Server的Provider中沒有Oracle Provider for OLE DB可選! 這才想到,原本只裝了32位元版ODAC 11.2,.NET程式也都切成x86執行。
    SQL Server 2008 R2是x64版本,必須搭配64位元版本ODAC,就只能乖乖下載安裝。
  2. 裝完Oracle OLE DB後要重開機
    裝好64位元的ODAC後,新增Linked Server的操作視窗立刻有Oracle Provider for OLE DB可選,但要建立卻會彈出:
    Cannot create an instance of OLE DB provider “OraOLEDB.Oracle” for linked server "…" (Microsoft SQL Server, Error: 7302)。
     
    一般來說,Error 7302是Oracle相關元件(MSDAORA.dll)沒有正確安裝或註冊所致。莫非又是人品問題? 跟前幾天VS2012安裝Oracle Entity Framework Provider失敗如出一轍,又得開始射茶包? 老人家的經驗在此時派上用場,依稀記得Oracle Client安裝後有些設定要重開機才會生效,二話不說,Reboot! 重開機後,Oracle Linked Server就能順利建立囉~  (用力筆記: Oracle Client裝完記得要重開機)
  3. 設定Allow Inprocess旗標
    試著查詢Oracle Linked Server時,又彈出新的錯誤訊息:
    The OLE DB provider "OraOLEDB.Oracle" for linked server "XE" reported an error. The provider did not give any information about the error.

    透過錯誤訊息很快在微軟KB找到說明:
    如果您使用協力廠商的 Oracle 提供者,且 Oracle 提供者無法在 SQL Server 處理程序外執行,請變更提供者選項,以執行同處理序


    在以下OraOLEDB.Oracle項目按右鍵選Properties
     
    再設定Allow inprocess為Enable

終於,可以在SQL 2008 R2 x64成功使用Oracle Linked Server了!


Comments

# by nolem

Oracle Linked Server 啟用 Allow inprocess 如果發生oracle error 會連帶crash sqlserver 造成sqlserver 重開. 如要不啟用Allow inprocess ,則要修改dcom MSDAINITIALIZE 權限設定

# by Jeffrey

to nolem, 好一個驚天雷,感謝分享!

# by Lance

暗黑大,可以問一下為何我在新增link server的時候,選擇提供者的時候,SSMS就會直接沒有回應,請問你知道這個狀況有可能是哪裡出了問題嗎?

# by Jeffrey

to Lance, 是在選取Oracle提供者時當掉嗎? 只爬到一篇症狀類似的提問(https://www.sqlservercentral.com/Forums/Topic438180-1042-1.aspx),但沒有明確問題分析與解法。我猜想跟該SQL主機安裝的第三方資料庫Client有關聯,可試著移除或重裝看有無改善。再無頭緒可用 Process Monitor 搜證,觀察當掉當下SSMS讀寫了什麼 Registry 及檔案,當成線索進一步追查。

Post a comment