2014-09-26 82 views
-1

我可以用TNS式连接描述符成功地连接到我的数据库:为什么我可以轻松连接ORA-12514但不能与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

为什么拳头指挥工作,但第二个没有?

回答

3

SID和服务名称不是一回事。在你的工作版本中,你明确地说你在使用SID,在CONNECT_DATA部分。

当您使用easy connect syntax

CONNECT [email protected][//]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。