2009-01-14 87 views
2

我們最近更改了物理數據庫,新服務器,新位置,相同的數據庫模式和數據,自轉換完成後,無論何時我們嘗試直接連接到我們自己的桌面類型應用程序大約一半的時間我們得到這個錯誤:Hinky Oracle連接(TNSNAMES.ora幫助)

SQL*Loader-704: Internal error: ulconnect: OCIServerAttach[0] 
ORA-12545: Connect failed because target host or object does not exist 

其餘的時間,它立即連接沒有任何問題。我們通過JDBC建立連接的應用程序似乎沒有任何問題,但是當我們做一些tnsnames.ora查找(或者至少是我的預感)時,我們會做這些事情。 TNSPING工作100%,但使用像SQLLDDR這樣的Oracle可執行文件至少有50%的時間不能運行。這是我們的TSNNAMES文件的匿名snppet和TNSPING輸出:

DB_CONNECTION = 
    (DESCRIPTION = 
    (ADDRESS_LIST = 
     (ADDRESS = (PROTOCOL = TCP)(HOST = 1.2.3.4)(PORT = 1521)) 
) 
    (CONNECT_DATA = 
    (SERVICE_NAME = MY.URL.COM) 
) 
) 

而且TNSPING:

C:\>TNSPING DB_CONNECTION 
TNS Ping Utility for 32-bit Windows: Version 9.2.0.1.0 

Copyright (c) 1997 Oracle Corporation. All rights reserved. 

Used parameter files: 
C:\oracle\ora92\network\admin\sqlnet.ora 


Used TNSNAMES adapter to resolve the alias 
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) 
(HOST = 1.2.3.4)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = MY.URL.COM))) 
OK (200 msec) 

我有DB,這是該SID什麼的JDBC連接依賴,但其添加到tnsnames.ora並不會提高建立連接的可能性。我不太瞭解Oracle如何使用tnsnames文件來智能地解決此問題,因此如果您有任何建議或看到明顯缺少的內容,請讓我知道。

編輯:新的DB可能是兩個負載平衡的數據庫,可能是問題的一部分。

回答

1

我們最近曾與我們的應用程序類似的問題。應用程序有時會連接到Oracle RAC,有時它會使用ORA-12545進行投訴。 總之,問題在於,我們在TNSNAMES.ORA中使用虛擬IP地址時,服務器有一個真實的名稱。一旦我們通過system32 \ drivers \ etc \ hosts文件添加了服務器名稱到IP地址的映射,一切都開始正常工作。

我已經在我的博客 <無恥的廣告> http://dcarapic.blogspot.com/2009/04/intermittent-ora-12545-error.html < /無恥的廣告>

+0

您在博客中鏈接到您的文章(http://tardate.blogspot.com/2007/06/check-locallistener-if-you-run-rac.html)非常好。很高興終於明白爲什麼會發生這種情況,以及如何解決這個問題 – 2009-07-10 21:24:48

0

啊,愛是愛的間歇性問題:) (在下面我不得不更換下劃線,因爲我不知道這個wiki語言轉義字符)

你總是使用相同的OS用戶連接並執行tnsping?

檢查環境變量TNS [下劃線] ADMIN指向不同的tnsnames.ora位置。對客戶端掃描重複的tnsnames.ora;無論是在$ TNS [underscore] ADMIN指向的位置還是在不同的$ ORACLE [underscore] HOMES(例如,如果您有2個Oracle客戶端安裝)指向的位置。

同樣,檢查您是否對所有連接嘗試和tnsping使用相同的$ ORACLE [下劃線] HOME和$ PATH環境變量。 (例如,總是相同的操作系統用戶或每個用戶具有相同的值)

我看到tnsping輸出報告版本9.2,因此這不太可能,但在11g DB註冊與偵聽器,可能需要一分鐘左右。 (也許10g也是如此)。嘗試在此之前進行連接將無法找到目標。

另一個不太可能的可能性 - 是在舊的主機服務器上仍然宣傳相同服務名稱的服務?如果可能的話將其刪除。

之後,我會開始看網絡本身。平臺服務器總是成功和快速?如果您在tnsnames.ora中使用的是主機名而不是IP,那麼主機名是否可以正確解析爲正確的IP(nslookup)。有沒有本地防火牆,如果是的話,它的行爲?

問候 卡爾

+0

SERVICE_NAME網址(MY.DOMAIN.COM)沒有通過DNS解析爲有效的網址(即,它不能被PING或由NSLOOKUP找到)。 – 18Rabbit 2009-01-15 14:42:24

0

如果使用Oracle 10g寫多一點,你可以使用Easy Connect處理程序來代替:

//servername/instancename 

//1.2.3.4/my.url.com 

在你的情況。

它對很多TNSNAMES問題不起作用。