oracle的静态注册和动态注册
静态注册:
静态注册 : 指将实例的相关信息手动告知 listener 侦 听 器 , 可以使用netmgr,netca,oem 以及直接 vi listener.ora 文件来实现静态注册,在动态注册不稳定时使用,特点是:稳定,注册过程比动态过程慢静态注册时,listener.ora 中的 GLOBAL_DBNAME 向外提供服务名,listener.ora 中的 SID_NAME 提供注册的实例名。
采取静态注册方法时,listener.ora 中的内容如下:
# listener.ora Network Configuration File: /oracle/app/oracle/product/19c/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(GLOBAL_DBNAME = fgzcdb)(ORACLE_HOME = /oracle/app/oracle/product/19c/db_1)(SID_NAME = fgzcdb)))
LISTENER =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = hfzcdb91)(PORT = 1521)))
动态注册: (数据库默认是动态注册)
[oracle@hfzcdb91:/home/oracle]$lsnrctl status #status READY
实例在启动时使用 PMON 进程自动将 instance_name 和 service_names 等信息注册到已启动的缺省侦听器 listener.ora,
在 9i 之后,不需要任何配置即可实现动态注册.实例启动后会自动在本地主机默认的号端口上查找侦听器,并在查找到时进行注册 。
[oracle@hfzcdb91:/oracle/app/oracle/product/19c/db_1/network/admin]$vi listener.ora
# listener.ora Network Configuration File: /oracle/app/oracle/product/19c/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = hfzcdb91)(PORT = 1521))(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)))
默认安装时,会安装一个PL/SQL外部程序(ExtProc)条目在listener.ora中, 是oracle为调用外部程序默认配置的监听,它的名字通常是ExtProc或PLSExtProc,但一般不会使用它。可以直接从listener.ora中将这项移除,因为对ExtProc已经有多种攻击手段了,在不使用外部程序时,oracle也是建议删除的。
既然有动态监听为什么还要静态监听呢?原因如下:
1.监听器不是最早启动,oracle 实例先启动
2.监听器重启 【动态监听注册有一定时间】
3.oracle 实例没有 open
扩展:
在 oracle12c 以前的版本中服务注册一直都是由 PMON 进程负责 , 从 12c 起 oracle 引入了 LREG (listener registration) 后台进程接管了这部分工作从而减轻 PMON 的工作
动态监听与静态监听
动态监听:LREG((listener registration)后台进程会自动将实例注册到监听上。关键字ready静态监听:手工编写或者使用netmgr程序设置监听。他会一直监听需要注册的实例。
静态监听:关键字unknown如果你使用动态监听的时候发现始终无法注册实例,可以使用下面的方法:
SQL>alter system set local listener='' scope=both;
System altered.
SQL>alter system register;
System altered.