Oracle ORA-12154:TNS:无法解析服务名称错误?

时间:2008-10-15 19:23:14

标签: oracle odbc tns

我是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")

22 个答案:

答案 0 :(得分: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 Net Services管理员指南”或Oracle操作系统特定指南。

答案 1 :(得分: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的名字。在ODBC配置中使用servicename_alias作为服务器名称。
  • 此时您应该可以通过Access连接到您的数据库。我不是VB程序员,但我知道您应该能够转到File->获取外部数据 - >链接表并连接到您的ODBC源。我认为你的代码也可以。

答案 2 :(得分: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->软件 - > Oracle->右击   NEW-> StringValue并将其命名为TNS_ADMIN并给出值   “X:\应用\产品\ 11.1.0 \的Client_1 \网络\管理员”

答案 3 :(得分:3)

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

答案 4 :(得分:2)

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

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

venki

答案 5 :(得分:2)

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

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

最后但并非最不重要的是,当您最终与ASP.net连接时,请记住您可以使用Oracle数据连接库。有关大量资源,请参阅Oracle.com

答案 6 :(得分:2)

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

答案 7 :(得分:1)

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

  • 确保TNSNAMES.ORA文件存在于正确的目录中
  • 确保PATH环境变量具有用于oracle的条目
  • 确保TNSNAMES.ORA中没有语法问题
  • 尝试删除sqlnet.ora文件

答案 8 :(得分:1)

我遇到了同样的问题并且出现了同样的错误。我的TNSNAMES:ORA文件也很好,但显然由于防火墙阻止访问存在问题。因此,一个好的建议是确保防火墙不会阻止对数据源的访问。

答案 9 :(得分:1)

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

答案 10 :(得分:1)

在另一个答案的comment中提到了这一点,但我想把它移到一个实际的答案,因为这也是我的问题,如果它是一个答案,我会赞成它。< / p>

我在Linux上并且tnsnames.ora文件没有设置为每个人都可读。在通过本地工作的tns进行连接之后。

$ chmod +r tnsnames.ora

答案 11 :(得分:1)

Arrhhh !!我再次参与此活动!!!

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

在我的情况下,因为我使用的是x64 PC并且仍然使用旧的Oracle 9i和32位驱动程序!

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

RDBMS 10g XE problem with parenthesis in path

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

以下是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等应用程序。

<强>更新

或者选择一个Junction:

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

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

enter image description here

答案 12 :(得分:0)

在我的情况下,错误是因为我有2个Oracle客户端,这是解决方案:

Oracle ORA-12154 error on local IIS, but not with Visual Studio Development Server

答案 13 :(得分:0)

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

在我的情况下:Oracle存储过程通过“ Provider = OraOLEDB.Oracle; Data Source = ... etc”将记录集发送到MS Excel。

问题是发送到Excel 2010的Oracle数据列中有十进制数。 当我使用Oracle SQL查询ROUND(grosssales_eur,2)AS grosssales_eur时,它工作正常。

答案 14 :(得分:0)

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

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

但答案就在这里。

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

    enter image description here

  5. 并将值更改为“tnsnames的目录地址” enter image description here

  6. 重启系统。

  7. Congrulations。

答案 15 :(得分:0)

由于文件名tsnames.ora中的拼写错误而不是tnsnames.ora

,我遇到了这个问题

答案 16 :(得分:0)

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

答案 17 :(得分:0)

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

svc01,svc02 =(DESCRIPTION =(ADDRESS =(PROTOCOL = TCP)(HOST = xxxx)(port = 50))(CONNECT_DATA =(SERVER = DEDICATED)(service_name = yyyysvc.world)))

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

答案 18 :(得分:0)

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

答案 19 :(得分:0)

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

答案 20 :(得分:0)

我只花了一个小时,我是甲骨文的新手,所以我彻底迷茫了..

情况:

刚刚安装了visual studio 2012 Oracle开发人员工具。当我这样做时,我丢失了我的下拉列表中的项目,其中包含我在TOAD中的TNS条目。我从Visual studio AND TOAD得到了这个错误! WTH!所以我添加了环境变量TNS_ADMIN在“所有用户”下的路径到我的.ora文件(我现在工作正常,因为它工作,直到我打破它)。蟾蜍接受了这一改变。仍然Visual Studio不会给我任何爱...仍然得到相同的错误。然后,我添加了环境变量给我的用户变量.. VIOLA !!

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

答案 21 :(得分:0)

解决了几个小时的问题。我已经安装了适用于Oracle的Beta实体框架,并且在Visual Studio 2010 MVC 3项目中,我在标签.NET下引用Oracle.DataAccess ......这一直给我“Oracle ORA-12154:TNS:无法...... “错误。我终于使用旧的10.2.0.100版本的dll浏览了c:\ Oracle \ product ....之前的Oracle安装。最后它现在有效。希望它可以帮助别人。