oracle监听服务的动态注册和静态注册
oracle监听服务的使用有两种模式:动态注册和静态注册
动态注册
8i以后版本的数据库实例在mount时,会根据参数文件中的service_names以及instance_name参数动态地将实例和服务动态注册到listerer中
(实际操作中发现,12c版本即使不在参数文件中指定两个参数,动态注册功能依然生效)
执行过程
- 在参数文件中指定service_names、instance_name参数
- 启动监听服务
- 启动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