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

gbr*_*ton 18 oracle sqlplus connect

我从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.
Run Code Online (Sandbox Code Playgroud)

并尝试连接到数据库:

connect user\password@hostname
Run Code Online (Sandbox Code Playgroud)

并收到错误消息:

ERROR:
ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

我运行了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>
Run Code Online (Sandbox Code Playgroud)

jak*_*etr 19

你缺少服务名称:

 SQL> connect username/password@hostname:port/SERVICENAME
Run Code Online (Sandbox Code Playgroud)

编辑

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

select sys_context('USERENV','SERVICE_NAME') from dual
Run Code Online (Sandbox Code Playgroud)

select sys_context('USERENV','SID') from dual
Run Code Online (Sandbox Code Playgroud)


ale*_*nin 14

在相同的情况下,我遇到了完全相同的问题.我没有tnsnames.ora文件,我想在命令行中使用带有Easy Connection Identifier格式的SQL*Plus.我解决了这个问题如下.

SQL*PLUS®用户指南和参考给出了一个例子:

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

请注意两个要点:

  1. 引用连接标识符.您有两种选择:
    1. 您可以使用SQL*Plus CONNECT命令并简单地传递带引号的字符串.
    2. 如果要在命令行上指定连接参数,则必须在引号之前添加反斜杠作为屏蔽.它指示bash将引号传递给SQL*Plus.
  2. 必须按照DBA配置的FQDN格式指定服务名称.

我发现这些好问题,通过现有的连接,检测服务名称:1,2.尝试此查询,例如:

SELECT value FROM V$SYSTEM_PARAMETER WHERE UPPER(name) = 'SERVICE_NAMES'
Run Code Online (Sandbox Code Playgroud)

  • 这对我也有用!谢谢!我在 bash 中使用了这个: ```sqlplus 'system@"//localhost:1521/xe"'``` (2认同)