ITPub博客

首页 > 数据库 > Oracle > 【监听】动态注册和静态注册

【监听】动态注册和静态注册

原创 Oracle 作者:lusklusklusk 时间:2015-11-26 10:04:32 0 删除 编辑

不管是动态监听还是静态监听,前提就是lsnrctl start listenername要先运行,区别就是静态监听是监听启动时读取到的监听配置文件中(除默认监听以外)的信息,动态监听就是数据库实例启动时或每隔一分钟PMON注册到默认监听中的信息

  

什么是注册

  注册就是将数据库作为一个服务注册到监听程序。客户端不需要知道数据库名和实例名,只需要知道该数据库对外提供的服务名或SID就可以申请连接到数据库。这个服务名或SID可能与实例名一样,也有可能不一样。

  在数据库服务器启动过程中,数据库服务器会向监听程序注册相应的服务(无论何时启动一个数据库,默认地都有两条信息注册到监听器中:service_names和instance_name即lsnrctl status时显示的ServiceInstance

  相当于是这样:在数据库服务器和客户端之间有一监听程序(Listener),在监听程序中,会记录相应数据库对应的服务名(一个数据库可能对应有多个服务名),当客户端需要连接数据库时,只需要提供服务名,就可以建立客户端和服务器之间的连接。

 

动态注册:

数据库实例启动的时候PMON进程根据spfile.ora中的值将instance_name,service_names两个参数值注册到默认监听中(不管有没有listener.ora文件,默认监听都是存在的)。不管什么时候PMON进程都会每隔一分钟根据spfile.ora中的值将instance_name,service_names两个参数值注册到默认监听中

如果lsnrctl stop后再lsnrctl start,数据库实例启动的时候动态注册的信息会丢失,不过一分钟后恢复正常,因为每隔一分钟,PMON进程会向监听进行动态注册,就正常了

 

动态注册默认只注册到默认的监听器上(hosthostname不是ip、端口是1521、协议是TCP,关于监听器名称则随便不一定非得是LISTENER),如果需要向非默认监听注册,则需要配置local_listener参数,配置该参数值是监听器的名称,比如配置为lsn2,对应端口123456,则动态注册就不会再动态到1521,就注册到123456了

 

动态注册发生的时间:每隔一分钟(时间间隔是1分钟的前提是服务端已经启动)或数据库实例启动的时候

 

所以动态注册,一般先启动监听进程再启动oracle服务,因为oracle服务器启动时会动态注册,如果先启动oracle,再启动监听进程,则隔一分钟再看看

 

 

一个动态注册的案例

lsnrctl status发现没有动态注册

发现默认监听配置的host=服务器名称

查看ifconfig发现ip192.168.189.128

/etc/hosts中服务器名称对应的ip192.168.182.128

至此找到原因,把/etc/hosts182改为189即可

说明:动态注册是把数据库信息当作服务注册到监听中的hostport中,如果host中配置的信息为ip,但是实际服务器上不存在这个ip则无法动态注册,如果host中配置的是服务器名称,而服务器名称不存在或服务器名称在/etc/hosts中对应的ip实际上不存在则无法动态注册

 

 

 

静态注册:

监听程序启动时读取listener.ora文件的配置,将listener.ora文件内容中的实例名(SID_NAME)和服务名(GLOBAL_DBNAME,如果listener.ora没有GLOBAL_DBNAME,则默认GLOBAL_DBNAME=SID_NAME)注册到监听器中(监听器的名字存在listener.ora文件中

静态注册时,listener.ora中的GLOBAL_DBNAME向外提供服务名,listener.ora中的SID_NAME提供注册的实例名。

采取静态注册方法时,listener.ora中的内容如下:

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

      (ADDRESS = (PROTOCOL = TCP)(HOST = i-122F6351)(PORT = 1521))

    )

  )

 

LISTENER2 =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
  )

 

SID_LIST_LISTENER2 =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /opt/oracle/product/11.2.0/db_1)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = orcl)
      (ORACLE_HOME = /opt/oracle/product/11.2.0/db_1)
      (SID_NAME = orcl)
    )
  (SID_DESC =
      (GLOBAL_DBNAME = orcl1)
      (ORACLE_HOME = /opt/oracle/product/11.2.0/db_1)
      (SID_NAME = orcl)
    )
  )

ADR_BASE_LISTENER = D:\oracle\product\10.2.0\db_1

该文件表明数据库实例名为orcl,默认监听为listener,静态监听listener2则向外提供了两个服务:orclorcl1

 

 

静态监听如果有非默认监听器listener以外的其他名称的监听器,则操作方式如下,前提是两个监听中的port和key不能一样,否则也只能启动一个。

lsnrctl start listenername

lsnrctl status listenername

lsnrctl stop listenername

 

 

Lsnrctl statusService的值--对于动态注册和静态注册,Service有不同的取值

对于态注册
优先级别service_names.db_domain=db_unique_name.db_domain>db_name.db_domain
如果有参数值service_names\db_unique_name,
则拼接service_names、db_unique_name参数值和db_domain参数值注册到监听,即两个值
如果只有参数值service_names,且值和db_name值不一样
则拼接service_names、db_name参数值和db_domain参数值注册到监听,即两个值
如果只有参数值db_unique_name,且值和db_name值不一样
则拼接db_unique_name参数值和db_domain参数值注册到监听,即一个值


 

对于态注册:

Service的值是GLOBAL_DBNAME(如果listener.ora文件没有的话,默认使用listener.ora文件的SID_NAME

 

 

 

lsnrctl start时(一般先读本用户下的listener.ora文件,发现没有listener.ora文件就不读这个文件)只启动监听名称为listener、端口为1521tcp协议、hosthostname的监听。

 

没有listener.ora文件时比默认listener.ora文件只是少了一个PROTOCOL = IPC的外部程序调用接口,为了规范配置,我们还是不删除listener.ora文件,让它默认保留ipctcp协议

 

实验过,没有listener.ora文件时lsnrctl start时默认的监听器名称就是LISTENER,内容为如下

Listening Endpoints Summary..

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=i-122F6351)(PORT=1521)))


所以可以说listener.ora文件里面配置的内容主要是静态监听,需要listener.ora文件主要为了添加静态监听global_dbname\sid_nameSID_LIST_LISTENER)和添加额外的监听器名称

如下图说明lsnrctl status和 lsnrctl status listener一样


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30126024/viewspace-1846948/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Welcome to Lukes DB HOME。11G OCM, 8年以上DBA工作经验,博客仅记录自己的一个学习过程,不代表完全准确,如有需要,欢迎转载。

注册时间:2015-02-02

  • 博文量
    371
  • 访问量
    460391