14

我是 SQL Server 用户。

我在一个使用 oracle 的项目中(我很少使用它)我需要创建一个 ODBC 连接,以便我可以通过 MS Access 访问一些数据我的机器上有一个名为 oraHome90 的应用程序。它似乎允许在“网络配置实用程序”中配置称为侦听器的东西,我认为还需要完成“本地网络服务名称配置”。IT 支持人员为我提供了这些信息来设置 ODBC 连接。我已经尝试了所有我能想到的组合。我可以通过一个成功通过“登录”到 oracle 服务器数据库的测试的测试。当我尝试创建 ODBC 连接时,我收到以下错误:ORA-12154:TNS:无法解析服务名称。

假设我想从头开始,并且以下信息应该允许我连接到数据库......有什么建议或评论吗?注意:最终项目会有一个网站 .ASP 页面查询数据,但我必须首先证明我可以通过 MS Access 使用 ODBC 连接看到数据

Service name: SERVICENAME
HOST = HOST.XYZi.com
User Id: MYUSERID
Password: MYPASSWORD
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

'Oracle Connection
Dim ocst
Dim oconn

ocst = "Provider=OraOLEDB.Oracle;" & _ 
        "Data Source=DATASOURCE;" & _ 
        "User ID=CHIJXL;" & _ 
        "Password=password;" 

set oconn = CreateObject("ADODB.Connection")
4

22 回答 22

9

来自http://ora-12154.ora-code.com

ORA-12154:TNS:无法解析指定的连接标识符
原因:使用连接标识符请求了与数据库或其他服务的连接,并且指定的连接标识符无法使用配置的命名方法之一解析为连接描述符. 例如,如果使用的连接标识符类型是网络服务名称,则在命名方法存储库中找不到网络服务名称,或者无法定位或访问存储库。
行动

  • 如果您使用本地命名(TNSNAMES.ORA 文件):

  • 确保“TNSNAMES”列为 Oracle Net 配置文件 (SQLNET.ORA) 中 NAMES.DIRECTORY_PATH 参数的值之一

  • 验证 TNSNAMES.ORA 文件是否存在并且位于正确的目录中并且可以访问。

  • 检查用作连接标识符的网络服务名称是否存在于 TNSNAMES.ORA 文件中。

  • 确保 TNSNAMES.ORA 文件中的任何位置都没有语法错误。查找不匹配的括号或杂散字符。TNSNAMES.ORA 文件中的错误可能使其无法使用。

  • 如果您使用目录命名:

  • 验证“LDAP”是否列为 Oracle Net 配置文件 (SQLNET.ORA) 中 NAMES.DIRETORY_PATH 参数的值之一。

  • 验证 LDAP 目录服务器是否已启动并且可以访问。

  • 验证目录中是否配置了用作连接标识符的网络服务名称或数据库名称。

  • 通过将完全限定的网络服务名称或完整的 LDAP DN 指定为连接标识符来验证正在使用的默认上下文是否正确

  • 如果您使用的是简单连接命名:

  • 验证“EZCONNECT”是否列为 Oracle Net 配置文件 (SQLNET.ORA) 中 NAMES.DIRETORY_PATH 参数的值之一。

  • 确保指定的主机、端口和服务名称正确。

  • 尝试将连接标识符括在引号中。有关命名的更多信息,请参阅 Oracle 网络服务管理员指南或 Oracle 操作系统特定指南。

于 2008-10-15T19:26:59.717 回答
5

假设您使用的是 TNSNAMES 命名,这里有几件事要做:

  • 在与 OraHome90 关联的 network/admin 子目录中创建/修改 tnsnames.ora 文件,以包含您的 oracle 数据库的条目:
