oracle中多实例配置多监听器的问题

时间:2021-10-04 08:39:20

问题描述:

      在windows7旗舰版上装了Oracle10G的服务端,现在通过DBCA创建了一个启动实例orcl,另外两个业务实例instan1,instan2,数据库名和实例名相同,创建相应用户。通过netca或者netmanager给两个业务实例instan1,instan2分别创建两个监听器listen1,listen2,并且使用非1521端口。然后启动数据库服务,监听器服务等(启动之前已经set ORACLE_SID=xxxx)。
                 使用lsnrctl 查看相应监听器的状态:lsnrctl status listen1/listen2 (实际操作中分开执行),在状态“命令被成功执行”的上一行均发现了有一句:“监听XXXXXXX服务”
                 sqlplus登录数据库,除了启动启动实例orcl能够成功登录,其他均提示失败;
                使用plsql工具链接业务实例时,也提示错误:监听程序当前无法识别连接描述符中请求的服务。
查看网上很多论坛和oracle官方指导书,大致的意思是:oracle程序启动时默认是向(pmon是linux和unix下的??)相关服务注册1521默认端口。如果使用非1521端口,需要修改 system面的local_listener配置节。


解决方法:

具体尝试如下,且最后本人尝试结果成功。过程不定适用所有情况,仅供参考。
1 首先修改listener.ora文件加入配置的监听器listener_ex(建议使用netca或者netmanager添加)这个监听器是用来正常监听的,缺少的话也会出错;

2 然后修改tnsname.ora加入local_listener需要的监听器,如 LISTENER_MY=xxxxx(xxxx)(配置参考sample里面的样例也可以)。(在oracle的官方文档中有提到local_listener对应的监听器配置要在tnsname.ora里面指定)

######################
至于为什么要在tnsnames.ora文件里和listener.ora里同时添加监听器(名字是否可以相同待考证),本人也没搞清楚,建议查看官方文档。
######################

3 接下来要能想办法在sqlplus中以sysdba用户登录相应实例,例如instan1
    1) 查看参数列表: show parameter list
          在列出的字段中会看到local_listener段的值为空。
    2)  修改local_listener的值:
    alter system set local_listener=LISTENER_MY.
注意:对于每个想要单独配置监听器的实例,以上三步都要做。
最后重启oracleservice(sid)服务,dbconsole服务,和监听器服务。链接正常。

 


补充说明

1521端口监听的实例一般都能正确连接上,可以通过以上步骤,从同一个监听程序,链接到其他实例,方法是:把其他地址和端口配置到启动启动实例的local_listner对应的监听中,但是其他端口的监听器在listener.ora中还是要正常配置,而且,链接的时候必须启动。这样可以通过启动实例的监听器,通过指定实例,以sysdba身份登录相应实例。

相关文章