为什么ORA-12514易于连接但不能与TNS连接?

时间:2014-09-26 10:07:09

标签: oracle sqlplus

我可以使用TNS样式的连接描述符成功连接到我的数据库:

connect <user>/<pass>@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=<host>)(Port=<port>))(CONNECT_DATA=(SID=<sid>)));

但是当我尝试这样连接时:

connect <user>/<pass>@<host>:<port>/<sid>;

我得到ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

为什么第一个命令有效但第二个没有?

1 个答案:

答案 0 :(得分:4)

SID和服务名称不是一回事。在您的工作版本中,您明确表示您正在使用CONNECT_DATA部分中的SID。

使用easy connect syntax时:

CONNECT username@[//]host[:port][/[service_name][:server]][/instance_name]]
Enter password: password

......你没有提供SID;你真的在做:

connect <user>/<pass>@<host>:<port>/<service_name>

服务名称和SID 可能相同,但由于您收到了该错误,因此在您的情况下它们似乎不是。如果您有权访问服务器,则可以运行lsnrctl services以查看可识别的服务名称。或者,如果您可以以具有足够权限的用户身份进行连接,则可以查询:

select value from v$parameter where name = 'service_names';

任何一种方法都可能报告多个服务名称,您可以使用任何一种。你可能有一个像<SID>.<domain>这样的人可能是一个明显的选择。如果有疑问,请问DBA你应该使用哪个。