【问题标题】:How to debug visual studio connection to oracle database (ORA-1254 & ORA-12638)?如何调试 Visual Studio 与 Oracle 数据库的连接(ORA-1254 和 ORA-12638)?
【发布时间】:2014-07-04 08:23:22
【问题描述】:

背景

我正在做一份新工作并尝试设置我的本地环境。目前,我无法在 Visual Studio 2008 上调试我们的 Web 解决方案,因为我相信我在安装 oracle 11g 时没有正确配置它(得到 ORA-1254-TNS:无法解析指定的标识符)错误。TNS 不是问题因为在解决方案中直接连接)。所以我很确定我需要使用正确的安装参数重新配置或重新安装我的本地 11g oracle。

问题

所有以前的开发人员在我来之前就已经离开了。没有任何记录。但是,我确实可以访问开发人员正在工作的其中一台机器。我试图弄清楚这个开发人员在他们的机器上使用 oracle 11g 11.2.0 时使用了哪些参数。

其他详情

至少有 50 个网站,其中大部分是用 Visual Studio 2008 编写的。因此,当我加载 vs 2008 解决方案时,我需要一种方法来连接到他们为这些网站制作的任何服务器(以便调试网站)。

我需要确保我的本地开发环境允许我进行调试。所以我说的是Oracle 11g的软件安装。它是客户端安装。这是因为我需要一种方法让我的客户端 11g 能够连接到他们开发的任何服务器。我无权访问他们创建的机器上的本地数据库(我相信这仅用于本地开发网站。他们称它为client1,但我不知道用户名或密码如何)。

编辑

当我没有 oracle 11g 时,我收到以下错误:

  1. System.Exception: System.Data.OracleClient requires Oracle client software version 8.1.7 or greater

所以在安装客户端之后,我得到了错误:

  1. ORA-1254: TNS: could not resolve the connect identifier specified

这是连接设置的代码:

      public static DataSet ExecuteQuery(string sql)
        {
            OracleConnection oraConnection = new OracleConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString());
            OracleCommand oraCommand = new OracleCommand(sql, oraConnection);
            oraConnection.Open();
}

这是上面代码的错误信息:

异常详细信息:System.Data.OracleClient.OracleException:ORA-12154:TNS:无法解析指定的连接标识符

来源错误:

Line 391:            OracleConnection oraConnection = new OracleConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString());
Line 392:            OracleCommand oraCommand = new OracleCommand(sql, oraConnection);
Line 393:            oraConnection.Open();
Line 394:
Line 395:            OracleDataAdapter oraAdapter = new OracleDataAdapter(oraCommand);

Source File: c:\projects\websiteNew\App_Code\CatalogDB.cs    Line: 393 

Stack Trace: 


[OracleException (0x80131938): ORA-12154: TNS:could not resolve the connect identifier specified
]
   System.Data.OracleClient.OracleException.Check(OciErrorHandle errorHandle, Int32 rc) +310694
   System.Data.OracleClient.OracleInternalConnection.OpenOnLocalTransaction(String userName, String password, String serverName, Boolean integratedSecurity, Boolean unicode, Boolean omitOracleConnectionName) +683
   System.Data.OracleClient.OracleInternalConnection..ctor(OracleConnectionString connectionOptions) +133
   System.Data.OracleClient.OracleConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) +40
   System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options) +29
   System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject) +433
   System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject) +72
   System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) +457
   System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) +100
   System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +116
   System.Data.OracleClient.OracleConnection.Open() +40
   Catalog.CatalogDB.ExecuteQuery(String sql) in c:\projects\websiteNew\App_Code\CatalogDB.cs:393
   Catalog.CatalogDB.GetCompanyInfo(String portal_id) in c:\projects\websiteNew\App_Code\CatalogDB.cs:367
   Global.CompanyInfo() in c:\projects\websiteNew\App_Code\Global.asax.cs:69
   Global.Session_Start(Object sender, EventArgs e) in c:\projects\websiteNew\App_Code\Global.asax.cs:55
   System.Web.SessionState.SessionStateModule.RaiseOnStart(EventArgs e) +8878884
   System.Web.SessionState.SessionStateModule.CompleteAcquireState() +237
   System.Web.SessionState.SessionStateModule.BeginAcquireState(Object source, EventArgs e, AsyncCallback cb, Object extraData) +504
   System.Web.AsyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +66
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

