情況:
- A機上有SSMS 18.x,
- B機上有SQL Server 2008 R2數據庫,
- C機上有Oracle Database 11.2.0.4.0數據庫
我想在A機用ssms連C機的oracle,一番了解,普遍做法是裝ODAC xcopy包,里面有oledb組件,然后就可以在sqlserver的鏈接服務器里添加oracle數據庫。如圖:

於是我開始在ssms所在電腦裝odac,結果提供程序的下拉列表里死活不出現“Oracle Provider for OLE DB”,后來想想也許應該在sql server所在電腦裝才對,果然,有了,但緊接着又是連不上的問題:

按關鍵字OraOLEDB.Oracle 7302搜,相同問題一堆,有說勾一下【允許進程內】的,有說把sqlserver服務的啟動賬戶改為【LOCAL SERVICE】的,也有通過若干步驟修改一個叫【MSDAINITIALIZE】的dcom組件的權限的,我都試過了,sqlserver服務器也重啟了無數次,odac版本也試過若干個,統統不能解決我的問題。絕望之下,我下了【Oracle Database 11g Release 2 Client (11.2.0.1.0) for Microsoft Windows (x64)】,只勾了里面的oledb(具體叫啥我懶得回看了)一個東西,終於連上了。
總結:
- 一定要有個SQL Server。光ssms和oracle是建立不起連接的,本質上連接oracle的是sql sever,不是ssms本身。
- oledb要裝在sql server所在電腦上。我是裝oracle客戶端里的oledb才有用,odac里的沒用,估計還是版本問題。
示例:
--注意用戶和表名大小寫敏感 --用T-SQL的語法 SELECT TOP 10 * from 鏈接服務器別名..用戶.表名
--或者。此寫法可以解決當xxx中有timestamp列時上面的寫法會報錯的問題,參考https://andyspecht.github.io/2017-10-03-linked-server-fail/
select * from openquery(鏈接服務器別名, 'select * from xxx'/*plsql*/)
-文本-
