最初用instantclient客户端使用sqlplus xxx/[email protected]:1521/orcl 命令连接Oracle服务器报错误:ORA-12541: TNS:no listener 后来经过查询是因为服务器中listener.ora里配置的是localhost,将他改为了服务器计算机名。然后重启了TNSlistener服务,再次连接发现报错误:ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor最后我发现用服务器的PLSQL连接上数据库后,再通过instantclient远程连接就没问题了。我想问下这是什么原因呀?  而且我发现再次重启TNSlistener服务,又无法连接了,并且在服务器中使用instantclient命令行也无法连接。按理来说PLSQL是基于instantclient的,咋只有用PLSQL连接上数据库后,才能正常。

解决方案 »

  1.   

    如果plsq能够连接,按说不应该存在命令行连接不上的情况。请参考如下排查:
    重启监听后,查看监听状态(命令:lsnrctl status),看监听是否已经注册。动态监听自动注册需要一段时间。
    确定监听注册成功后再次使用命令行或plsql连接。
    动态监听除了自动注册外,也可以使用手动注册,请自行百度注册命令。
      

  2.   

    第二个错误是因为你tnsnames配错了服务名。
    看你的描述,如果中间没有什么步骤遗漏的话,感觉像是装了多个oracle软件导致的问题——无论是客户端还是服务器端软件,要连接远程数据库的话,一个就够了,不需要都上。