> SERVICENAME_alias =
>    (DESCRIPTION =
>     (ADDRESS = (PROTOCOL = TCP)(HOST = HOST.XYZi.com)(PORT = 1521))
>     (CONNECT_DATA = (SERVICE_NAME = SERVICENAME))

这是假设您使用的是标准 Oracle 端口 1521。请注意,servicename_alias 可以是您想在本地系统上使用的任何名称。您可能还会发现需要指定 (SID = SERVICENAME) 而不是 (SERVICENAME=SERVICENAME)。

  • 执行 tnsping servicename_alias 来验证连通性。在继续之前先完成这项工作。这将告诉您是否超过了 12154 错误。
  • 假设连接良好,请使用控制面板创建一个 ODBC DSN,指定您选择的 Oracle ODBC 驱动程序(通常至少有一个 Microsoft ODBC 驱动程序,它应该可以作为概念证明充分工作)。我将假设您给 DATASOURCE 的名称。使用 servicename_alias 作为 ODBC 配置中的服务器名称。
  • 此时您应该能够通过 Access 连接到您的数据库。我不是 VB 程序员,但我知道您应该能够转到 File->Get External Data->Link Tables 并连接到您的 ODBC 源。我会假设您的代码也可以正常工作。
于 2008-10-15T23:23:54.433 回答
4

参考此MSDN POST中的 #7 ,添加一个注册表项对我有用。我安装了 Vs2010 等 oracle 11.0。

检查 HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE 中的注册表项“TNS_ADMIN”。如果存在,请确保它具有正确的值为“Dir:\app\product\11.1.0\client_1\network\admin”。如果您没有看到密钥,请创建密钥并设置适当的值,如下所示。Regedit->HKEY_LOCAL_MACHINE->Software->Oracle->右键单击 NEW->StringValue 并将其命名为 TNS_ADMIN 并给出值“X:\app\product\11.1.0\client_1\network\admin”</p>

于 2013-05-29T15:45:59.330 回答
3

我努力解决这个问题几个小时,直到我在我的电脑中找到一个名为 TNS_ADMIN 的环境变量 => 属性 => 高级 => 环境变量 => 在系统变量中查找一个名为 TNS_ADMIN 的条目。添加 TNS_ADMIN 以更改 Tnsnames.ora 条目的默认路径。当它用于可以为所有网络计算机设置通用 tnsnames.ora 条目的网络环境中时,这很有用。要查看 tnsnames.ora 的默认路径,请在 TNS_ADMIN 中添加默认路径。

于 2012-02-21T09:53:42.773 回答
2

@Warren 和 @DCookie 已经介绍了解决方案,需要强调的一件事是使用tnsping. 在尝试连接之前,您可以使用它来证明您的 TNSNames 是正确的。

正确设置 tnsnames 后,您可以使用 ODBC 或尝试使用本地 oracle 连接的TOra 。TOra 或类似的东西(TOAD、SQL*Plus 等)在调试和改进 SQL 方面将证明是无价的。

最后但同样重要的是,当您最终连接到 ASP.net 时,请记住您可以使用 Oracle 数据连接库。有关大量资源,请访问Oracle.com 。

于 2008-10-15T23:46:52.873 回答
2

如果文件中定义的 tns 名称开头有空格tnsnames.ora,则某些连接器(如 odbc)可能会出现此错误。删除开头的空格字符。

于 2012-01-11T11:51:53.760 回答
2

它与文件夹结构中嵌入的空间无关。

我有同样的问题。但是,当我创建了一个名为 TNS_HOME 的环境变量(在系统级和用户级都定义)并使其指向存在 TNSNAMES.ORA 的文件夹时,问题就解决了。瞧!

文基

于 2014-04-02T21:18:13.150 回答
2

啊啊啊!!我又遇到了这个!!!

只需将 ToadForOracle 安装在 C:\ 或路径中不带括号的任何目录中。


就我而言,这是因为我使用的是 x64 PC,并且仍在使用带有 32 位驱动程序的旧 Oracle 9i!

我将 SQL Reporting Services 与 Oracle 数据库一起使用。问题是 Visual Studio (BIDS) 路径中的括号。Oracle 不喜欢以带括号的路径开头的应用程序:

路径中带有括号的 RDBMS 10g XE 问题

因此,我制作了一个 BAT 文件以使用 Progra~2 作为“Program Files (x86)”的短路径名打开 Visual Studio。

这是BAT文件的内容:

rem Progra~2 is short path name for "Program Files (x86)" and works around an Oracle client bug that doesn't like the ()'s in the path
start /B "C:\Progra~2\Microsoft Visual Studio 9.0\Common7\IDE" "C:\Progra~2\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe"

我将此 BAT 文件命名为 StartBIDS.BAT 并将其放在目录中:

"C:\Program Files\Microsoft SQL Server\Start BIDS.bat"

然后我在我的桌面和开始菜单上对 BAT 文件进行快捷方式,并更改快捷方式图标。这使我可以打开用于与 Oracle 一起工作的 TOAD、Visual Studio、BIDS 等应用程序。

更新:

或者做一个连接:

mklink /J "C:\Program Files (x86)\" "C:\Program Files x86\"

然后删除快捷方式中的括号:

在此处输入图像描述

于 2015-10-08T06:10:01.373 回答
1

我遇到了同样的问题,并且出现了同样的错误。我的 TNSNAMES:ORA 文件也很好,但显然由于防火墙阻止了访问而出现了问题。所以一个好的提示是确保防火墙没有阻止对数据源的访问。

于 2011-04-12T10:43:44.517 回答
1

我也遇到过这个问题。我发现问题是因为 Oracle DB 不喜欢 C:program files (x86)\Toad...... 中的空间所以我创建了一个名为 C:App\Toad 的新目录,然后在其中重新安装以将 Toad 连接到 Oracle . 有效。

于 2014-01-15T08:00:52.820 回答
1

我使用这个步骤解决了这个问题。

首先,如果您没有安装相同的目录或驱动器,则会发生此错误。

但答案就在这里。

  1. 以管理员身份登录窗口。
  2. 转到控制面板。
  3. 系统属性,然后单击环境
  4. 找到操作系统变量并将名称更改为“TNS_ADMIN”

    在此处输入图像描述

  5. 并将值更改为“tnsnames 的目录地址” 在此处输入图像描述

  6. 重新启动系统。

  7. 恭喜。
于 2017-04-10T13:03:41.517 回答
1

我已经通过从 C:\oracle\ora92\network\ADMIN 路径中删除 sqlnet.ora 解决了这个问题

  • 确保 TNSNAMES.ORA 文件存在于正确的目录中
  • 确保 PATH 环境变量具有 oracle 的条目
  • 确保 TNSNAMES.ORA 中没有语法问题
  • 尝试删除 sqlnet.ora 文件
于 2018-06-25T11:55:00.777 回答
1

在对另一个答案的评论中提到了这一点,但我想将其移至实际答案,因为这也是我的问题,如果它是一个答案,我会投票赞成。

我在 Linux 上,并且 tnsnames.ora 文件未设置为所有人可读。在通过本地工作的 tns 使其可读连接之后。

$ chmod +r tnsnames.ora
于 2015-08-20T16:00:21.800 回答
0

解决了数小时的问题。我已经安装了适用于 Oracle 的 Beta Entity Framework,并且在 Visual Studio 2010 MVC 3 项目中,我在 .NET 选项卡下引用了 Oracle.DataAccess ...这一直给我“Oracle ORA-12154:TNS:无法.. 。“ 错误。我终于浏览到以前的 Oracle 安装在 c:\Oracle\product.... 下使用旧的 10.2.0.100 版本的 dll。最后它现在可以工作了。希望它可以帮助别人。

于 2011-06-09T17:31:12.883 回答
0

我们通过重新安装 Oracle 数据库客户端解决了我们的问题。不知何故,在其中一台工作站上安装不成功(即使没有日志记录),但是在将 Oracle 目录的大小/文件/文件夹与工作的客户端工作站进行比较时,丢失了大量文件。一旦我们执行了全新安装,一切都运行良好。

于 2014-07-30T14:57:37.900 回答
0

仅重新启动 SID 服务。例如你的 SID name = orcl 那么所有与 orcl 相关的服务都应该重启然后你的问题就解决了

于 2014-02-06T11:59:52.483 回答
0

就我而言,错误是因为我有 2 个 Oracle 客户端,这是解决方案:

本地 IIS 上的 Oracle ORA-12154 错误,但 Visual Studio 开发服务器上没有

于 2014-10-02T13:13:45.443 回答
0

我只花了一个小时,我是甲骨文的新手,所以我完全糊涂了..

情况:

刚刚安装了 Visual Studio 2012 Oracle 开发者工具。当我这样做时,我丢失了下拉列表中的项目,其中包含我在 TOAD 中的 TNS 条目。我从 Visual Studio 和 TOAD 收到了这个错误!!哇!所以我在“所有用户”下添加了环境变量 TNS_ADMIN 以及我的 .ora 文件的路径(我现在工作得很好,因为它一直工作到我把它弄坏了)。蟾蜍接受了这种变化。仍然 Visual Studio 不会给我任何爱......仍然得到同样的错误。然后,我将环境变量添加到我的用户变量中.. 中提琴!

确保为系统和用户设置环境变量

于 2013-01-10T01:39:29.113 回答
0

如果您有同名的 32 位 DSN 和 64 位 DSN,Windows 将自动选择 64 位,如果您的应用程序是 32 位,则会显示此错误。请注意这一点。

于 2015-11-12T09:40:37.080 回答
0

此错误消息可能非常令人困惑,并且解决方案可能非常原始。

就我而言:Oracle 存储过程通过 "Provider=OraOLEDB.Oracle;Data Source= ...etc" 将记录集发送到 MS Excel。

问题是发送到 Excel 2010 的 Oracle 数据列中的一些十进制数字。当我使用 Oracle SQL 查询 ROUND(grosssales_eur,2) AS Grosssales_eur 时,它运行良好。

于 2020-12-15T11:54:55.110 回答
0

由于文件名 tsnames.ora 而不是 tnsnames.ora 中的拼写错误,我遇到了这个问题

于 2015-12-15T15:05:19.513 回答
0

我们也有类似的问题。我们发现我们在 tnsnames.ora 中为连接字符串提供了多个别名,例如:

svc01,svc02=(描述=(地址=(协议=TCP)(主机=xxxx)(端口=50))(连接数据=(服务器=专用)(服务名称=yyyysvc.world)))

因此,当使用 ODBC 创建连接时,当我们选择 TNS 服务名称的值时,自动填充显示“svc01”(请注意那里的额外逗号)。一旦我们删除逗号,它就开始为我们工作。

于 2015-08-27T18:31:39.407 回答