c# - TNS :could not resolve the connect identifier specified I have done the research

标签 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 文件是来 self 们数据库团队的最新文件。

最令人恼火的是,一旦应用程序池被重置,连接就会正常工作。没有问题,没有性能影响,它根本没有出现在我们的较低环境中。我无法提供跟踪日志,因为无论我对跟踪设置做什么,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 的 Rapid-Fail Protection 将其关闭? AppPool自带一个生成回收事件日志条目的选项,默认情况下它显示的不多,你需要选择你想要记录的内容。该日志可能包含更多关于为什么回收事件没有飞行的线索。

日志本身有点难找,这里有一个链接可能对你有帮助:

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

关于c# - TNS :could not resolve the connect identifier specified I have done the research,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29822797/

相关文章:

c# - 如何在 C# 中获取队列中打印作业的文件路径

c# - 如何将同一基类的子类放入列表中?

oracle - PLS-00103 : Encountered the symbol "EXCEPTION" error while checking for a value in the bind variable

sql - Oracle SQL WITH 子句正确的用例和性能

.net - 托管 ODP.NET 驱动程序未显示在数据源对话框中

c# - 作用域如何影响 "do...while"循环,反之亦然?

c# - 更改 Outlook 收件箱图标信封图标

asp.net - 使用 GridView 中的 HyperLinkField 将日期值从一页传递到另一页

c# - 如果没有领域驱动设计,存储库是否有用?

c# - 在 C# 中循环当前年月到下年月