oracle有关监听的问题

在启动sql developer时,提示tns连接超时,分析:

1,先检查windows端的客户端配置是不是真确:

 D:\instantclient_11_2\network\admin\tnsnames.ora的配置

  network\admin\目录是手动建立的,tnsnames.ora是从linux端拷贝过来的!

2,那就是linux(安装的oracle软件及oracle数据库)端的监听的问题:

解决思路:

  a,tnsping orcl---检查监听是不是ok,结果报错:TNS-12541: TNS:no listener

  (ps:监听所在的目录:$ORACLE_HOME/network/admin/)先查看listener.ora和tnsnames.ora

   这两个文档的配置,发现都是ok的

  b,lsnrctl start 重启 发现没有报错,但是当利用tnsping orcl检查是就报错!

     首先用netca从新配置listen和local net,在配完local net还是检测报错:ora-12514错误

  c,想其他办法,先重启监听:lsnrctl start,结果报错:

         TNS-00512 Address already in use
          Cause: Specified listener address is already being used.
          Action: Start your listener with an unused address.

   发现原因是:已经在监听1521端口,但是停监听又停不掉,此时直接kill掉!!!

   之后这样可以解决:

i). 打开<OracleHome>/network/admin/listener.ora文件,找到:

LISTENER =

 (DESCRIPTION_LIST =

   (DESCRIPTION =

     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.3)(PORT = 1521))

   )

  )
 ii)添加

(SID_DESC =

      (GLOBAL_DBNAME = orcl)

      (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)  

      (SID_NAME = ORCL)

     )

iii)最后变成

LISTENER =

 (DESCRIPTION_LIST =

   (DESCRIPTION =

     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.3)(PORT = 1521))

   )

 (SID_DESC =

      (GLOBAL_DBNAME = orcl)

      (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)  

      (SID_NAME = orcl)

     )

  )

之后再:tnsping orcl发现一切都ok了!!!


ps1,iptables要关闭(最好),有时候,即使是所有的链默认都是accept也会出错!

ps2,如果有时候感觉所有的配置都是ok的,但是还是提示 Ora-12514:TNS:监听程序当前无法识别链接描述符中请求的服务,此时最好的办法就是利用netca从新配置listen!(尤其是安装oracle时,没有太注意,把语言选成中文!!!)

ps3,以上解决的方案(在listener.ora中添加语句),其实是利用静态的方式,注册监听到oracle的实例,默认情况是动态注册的--即在用netca配置完listen之后就默认使用动态注册,但是如果动态注册不上,可以利用这种静态注册的方法!!!

ps4,在重启监听时,提示:the listener supports no services

  此时已经在添加了静态注册到oracle实例,但是还是报这个错,解决此类问题的思路:

  a,重启监听

  b,用netca重启添加listen!!!