SQLPLUS错误:ORA-12504:TNS:侦听器未在CONNECT_DATA中获得SERVICE_NAME

时间:2015-04-15 19:36:02

标签: oracle connect sqlplus

我从Oracle下载了SQLPLUS:

http://www.oracle.com/technetwork/topics/winx64soft-089540.html

Basic Lite和SQL * Plus

然后我启动了SQL * Plus:

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.

并尝试连接数据库:

connect user\password@hostname

并收到错误消息:

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

我错过了什么?

我运行了Jakub建议的查询,我得到了

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>

4 个答案:

答案 0 :(得分:17)

您缺少服务名称:

 SQL> connect username/password@hostname:port/SERVICENAME

修改

如果您可以从其他计算机连接到数据库,请尝试在那里运行:

select sys_context('USERENV','SERVICE_NAME') from dual

select sys_context('USERENV','SID') from dual

答案 1 :(得分:13)

在相同的情况下,我遇到了完全相同的问题。我没有tnsnames.ora文件,我想在命令行中使用带有Easy Connection Identifier格式的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. 必须按照DBA配置的FQDN格式指定服务名称。
  3. 我发现这些好问题是通过现有连接检测服务名称:12。请尝试此查询,例如:

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

答案 2 :(得分:0)

只是一个小小的观察:你一直提到conn usr \ pass,这是一个错字,对吧?因为它应该是conn usr / pass。或者基于Unix的操作系统有什么不同?

此外,只是为了确定:如果你使用tnsnames,你的登录字符串将与你使用登录方法时的内容有所不同。

tnsnames.ora应该在$ ORACLE_HOME $ \ network \ admin中。这是您尝试连接的机器上的Oracle主页,因此就您的PC而言。如果您有多个oracle_home并希望只使用一个tnsnames.ora,则可以设置环境变量tns_admin(例如,设置TNS_ADMIN = c:\ oracle \ tns),并将tnsnames.ora放在该目录中。

您最初的登录方法(usr /pwd@10.15.240.13:port / servicename)应始终有效。到目前为止,我认为你有所有的信息,除了端口号,我相信你的DBA能够给你。如果此方法仍然无效,则无法从客户端获取服务器的IP地址,或者是防火墙问题(阻止某个端口),或者其他与(Oracle)或SQL * Plus无关的事件。< / p>

HTH! 问候, REMCO

答案 3 :(得分:0)

我只在一台服务器上遇到过这种奇怪的行为,而且只在脚本中 当我放置环境变量 TNS_ADMIN 时它起作用了 尽管它是默认位置网络/管理员