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

Joe*_*Joe 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")
Run Code Online (Sandbox Code Playgroud)

war*_*ren 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操作系统特定指南.

  • 为了他人的利益:就我而言,tnsnames.ora没有对他人的读取权限。授予所需的权限后,数据库连接即可正常工作。 (2认同)

gui*_*mie 6

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

\n\n
\n

检查 HKEY_LOCAL_MACHINE\\SOFTWARE\\ORACLE 处的注册表项 \xe2\x80\x9cTNS_ADMIN\xe2\x80\x9d。如果存在,请确保其具有正确的值,如 \xe2\x80\x9cDir:\\app\\product\\11.1.0\\client_1\\network\\admin\xe2\x80\x9d。\n如果您没有\xe2\x80\x99 看到该密钥,则创建该密钥并设置适当的值\n,如下所示。Regedit->HKEY_LOCAL_MACHINE->Software->Oracle->RightClick\n NEW->StringValue 并将其命名为 TNS_ADMIN 并给出值 \n \xe2\x80\x9cX:\\app\\product\\11.1.0\\client_1 \\网络\\管理\xe2\x80\x9d

\n
\n

  • 这是对我有用的解决方案(Visio 2010 / Oracle 11.0.2.4)。我的注册表中没有 TNS_ADMIN,因此我添加了它,然后重新启动 Visio,它就工作了。 (2认同)

DCo*_*kie 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))
Run Code Online (Sandbox Code Playgroud)

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

  • 执行tnsping servicename_alias以验证连接.在继续前进之前先做好这项工作.这将告诉您是否超过了12154错误.
  • 假设一个良好的连接,使用控制面板创建一个ODBC DSN,为您选择的Oracle指定ODBC驱动程序(通常至少有一个Microsoft ODBC驱动程序,它应该充分作为概念证明).我会假设你给DATASOURCE的名字.在ODBC配置中使用servicename_alias作为服务器名称.
  • 此时,您应该能够通过Access连接到您的数据库.我不是VB程序员,但我知道您应该能够转到文件 - >获取外部数据 - >链接表并连接到您的ODBC源.我认为你的代码也可以正常工作.


小智 5

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