我可以使用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
。
为什么第一个命令有效但第二个没有?
答案 0 :(得分:4)
SID和服务名称不是一回事。在您的工作版本中,您明确表示您正在使用CONNECT_DATA
部分中的SID。
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你应该使用哪个。