我知道,我知道,您将告诉我检查我的路径和注册表。我有,相信我。

我的情况-我们有两个盒子运行带有相同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分钟就会重新加载该页面。我们的某些用户在一天结束时将其保持打开状态。在午夜,应用程序池回收。自从Oracle.ManagedDataAccess.dll发布以来,大约12:02以来我们一直无法解决连接标识符错误,该错误始终存在于对数据库的任何调用上,直到回收应用程序池为止,此时所有内容畅快地工作。
       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文件夹中。

    最佳答案

    如果在重置AppPool时一切正常,则听起来与TNSNAMES.ORA无关。听起来更像是AppPool正在停止而不是在回收。

    另外,您提到您的主页每两分钟刷新一次并击中服务器,如果在AppPool回收并发生故障时它们击中服务器,这是否可能导致AppPool的快速故障保护功能将其关闭? AppPool带有一个选项,用于生成回收事件日志条目,默认情况下它显示不多,您需要选择要记录的内容。此日志可能包含有关回收事件为何未运行的更多线索。

    日志本身很难找到,下面的链接可以为您提供帮助:

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

    09-27 11:10