TNS:无法解析指定的连接标识符我已完成研究

时间:2015-04-23 11:58:41

标签: c# asp.net oracle iis

我知道,我知道,你要告诉我检查我的路径和注册表。我相信我。

我的情况 - 我们有两个框运行相同的代码和相同的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目录中。

任何人都有任何关于为什么会这样做的想法?

编辑: 没有环境变量TNS_ADMIN;注册表变量指向与配置文件相同的位置。

所有用户都拥有tnsnames.ora文件的完全权限。

只有两个tnsnames.ora文件,我的和先前安装中包含的示例文件。有三个sqlnet.ora文件,一个在与tnsnames.ora文件相同的目录中,一个在%ORACLEHOME%\ network \ admin文件夹中,另一个在%ORACLEHOME%\ network \ admin \ sample文件夹中。

1 个答案:

答案 0 :(得分:0)

如果重置AppPool时每件事都有效,那么它听起来与TNSNAMES.ORA无关。听起来更像是AppPool正在停止而不是回收。

另外,您提到您的主页每两分钟刷新一次服务器,如果它们在AppPool回收并且失败时到达服务器,可能会导致AppPool的Rapid-Fail Protection关闭它下? AppPool附带一个生成回收事件日志条目的选项,默认情况下它没有显示多少,您需要选择要记录的内容。该日志可能包含有关回收事件未飞行的原因的更多线索。

日志本身有点难找,这里有一个可以帮到你的链接:

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