我知道,我知道,您将告诉我检查我的路径和注册表。我有,相信我。
我的情况-我们有两个盒子运行带有相同web.config文件的相同代码。以下是两者的规范。
相关配置部分:
<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