oracle SQLPLUS错误:ORA-12504:TNS:未在CONNECT_DATA中为侦听器指定SERVICE_NAME

mwngjboj  于 2023-06-05  发布在  Oracle
关注(0)|答案(5)|浏览(338)

我从Oracle下载了SQLPLUS:
http://www.oracle.com/technetwork/topics/winx64soft-089540.html
Basic Lite和SQLPlus
然后启动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

我错过了什么?
我运行了雅各布建议的查询,我得到了

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>
aiqt4smr

aiqt4smr1#

您缺少服务名称:

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

编辑

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

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

和/或

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

cs7cruho2#

我在同样的情况下遇到了同样的问题。我没有tnsnames.ora文件,我想在命令行中使用SQLPlus和Easy Connection Identifier格式。我解决这个问题如下。
《SQL
Plus®用户指南和参考》提供了一个示例:
sqlplus hr@\“sales-server:1521/sales.us.acme.com\”
要注意两个重要的点:
1.连接标识符用引号引起来。您有两个选择:
1.您可以使用SQLPlus CONNECT命令并简单地传递带引号的字符串。
1.如果你想在命令行中指定连接参数,那么你必须在引号前添加反斜杠作为屏蔽。它指示bash将引号传入SQL
Plus。
1.服务名称必须以FQDN形式指定,因为它是由DBA配置的。
我发现这些好问题可以通过现有连接检测服务名称:12 .例如,尝试以下查询:

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

xeufq47z3#

只是一个小小的观察:你一直提到conn usr\pass,这是一个错字,对吗?因为它应该是conn usr/pass。还是在基于Unix的操作系统上有所不同?
此外,为了确保:如果您使用tnsnames,您的登录字符串将与使用本主题开始时使用的登录方法时不同。
tnsnames.ora应该在$ORACLE_HOME$\network\admin中。这是您试图连接的机器上的Oracle主目录,因此在您的情况下是您的PC。如果您有多个oracle_homes并且希望只使用一个tnsnames.ora,您可以设置环境变量tns_admin(例如:设置TNS_ADMIN=c:\oracle\tns),并将tnsnames.ora放在该目录中。
您的原始登录方法(usr/pwd@10.15.240.13:port/servicename)应该始终有效。到目前为止,我认为您已经掌握了所有信息,除了端口号,我相信您的DBA能够给予端口号。如果此方法仍然不起作用,则可能是服务器的IP地址无法从客户端获得,或者是防火墙问题(阻止某个端口),或者是与Oracle或SQL*Plus没有(直接)相关的其他问题。
hth!问候,雷科

vpfxa7rd

vpfxa7rd4#

我只在一个服务器上遇到这种奇怪的行为,并且只有当我将env变量TNS_ADMIN放在默认位置network/admin时,它才能从脚本中工作

pdkcd3nj

pdkcd3nj5#

以下为我工作:
/usr/lib/oracle/21/client64/bin/impdp用户名/密码@aws-rds-hostname:1521/DATABASE NAME DIRECTORY=DATA_PUMP_DIR dumpfile=filename.dmp logfile=filename.log full=y

相关问题