ORA-12514: TNS:listener does not currently know of service requested in connect
遇到这个错误,去网上查了,还是没有答案。  数据库的listener.ora
kkk=
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = s2cs5020)(PORT = 1536))
    )
  )在另外一台机器上用toad直接连,ip、sid、port报ora-12514,因为没有写tnsname.ora的权限,只能直接连。可是tnsname.ora的内容如果为下面,就可以连接成功了
kkk=
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.31.9.227)(PORT = 1544))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.31.9.52)(PORT = 1543))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = kkk)
    )
  )
LISTENER_kkk =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.31.9.227)(PORT = 1544))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.31.9.52)(PORT = 1543))
  )
不理解,为什么tnsnames.ora要包括listener的内容。

解决方案 »

  1.   

    http://lzysystem.javaeye.com/blog/424569
      

  2.   

    看了1L的网页,自己总结了一下:Tnsnames.ora,这个文件提供的tnsname到主机名或者ip的对应,就是客户端解析连接字符串的顺序中有TNSNAMES时,才会尝试使用这个文件。
    PROTOCOL:客户端与服务器端通讯的协议,一般为TCP。
    HOST:数据库侦听所在的机器的机器名或IP地址,数据库侦听一般与数据库在同一个机器上,所以当我说数据库侦听所在的机器一般也是指数据库所在的机器。在UNIX或WINDOWS下,可以通过在数据库侦听所在的机器的命令提示符下使用hostname命令得到机器名,或通过ipconfig(for WINDOWS) or ifconfig(for UNIX)命令得到IP地址。需要注意的是,不管用机器名或IP地址,在客户端一定要用ping命令ping通数据库侦听所在的机器的机器名,否则需要在 hosts文件中加入数据库侦听所在的机器的机器名的解析。
    PORT:数据库侦听正在侦听的端口,可以察看服务器端的listener.ora文件或在数据库侦听所在的机器的命令提示符下通过lnsrctl status [listener name]命令察看。此处Port的值一定要与数据库侦听正在侦听的端口一样。
    要使用LISTENER来监听数据库的网络端口,主机名等。而在tnsname.ora是用来保存协议、主机名和端口的,所以要在tnsname.ora中使用监听