因为hosts文件无法实现侦听动态注册

今天一个同事来求助sqlplus+sid登录不上的问题,测试登录,发现有ora-12514的报错:

检查了sqlnet.ora文件,发现NAMES.DIRECTORY_PATH= (TNSNAMES),是使用tsnnames,继续检查tnsnames.ora文件,发现里面的配置也没有错误,里面的采用IP配置的,IP地址也没有配错:

那么基本排除sqlnet和tnsname的问题,继续检查listener.ora:

从上面的文件可以看出,该库的使用了动态注册,一般情况下,就算reload了lsnr且不重启instance,一般也会在一分钟左右重新动态注册lsnr,但是在这个案例中,等待3分多钟,检查lsnrctl service,仍然没有注册,尝试重启instance,再次检查,发现还是没有实现动态注册:

检查数据库初始化文件:

发现也正确的配置了这两个参数。

测试将动态注册改成静态注册,问题解决。

看来问题是处在动态注册上了,继续分析。

这个时候,经一个同事指点,因为这台主机的os是从另外一台主机copy过来的,但是2台主机的IP不同,是不是hosts文件还是保持的原来的配置?
检查/etc/hosts:

将hosts文件中的IP地址改为正确的IP地址后,lsnr的动态注册恢复正常:



    结论:要实现侦听的动态注册,不仅仅要配置好初始化文件,配置好listener.ora文件,还需要检查/etc/hosts文件中本机的IP是否配置正确。

相关文章

3条评论

  1. (SID_NAME = PLSExtProc)
    (ORACLE_HOME = /oracle/app/oracle/product/9.2.0)
    (PROGRAM = extproc)
    不太明白这个原理,如果在listener里面使用这样的SID_LIST_LISTENER的话,listener启动以后会自动检测本地是否有数据库服务,并为它提供侦听么???
    为什么不直接为本地数据库配置侦听呢??这样不是省掉了动态这一环节,更加可靠么??

  2. 做活要细致,做好文档管理,经常做记录。 这样可以尽量的避免一些问题的产生,同时在发现问题的时候可以尽快的解决。 只是说说,发现自己在文档记录上也没真正做好。 不断努力中,争取早日加入oracle DBA的行列 ^_^

  3. re 啊古:
    会自动的监测到数据库的服务,pmon会根据数据库初始化文件中的db_name和services_name不断的注册到listener,这就是所谓的动态注册。其实db_name并不是动态注册必要的条件,但它是数据库启动的必要条件,真正需要配置的就是services_name了。如果没有配置services_name,默认的services_name就为db_name.domain。动态注册后,我们用lsnrctl service看到的服务名就是在初始化文件中配置的services_name。
    你说的直接配置侦听,就是静态注册。
    各有各的好处吧,动态的方便,静态的不容易出错。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据