Oracle 12C新特性-新增监听器注册进程LREG(Listener Registration)
在12C版本之前,PMON进程负责将数据库注册到监听器,比如动态注册监听器,监听器重启或者监听器 在数据库启动之后启动,通常监听器并不能立即监听到数据库,需要过一会由PMON进程将数据库信息注册到监听器,或者通过ALTER SYSTEM REGISTER命令触发PMON进程去注册数据库到监听器,监听器监听到数据库信息后,客户端才可以通过监听器访问数据库。
在12C版本,注册数据库到监听器这个活分配给了一个全新的进程LREG(Listener Registration),这个进程的主要工作就是维护数据库和监听器的关系,如果监听器关闭,这个进程就会轮循检查监听器,当这个进程发现监听器启动了,就把数据库注册到监听器,和之前版本PMON进程维护数据库和监听器的原来是一样的。
[oracle@hm-oradb-01 ~]$ ps -ef | grep lreg | grep -v grep oracle 26216 1 0 Aug30 ? 00:00:50 ora_lreg_orcl
LREG进程就好比PMON进程招的小弟,呃,PMON进程工作压力比较大,任务重,有点忙不过来,招个小弟吧,分担一下压力,否则都快没时间泡妹子了,这怎么能行。
于是LREG进程就产生了,专门为PMON进程分担注册数据库到监听器这个任务,这样PMON进程就没那么忙了,有时间出去遛遛弯了,也有时间约妹子啦,劳逸结合才能更好的完成工作。
这也算是对PMON进程的一种保护,毕竟PMON进程是核心进程,一旦PMON进程挂掉,数据库也会挂掉。有点意外的是,LREG也是核心进程,LREG进程挂掉,数据库也会随之挂掉。
下面是杀掉LREG进程的实验。
[oracle@hm-oradb-01 ~]$ ps -ef | grep lreg | grep -v grep oracle 26216 1 0 Aug30 ? 00:00:50 ora_lreg_orcl [oracle@hm-oradb-01 ~]$ kill -9 26216 [oracle@hm-oradb-01 ~]$ ps -ef | grep lreg | grep -v grep [oracle@hm-oradb-01 ~]$ ps -ef | grep ora_ oracle 21478 21060 0 14:27 pts/0 00:00:00 grep ora_
杀掉LREG进程后,数据库立马挂掉,告警日志会记录相关的信息。
2018-09-14T14:27:31.878002+08:00 Instance Critical Process (pid: 28, ospid: 26216, LREG) died unexpectedly PMON (ospid: 26162): terminating the instance due to error 500 2018-09-14T14:27:33.032767+08:00 System state dump requested by (instance=1, osid=26162 (PMON)), summary=[abnormal instance termination]. System State dumped to trace file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_diag_26182_20180914142733.trc 2018-09-14T14:27:34.267643+08:00 Dumping diagnostic data in directory=[cdmp_20180914142732], requested by (instance=1, osid=26162 (PMON)), summary=[abnormal instance termination]. 2018-09-14T14:27:35.632335+08:00 Instance terminated by PMON, pid = 26162
PMON虽然是核心进程,但是杀掉PMON或者PMON进程意外终止,数据库不会立马就挂掉,其他进程还能坚持一小会的时间,而LREG进程意外身故,数据库立马就挂。这可能是PMON进程对LREG这个小弟的一种保护,小弟都挂了,生活还有什么意义,大家同归于尽吧。
呃,这好像超出了小弟的定义了。