最近碰到一个ORACLE 18c上面的PDB的监听问题,折腾了好久没成功,找了专业DBA协作才搞定。故整理和记录下。
1. 监听参数
ORACLE跟监听相关的几个参数:
SQL> show parameter listen;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
forward_listener string
listener_networks string
local_listener string LISTENER_ORADB
remote_listener string
几个参数的含义:
LOCAL_LISTENER 本地侦听器
REMOTE_LISTENER 用于远程侦听器,如果有的话
FORWARD_LISTENER 为转发侦听器
listener_networks 当rac加入额外的监听时,一般会设置此参数。
这里只涉及local_listener的讨论,其它参数不讨论。
local_listener 默认值为空,这种情况下会动态注册监听,也是推荐的方式。当oracle的本地监听为非默认情况时,会用到local_listener参数。
2. 遇到的问题 及解决办法
此次的问题就在于这个参数设置了值。从上面看到,local_listener的值为 LISTENER_ORADB,这个监听名称必须在tnsname.ora文件里进行配置,如下:
LISTENER_ORADB =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.162.168)(PORT = 1521))
当不存在这个配置项的时候就会报错(此次就是不知道为何这个配置项被删了,重启数据库后监听就一直注册不了导致无法访问)。报错内容如下:
ERROR:
ORA-12514: TNS:listener does not currently know of service requested in connect
解决办法就是加上这个配置或者修改LOCAL_LISTENER参数的值,修改方法如下:
alter system set local_listener='';
alter system register;
...