SQL Server x64建立Oracle Linked Server筆記
4 | 36,164 |
過去已有很多在SQL 2005/SQL 2008建立Oracle Linked Server的經驗,本屬稀鬆平常小事,今天第一次在SQL 2008 R2 x64執行,發現有些眉角,特筆記之。
- 需安裝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,就只能乖乖下載安裝。 - 裝完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裝完記得要重開機) - 設定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 及檔案,當成線索進一步追查。