oracle监听服务的动态注册和静态注册

oracle监听服务的使用有两种模式:动态注册和静态注册

动态注册

8i以后版本的数据库实例在mount时,会根据参数文件中的service_names以及instance_name参数动态地将实例和服务动态注册到listerer中
(实际操作中发现,12c版本即使不在参数文件中指定两个参数,动态注册功能依然生效)

执行过程

  1. 在参数文件中指定service_names、instance_name参数
  2. 启动监听服务
  3. 启动oracle实例

说明

  • 动态注册只会在PMON进程启动时才会自动将服务注册到监听器(一般在启动一分钟内完成注册),因此,需要先启动监听服务,再启动oracle实例;如果没有启动监听服务而是直接启动实例,因为监听服务并未处于运行中,所以则PMON的动态注册会失败,此时再启动监听后,PMON并不会再次执行自动注册,而是需要人工执行手动注册alter system register;
  • 数据库正常使用过程中,重启监听服务后,动态注册结果会失效,需要再次人工执行手动注册alter system register;
    实际操作中发现,12c版本中直接启动实例、重启监听后PMON会在大约20秒后自动动态注册,不需要手动注册
  • 动态注册默认只注册到默认的监听器(名称LISTENER,端口1521,协议TCP)
  • 动态注册由数据库发起,这时候监听肯定对应数据库,所以监听状态为READY

静态注册

oracle实例在启动时会读取文件$ORACLE_HOME/network/admin/listener.ora的配置,将实例和服务注册到监听程序

参考代码

SID_LIST_LISTENER=
    (SID_LIST =
        (SID_DESC =
            (GLOBAL_DBNAME=orcl01)
            (ORACLE_HOME=/oracle/app/oracle/product/12.1.0.2/db_1)
            (SID_NAME=orcl01)
        )
    )
LISTENER=
   (description_list=
      (description=
         (address=(protocol=tcp)(host=192.168.1.120)(port=1521))

       )
    )

其中,GLOBAL_DBNAME、ORACLE_HOME、SID_NAME、host四个参数的值需要根据实际情况设定

说明

  • 静态注册与实例是否启动无关,启动监听服务时会读取listener.ora文件进行静态注册,此时即便数据库未启动,监听状态中依然能看到静态注册的信息
  • 重启监听服务后,静态注册依然生效
  • 静态注册可以更改一些自定义配置信息,例如自定义端口号
  • 静态注册由监听程序发起,监听器并不知道关于该实例的任何信息,只有当客户发出连接请求时,它才检查该实例是否存在,所以监听状态为UNKNOWN

参考资料:
https://developer.aliyun.com/article/415296
https://www.cnblogs.com/guilingyang/p/6074867.html

posted on 2022-04-18 14:28  越野兔  阅读(2065)  评论(0编辑  收藏  举报

导航