SQLPLUS错误:ORA-12504:TNS监听程序在CONNECT_DATA中没有给出SERVICE_NAME。

25 浏览
0 Comments

SQLPLUS错误:ORA-12504:TNS监听程序在CONNECT_DATA中没有给出SERVICE_NAME。

我从Oracle下载了SQLPLUS:\nhttp://www.oracle.com/technetwork/topics/winx64soft-089540.html\n选择了Basic Lite和SQL*Plus\n然后我启动了SQL*Plus:\n

c:\Program Files\Oracle\instantclient_12_1>sqlplus /nolog
SQL*Plus: Release 12.1.0.2.0 Production on Wed Apr 15 15:25:36 2015
Copyright (c) 1982, 2014, Oracle.  All rights reserved.

\n并尝试连接到数据库:\n

connect user\password@hostname

\n但收到了错误信息:\n

ERROR:
ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA

\n我错过了什么?\n我运行了Jakub建议的查询,我得到了\n

SQL> select sys_context('USERENV','SERVICE_NAME') from dual;
SYS_CONTEXT('USERENV','SERVICE_NAME')
--------------------------------------------------------------------------------
SYS$USERS
SQL> select sys_context('USERENV','SID') from dual;
SYS_CONTEXT('USERENV','SID')
--------------------------------------------------------------------------------
877
SQL>

0
0 Comments

问题出现的原因是没有在CONNECT_DATA中给出SERVICE_NAME。解决方法是通过设置环境变量tns_admin来指定tnsnames.ora文件所在的目录。将tnsnames.ora文件放置在该目录下,然后使用正确的登录方法(usr/pass)即可解决问题。如果仍然无法解决,可能是由于服务器的IP地址无法从客户端访问或防火墙阻止了某个端口等原因。

0
0 Comments

在命令行中使用Easy Connection Identifier格式进行SQL*Plus连接时,我遇到了完全相同的问题。我没有tnsnames.ora文件,并且想要使用SQL*Plus。我通过以下方法解决了这个问题。

SQL*Plus User's Guide and Reference提供了一个例子:

sqlplus hr@\"sales-server:1521/sales.us.acme.com\"

请注意两个重要点:

  1. 连接标识符需要加引号。有两个选项:

    1. 可以使用SQL*Plus CONNECT命令,然后传递带引号的字符串。
    2. 如果要在命令行上指定连接参数,则必须在引号前添加反斜杠。这样可以告诉bash将引号传递给SQL*Plus。
  2. 服务名必须以FQDN形式指定,这是由DBA配置的。

我发现了一些好问题,可以通过现有连接来检测服务名:12。例如,尝试运行以下查询:

SELECT value FROM V$SYSTEM_PARAMETER WHERE UPPER(name) = 'SERVICE_NAMES'

当运行sqlplus --help时,连接标识符不显示引号... 非常感谢!

这对我也起作用了!谢谢!我在bash中使用了这个命令:sqlplus 'system@"//localhost:1521/xe"'

该问题的出现原因是在使用SQL*Plus的Easy Connection Identifier格式进行命令行连接时,没有给出SERVICE_NAME。解决方法是在连接标识符中使用引号,并确保以FQDN形式指定服务名。还可以通过查询V$SYSTEM_PARAMETER视图来检测服务名。

0
0 Comments

SQLPLUS错误:ORA-12504:TNS:listener未在CONNECT_DATA中给出SERVICE_NAME的原因是缺少服务名称。解决方法是通过数据库服务器上的listener.ora文件来查找服务名称。如果没有权限登录服务器,只能使用可以读取一些所需表的用户ID。此外,可以从安装了sqlplus的计算机复制tsnames.ora、listener.ora和sqlnet.ora文件,但需要确保在tnsnames.ora文件中的CONNECT_DATA中有SERVICE_NAME或SID。最后,可以尝试使用完整的连接URL连接到数据库。

0