这是连接字符串。为了安全起见,我对其进行了编辑以使用假名/密码/等:

  <connectionStrings>
    <remove name="ConnectionString"/>
    <add name="ConnectionString" connectionString="Data Source=ZARDOZ;Persist Security Info=True;User ID=fake1;Password= f8k3r;Unicode=True" providerName="System.Data.OracleClient"/>
    <add name="ZARDOZPubsConnectionString" connectionString="Data Source=ZARDOZ-DB2.were.not.in.oz;Initial Catalog=COMM2000;Persist Security Info=True;User ID=fake2;Password=f8k3r" providerName="System.Data.SqlClient"/>
    <add name="ADConnectionString" connectionString="LDAP://were.not.in.oz/DC=were,DC=not,DC=in,DC=oz"/>
  </connectionStrings>

编辑

我已经确定以前的开发者正在使用 tnsnames,将它们放在 ~/network/admin/ 目录中。我更改了我的 *.ora 文件,使其看起来像他们的。我现在收到以下错误:

ORA-12638: Credential retrieval failed

我会投票给任何 cmets 并帮助我解决这个问题的人。我需要能够调试代码,这样我才能完成我的工作,目前我做不到。 :(

谢谢, 极客欧米茄

【问题讨论】:

  • 您是在谈论软件安装(查找 oraInventory)还是数据库创建(您是否有权访问数据库本身以查询当前参数),或者两者兼而有之?是服务器还是客户端安装;如果是客户,是完整的还是即时的?为什么需要重新安装而不是重新配置?
  • 如果是仅客户端,则没有数据文件,因为没有本地数据库。您是如何在 Visual Studio 中设置连接/数据源的 - 什么驱动程序、参数等?这与以前的开发人员设置相比如何?不确定“进行直接连接”是什么意思,但您说您没有使用 TNS 别名,因此 .ora 文件不相关。听起来像是连接配置问题,而不是客户端安装问题。当您“加载 vs 2008 解决方案”时,这些是否包含连接设置?还是您正在调试的所有 50 个站点都连接到同一个开发/测试数据库?
  • 前开发人员使用的实际连接数据将提供更多关于问题可能的线索。 ORA-12154 可能是几件事,取决于所使用的命名方法,还有我认为的驱动程序。想一想,两台 PC 是否运行相同版本的 Windows,它们都是 32 位还是 64 位?
  • 连接设置 - 驱动程序和连接字符串。他们可能会在它的构建方式上显示出一些错误。也许他们指的是您看不到的服务器,或者您无法解析为 IP 的主机名,或者其他开发人员确实有本地数据库而您没有...
  • 你能用完全相同的连接字符串从 SQL Developer 连接吗?听起来仍然可能是驱动程序问题,但仍然不知道您正在使用哪个驱动程序或连接字符串是什么。日志是否显示它真正尝试使用的实际连接字符串 - 以防万一那里发生奇怪的事情。是64位的操作系统,你说的VS是32位的,Oracle客户端是32位的还是64位的?

标签: debugging windows-7 oracle11g installation reverse-engineering


【解决方案1】:

您在 *.ora 文件中究竟做了哪些更改?你能发布他们当前的内容吗? 尝试使用这个文件:NETWORK\ADMIN\sqlnet.ora 我建议设置

SQLNET.AUTHENTICATION_SERVICES = (NONE) 

如果这没有帮助,那么只需尝试不同的值(但对我来说,NONE 没有完美的效果)。 还要检查这个 NETWORK\ADMIN\tnsnames.ora 你需要在那里记录你的数据库。

当我只有 x64 版本的客户端时,我也遇到了一些困难。在我安装 x86 版本后,它们也部分消失了。

【讨论】:

    【解决方案2】:

    这是我为解决问题所做的简单说明。关键是查看以下目录 NETWORK\ADMIN\:

    1. tnsnames.ora 添加了旧开发机器中存在的信息。也就是说,我们连接到两个 数据库

    2. sqlnet.ora 正如另一位用户在这里所说。必须将 SQLNET.AUTHENTICATION_SERVICE = (NTS) 更改为 SQLNET.AUTHENTICATION_SERVICE = (NONE)。

    【讨论】:

      猜你喜欢
      • 2016-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多