【发布时间】:2015-07-01 14:24:33
【问题描述】:
我知道,我知道,你会告诉我检查我的路径和注册表。我有,相信我。
我的情况——我们有两个机器运行相同的代码和相同的 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文件夹。
【问题讨论】:
-
sqlnet.ora文件的内容是什么?在机器上搜索其他sqlnet.ora和tnsnames.ora文件。您是否设置了不同的环境变量TNS_ADMIN? -
没有环境变量TNS_ADMIN;注册表变量指向与配置文件相同的位置。 .config 不会优先于这些设置吗?
-
只有两个 tnsnames.ora 文件,我的和之前安装中包含的示例文件。 sqlnet.ora文件一共有三个,一个在tnsnames.ora文件同目录,一个在%ORACLEHOME%\network\admin文件夹,一个在%ORACLEHOME%\network\admin\sample文件夹。
-
删除(或重命名)不需要的文件。
-
谢谢,我会试一试。直到明天才能确定它是否有效。