Oracle故障案例 | 19C动态监听无法注册实例的处理
原创
©著作权归作者所有:来自51CTO博客作者jeames007的原创作品,请联系作者获取转载授权,否则将追究法律责任
文章目录
前言
有客户的Oracle 19C数据库反应,数据库重启后,动态监听无法注册实例,本文分析了详细过程
⛳️ 1.故障现象
[oracle@jeames admin]$ lsnrctl start
SQL> select * from v$version;
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
SQL> alter system register;
[oracle@jeames ~]$ lsnrctl status
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 18-SEP-2022 23:05:27
Copyright (c) 1991, 2019, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=jeames)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date 18-SEP-2022 23:03:37
Uptime 0 days 0 hr. 1 min. 49 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/jeames/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=jeames)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
The listener supports no

⛳️ 2.故障排查
✨ 2.1 尝试添加静态监听
[oracle@jeames ~]$ cd $ORACLE_HOME/network/admin
[oracle@jeames admin]$ ls
listener.ora samples shrept.lst sqlnet.ora tnsnames.ora
## 在listener.ora中加入以下内容
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = PROD)
(SID_NAME = PROD)
)
)

[oracle@jeames admin]$ lsnrctl stop
[oracle@jeames admin]$ lsnrctl start

为什么监听可以静态注册实例,不能动态注册实例呢?
✨ 2.1 排查local_listener
SQL> show parameter local_listener
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
local_listener string LISTENER_PROD
## 查看tnsnames.ora中有关LISTENER_PROD信息,host是OK的
[oracle@jeames ~]$ more $ORACLE_HOME/network/admin/tnsnames.ora
LISTENER_PROD =
(ADDRESS = (PROTOCOL = TCP)(HOST = jeames)(PORT = 1521))
故障原因:
动态注册默认只注册到默认的监听器上(名称是LISTENER、端口是1521、协议是TCP),
因为pmon只会动态注册port等于1521的监听,否则pmon不能动态注册listener,
如果需要向非默认监听注册,则需要配置local_listener参数

⛳️ 3.故障处理
由于监控使用默认的1521端口,可以将local_listener重置回之前的默认值,即空值
SQL> alter system set local_listener=‘’;
手动注册
SQL> alter system register;
SQL> !lsnrctl status
我们此时发现;动态监听已经可以注册实例了

⛳️ 4.技能拓展
静态监听VS动态监听
✨ 4.1 静态监听
静态注册就是实例启动时读取listener.ora文件的配置,将实例和服务注册到监听程序。
无论何时启动一个数据库,默认地都有
两条信息注册到监听器中:数据库服务器对应的实例和服务。
实例不必启动,静态监听也能注册
服务器启动静态监听后,可以远程远程启库

✨ 4.2 动态监听
动态注册是在instance启动的时候PMON进程根据参数文件中的instance_name,service_names
两个参数将实例和服务动态注册到listener中
