2015-04-23 70 views
6

我知道,我知道,你會告訴我檢查我的路徑和註冊表。我有,相信我。TNS:無法解析指定的連接標識符我已經完成了研究

我的情況 - 我們有兩個框運行相同的代碼與相同的web.config文件。以下是兩者的規格。

  • IIS 7.0,配置在午夜重置應用程序池
  • Oracle.ManagedDataAccess.dll,V 4.121.1.0
  • .NET 4.0 ASP.NET網站

相關配置部分:

<oracle.manageddataaccess.client> 
     <version number="*"> 
      <settings> 
       <setting name="TraceFileName" value="C:\MDM\TraceLog\"/> 
       <setting name="TraceLevel" value="7"/> 
       <setting name="SelfTuning" value="0"/> 
       <setting name="TNS_ADMIN" value="C:\MDM\tnsnames"/> 
      </settings> 
     </version> 
</oracle.manageddataaccess.client> 

我們的問題始於我們從非託管Oracle升級到託管時。

症狀: 我們網站的主頁有一個自動刷新功能,例如每2分鐘重新加載一次頁面。我們的一些用戶在一天結束時離開它。在午夜時分,應用程序池回收。在大約12點02分,由於我們得到一致的Oracle.ManagedDataAccess.dll的發佈無法解決連接標識符錯誤,這種錯誤在任何調用數據庫之前都會持續存在,直到應用程序池被回收爲止,此時,所有內容游泳。

Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-12154: TNS:could not resolve the connect identifier specified ---> OracleInternal.Network.NetworkException (0x00002F7A): ORA-12154: TNS:could not resolve the connect identifier specified 
     at OracleInternal.Network.AddressResolution..ctor(String TNSAlias, String instanceName) 
     at OracleInternal.Network.OracleCommunication.DoConnect(String tnsDescriptor) 
     at OracleInternal.ServiceObjects.OracleConnectionImpl.Connect(ConnectionString cs, Boolean bOpenEndUserSession, String instanceName) 
     at OracleInternal.ConnectionPool.PoolManager`3.CreateNewPR(Int32 reqCount, Boolean bForPoolPopulation, ConnectionString csWithDiffOrNewPwd, String instanceName) 
     at OracleInternal.ConnectionPool.PoolManager`3.Get(ConnectionString csWithDiffOrNewPwd, Boolean bGetForApp, String affinityInstanceName, Boolean bForceMatch) 
     at OracleInternal.ConnectionPool.OraclePoolManager.Get(ConnectionString csWithNewPassword, Boolean bGetForApp, String affinityInstanceName, Boolean bForceMatch) 
     at OracleInternal.ConnectionPool.OracleConnectionDispenser`3.Get(ConnectionString cs, PM conPM, ConnectionString pmCS, SecureString securedPassword, SecureString securedProxyPassword) 
     at Oracle.ManagedDataAccess.Client.OracleConnection.Open() 

TNSPING能夠連接到數據庫沒有問題。我留下的頁面直接打開我們的箱子,昨晚直接打開,只有其中一個顯示此問題。 tnsnames.ora文件位於兩臺機器的c:\ mdm \ tnsnames目錄中。 tnsnames.ora文件是我們數據庫團隊中最新的文件。

這最令人憤怒的部分是,一旦應用程序池被重置,連接的工作就非常漂亮。沒有問題,沒有性能影響,它並沒有出現在我們較低的環境中。我無法提供跟蹤日誌,因爲無論我如何處理跟蹤設置,都不會在c:\ mdm \ tracelog目錄中顯示任何內容。

任何人有任何想法,爲什麼發生這種情況?

EDITS: 沒有環境變量TNS_ADMIN;註冊表變量指向與配置文件相同的位置。

所有用戶對tnsnames.ora文件具有完全權限。

只有兩個tnsnames.ora文件,我的和前一個安裝中包含的示例文件。有三個sqlnet.ora文件,一個與tnsnames.ora文件位於同一目錄中,一個位於%ORACLEHOME%\ network \ admin文件夾中,另一個位於%ORACLEHOME%\ network \ admin \ sample文件夾中。

+1

你檢查你的路徑和註冊表?哦,從不知道 – moffeltje

+0

'sqlnet.ora'文件的內容是什麼?在機器上搜索其他'sqlnet.ora'和'tnsnames.ora'文件。你是否設置了不同的環境變量'TNS_ADMIN'? –

+0

沒有環境變量TNS_ADMIN;註冊表變量指向與配置文件相同的位置。 .config不會優先於這些設置嗎? – Marisa

回答

0

如果所有東西都在你重置AppPool的時候起作用,那麼它聽起來不像是和TNSNAMES.ORA有關。這聽起來更像是AppPool正在停止而不是回收。

此外,您提到您的主頁每兩分鐘刷新一次,並在AppPool回收並失敗時碰到服務器,這是否會導致AppPool的快速失敗保護關閉? AppPool帶有生成回收事件日誌條目的選項,默認情況下它不會顯示太多,您需要選擇要記錄的內容。這個日誌可能有更多的線索,爲什麼回收事件沒有飛行。

日誌本身是有點難找,這裏有一個鏈接,可以幫助你:

https://webmasters.stackexchange.com/questions/17630/which-event-log-file-does-iis-7-app-pool-log-to

相關問題