假设我们需要将多个oracle实例部署在同一套RAC集群/相同物理机上时,默认部署情况下,多个oracle实例共享使用默认的1521监听器。
监听器共享的使用方式会有几方面的问题:
一般来说,在单机实例上,可以通过修改$ORACLE_HOME/network/admin/listener.ora和lsnrctl命令创建监听:
在listener.ora中添加:
LISTENER_TEST =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = x.x.x.x)(PORT = 1524)(IP = FIRST))))
)
SID_LIST_LISTENER_TEST =
(SID_LIST =
(SID_DESC = (ORACLE_HOME = /u01/app/oracle/product)(SID_NAME = TEST)))
lsnrctl start LISTENER_TEST
lsnrctl status LISTENER_TEST
在RAC环境上,为实例添加独立的监听器的操作也是比较简单的:
DB用户:oracle
监听端口:1524
DB:test122
监听器名称:test122
su - oracle
srvctl add listener -listener test122 -oraclehome /u01/app/oracle/product -endpoints 1524
srvctl start listener -listener test122
通过这种方式启动后监听器的默认使用$ORACLE_HOME/network/admin目录下的listener.ora、tnsnames.ora、sqlnet.ora等配置文件;
如果我们需要多个版本相同的监听器,则这些配置文件在多个监听器之间是共享的。当需要为某个实例单独配置参数的时候,这种情况下就无法进行定制化修改。
我们可以以在启动监听器、database的时候通过设置监听器进程的环境变量TNS_ADMIN环境变量来修改默认listener.ora的路径,来为每个实例指定一个单独的监听器配置目录;
但是这里需要了解几种常见场景下oracle/listner的权限/环境变量引入方式:
数据库的环境变量和监听器环境变量的关系:
综合以上几种不同场景,解决办法:
调试相关:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。