2015-04-23 217 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

相关问题