Oracle学习笔记(六)—Oracle-服务器端监听配置详解

By timebusker on April 20, 2018

Oracle学习笔记(六)—Oracle-服务器端监听配置详解

监听器(listener.ora)

监听器是Oracle基于服务器端的一种网络服务,主要用于监听客户端向数据库服务器端提出的连接请求。既然是基于服务器端的服务, 那么它也只存在于数据库服务器端,进行监听器的设置也是在数据库服务器端完成的。

本地服务名(tnsnames.ora)

Oracle客户端与服务器端的连接是通过客户端发出连接请求,由服务器端监听器对客户端连接请求进行合法检查,如果连接请求有效,则进行连接,否则拒绝该连接。
本地服务名是Oracle客户端网络配置的一种,另外还有Oracle名字服务器(Oracle Names Server)等。Oracle常用的客户端配置就是采用的本地服务名。

监听器理论基础

Oracle监听器运行于数据库服务器端一个进程,用于监听所有来自客户端的连接请求,并提供处理数据库服务方面的请求。 这个进程负责监听用户的连接请求,每当收到一个用户请求,监听器进程就会创建一个影子进程,然后把用户请求转交给这个影子进程, 由影子进程继续完成用户提交的各种命令。一旦监听进程把用户转交给影子进程,监听进程的任务就算完成了,会继续去监听下一个用户请求, 监听器配置文件listener.ora

Oracle能够支持2中连接方式,分别是专有模式和共享模式,二者的区别在于,专有模式为每个用户连接启动一个单独的影子进程, 相当于为每个用户提供一个单独的到服务器的会话通道,其特点是响应客户端请求速度快,但PGA占用较多; 共享模式是由多个用户连接共享一个进程,多个用户共享一个会话通道。

监听器的主要功能
  • 监听客户端请求,监听器运行在数据库服务器之上,与Oracle实例(可为多个)相关关联,是一个专门的进程process。 在Windows的服务项目或者Linux的运行进程列表中,都会看到对应的运行进程,Windows上名为tnslsnr,Linux/Unix平台上是lsnrctl, 监听器守候在服务器制定端口(默认为:1521),监听客户端的请求。

  • 为客户端请求分配Server Process,监听器只负责接收请求,之后将请求转接给Oracle Server Process,在Oracle的服务模式下, 客户端进程是不允许直接操作数据库实例和数据,而是通过一个服务进程Server Process(也称为影子进程)作为代理。监听器接受到请求之后, 就向操作系统(或者Dispatcher组件)要求fork(或分配)一个Server Process与客户端相连。

  • 注册实例服务,本质上讲,listener是建立实例和客户端进程之间联系的桥梁。Listener与实例之间的联系,就是通过注册的过程来实现的, 注册的过程就是实例告诉监听器,它的数据库数据库实例名称instance_name和服务名service_names。监听器注册上这样的信息, 对客户端请求根据监听注册信息,找到正确的服务实例名称,目前Oracle版本中,提供动态注册和静态注册两种方式。
    • 动态注册监听
    • 静态注册监听
  • 错误转移failover,Failover是RAC容错的一个重要方面功能,其功能是在数据库实例崩溃的时候,可以自动将请求转移到其他可用实例上的一种功能。 可以提供很大程度上的可用性(Availability)功能,这个过程中,发现实例已经崩溃,并且将请求转移到其他实例上,就属于是listener的功能。

负载均衡衡量,在RAC架构中,Oracle实现了负载均衡。当一个客户请求到来时,Oracle会根据当前RAC集群环境中所有实例的负载情况,避开负载较高的实例, 将请求转移到负载较低的实例进行处理。在早期RAC版本中,负载轻重的衡量是根据监听器当前维护连接数目来确定的,而不是实时查看多实例的负载, RAC环境中的监听器之间进行沟通通信。

参考资料