2010-08-09 95 views
8

我在嘗試將SQL Server 2005連接到Oracle 10g數據庫。我已經在SQL服務器上安裝了Oracle客戶端,並驗證了我可以使用tnsping和sqlplus連接到Oracle數據庫。當我嘗試運行在SQL Server查詢我得到如下:將Oracle與SQL Server連接起來

OLE DB provider "OraOLEDB.Oracle" for linked server "ORA_CSSA2APD" returned message "ORA-12154: TNS:could not resolve the connect identifier specified".
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider "OraOLEDB.Oracle" for linked server "ORA_CSSA2APD".

任何想法?我都試過下面的查詢,沒有運氣:

select * from openquery(ORA_CSSA2APD, 'select count(rowid) from eservice_op.agent')

select count(rowid) from ORA_CSSA2APD..eservice_op.agent

回答

5

我懷疑的環境設置。也就是說,您的會話正在拾取TNSNAMES.ORA文件,但基於SQL Server的會話不是。我會檢查是否ORACLE_HOME,可能是TNS_ADMIN正在設置並指向。

是否能夠使用SQL Server連接的數據庫的簡單連接語法。

IE瀏覽器的主機名代替ORA_CSSA2APD:1521/SERVICE_NAME

+0

兩者的環境變量均已設置且準確。我沒有嘗試過上面列出的連接語法,但我確實嘗試了創建一個UDL並將它複製到連接字符串中,但沒有運氣。我會嘗試你的語法,並讓你知道結果。我很感激。 – bokoxev 2010-08-11 18:28:14

+1

我重新啓動了該服務,因爲我不確定自從設置了TNS_ADMIN環境變量並且現在一切正在運行之後我纔有。謝謝您的幫助! – bokoxev 2010-08-11 22:35:32

+0

就像@ bokoxev說的,如果一切似乎都正常,但不起作用,請嘗試從MSSQL Management Studio重新啓動整個MSSQL服務器,它爲我工作。 – CsBalazsHungary 2014-05-19 09:01:13

2
一般

TNS錯誤信息表示連接是有缺陷(如主機指定端口上難以獲得/ timesout,或根本不知道ORA_CSSA2APD應該指向什麼)。

需要考慮的一件事是,您使用的是64位Windows,並且您使用的是32位或64位Oracle客戶端(或可能同時使用這兩種客戶端)。如果您的64位操作系統上運行的32位應用程序嘗試調用Oracle,則需要使用32位Oracle客戶端。在64位操作系統上使用32位客戶端可能會非常棘手,因此不要將其安裝在「Program Files(x86)」文件夾中。

還要記住的following

在Windows XP中, %WINDIR%\ System32文件夾中保留 爲64位應用程序的Windows Server 2003 的64位版本還是。當32位 應用程序試圖訪問所述 System32文件夾,訪問被重定向 到以下文件夾: %WINDIR%\ Syswow64資料

因此,對於64位的窗口,32位的東西是在SysWOW64文件夾和64位的東西在system32文件夾中。

+0

操作系統和Oracle客戶端都是32位的。 – bokoxev 2010-08-10 14:04:08

4

ORA:12154通常表示您嘗試連接到的db的別名在tnsnames.ora文件中找不到。 (請參閱http://ora-12154.ora-code.com/更詳細的解釋。)

您需要確保數據源是tnsnames文件知道的別名(在SQL Server駐留的服務器上,無論您從哪裏運行查詢); SQL Server將會像其他任何Oracle客戶端一樣,需要知道在哪裏連接到並沒有tnsnames.ora文件,它不會知道Oracle數據庫的詳細信息。

如果您沒有權限訪問SQL Server服務器(冗餘部門有一個服務器),則需要讓服務器管理員爲您設置該服務器。

(鏈接服務器的數據源屬性應該是tnsnames.ora中別名你試圖連接到數據庫的別名)。

HTH ...

+0

+1 - 很可能是這個。錯誤非常具體。 – REW 2010-08-10 03:51:30

+0

我可以使用SQLPlus進行連接,並且我可以成功地使用tnsping服務器,所以tnsnames文件沒有問題,而且我使用的tnsnames中指定的服務名與sp_addlinkedserver命令的@datasrc參數相同。任何其他想法? – bokoxev 2010-08-10 14:01:47

+0

和SQLPlus運行在SQL Server相同的機器上嗎? – 2010-08-10 16:50:37

0

我們發現,SQL服務器,一些未知的原因,開始尋找在默認的Oracle位置TNSNAMES.ORA文件。

我們能夠放置TNSNAMES.ORA文件在以下位置,結果成功:

對於SQL Server 32位在32位操作系統或64位操作系統的64位

%ProgramFiles%\Oracle 
%ProgramFiles%\Oracle\network\admin 

對於64位操作系統的SQL Server 32位

%ProgramFiles% (x86)\Oracle 
%ProgramFiles% (x86)\Oracle\network\admin 

我們也能夠使用SQL *連接加,但SQL Server不能。需要注意的是,SQL * Plus沒有使用相同的TNSNAMES.ORA文件。這就是爲什麼一個人工作。

1

這個問題也發生在我身上,但也僅限於某些Windows用戶帳戶。啓用OraOLEDB.Oracle的「Allow inprocess」提供程序選項(SSMS>服務器對象>鏈接服務器>提供> OraOLEDB.Oracle)的組合,重新啓動SQL Server Windows服務並最後調整TNSNAMES.ora文件的權限直。