Oracle数据库网络体系结构概述

Oracle数据库网络体系结构概述

本文包含如下九个知识点

复制代码
1、Oracle 网络服务概述
2、Oracle 网络服务是如何工作的
3、Oracle 网络监听器
4、服务名
5、服务注册
6、专用服务器体系结构
7、共享服务器体系结构
8、程序接口概述
9、数据库驻留连接池

Oracle 网络服务概述

Oracle 网络服务是一套网络组件,在分布式的异构计算环境中,提供企业范围的连接解决方案。Oracle 网络服务使你能够从一个应用程序会话通过网络连接到一个数据库实例,或从一个数据库实例连接到另一个数据库实例。

Oracle 网络服务提供位置透明性、 集中式的配置和管理、和快速安装和配置。还允许最大化系统资源利用率并提高性能。Oracle 数据库共享服务器体系结构增加了应用程序的可扩展性,和可以同时连接到数据库的客户端数量。虚拟接口 (VI) 协议让消息传递的大部分负担由高速网络硬件来承担,减轻了 CPU 负载。

Oracle 网络服务使用支持广泛范围的网络的通信协议或应用编程接口(API),以提供分布式数据库和分布式处理。建立网络会话后,Oracle 网络服务将作为客户端应用程序和数据库之间的数据传递者,建立和维持一个连接,并为其交换消息。Oracle 网络服务之所以可以执行这些任务,是因为它存在于网络中的每台计算机上。

Oracle 网络服务是如何工作的

Oracle 数据库协议从 Oracle 应用程序接口接受 SQL 语句,并将其打包,以便通过一个受行业标准支持的更高级别协议或 API 传输到 Oracle 数据库。从 Oracle 数据库返回的结果会使用同样高度级别的通信机制打包。这个工作的发生独立于网络操作系统。

取决于运行 Oracle 数据库的操作系统,数据库服务器的 Oracle 网络服务软件可能包含相应的驱动程序软件,并会启动一个额外的后台进程。

Oracle 网络监听器

Oracle 网络监听器,也称为监听器,是一个服务器端进程,用于侦听传入的客户端连接请求,并管理到数据库的通信量。数据库实例启动时,及其存活期间的某些时候,实例会联系一个监听器,并建立一个到此实例的通信路径。

服务注册使监听器可以确定一个数据库服务及其服务处理程序是否是可用的。

服务处理程序是一个专用服务器进程,或作为到数据库的一个连接点的调度器。

在注册期间, LREG进程(12c版本之前通过LREG进程(12c版本之前通过PMON 进程来完成这个任务)进程来完成这个任务)为监听器提供实例名称、 数据库服务名称、和服务处理程序的类型和地址。这些信息使监听器能够在客户端请求到达时启动一个服务处理程序。

两个必须理解的知识点:

1、监听器可以和数据库服务器在同一台主机,也不可以不在同一个主机;

2、同时一个数据库可以将信息(实例名称、 数据库服务名称、和服务处理程序)注册信息到多个不同的监听器中。

客户端通过一个监听器建立连接的基本步骤如下:

1、客户端进程或另一个数据库请求一个连接。

2、监听器选择一个适当的服务处理程序,来为客户端请求提供服务,并将请求转发到处理程序。(根据专用服务器模式还是共享服务器模式来决定,如果专用则监听器派生一个专用进程来一对一与客户端进程服务;如果共享服务器,则直接转发给PNNN调度器进程)

3、客户端进程直接连接到服务处理程序。

注意:后续客户端和数据库的请求和相应,与监听器再无关系了,此时关闭监听器,也不会影响已经建立的客户端和数据库连接。

服务名

在网络服务的环境中,服务是一组一个或多个数据库实例。

服务名称是用于客户端连接的服务的逻辑表示形式。

当客户端连接到一个监听器时,它请求连接到某个服务。当一个数据库实例启动时,它提供一个或多个服务名称,以将自己注册到某个监听器。因此,监听器充当客户端和实例之间的中间人,并将连接请求路由到正确的位置。

通过监听器识别到的一个单一的服务,可以标识一个或多个数据库实例。

单个数据库实例也可以向一个监听器注册为一个或多个服务。

连接到服务的客户端不需要指明它们需要哪个实例。

例如:一个单实例数据库与两个服务( book.example.com 和soft.example.com)相关联。根据服务名称可以使同一数据库被不同的客户端以不同的方式来标识。数据库管理员可以限制或预留系统资源,以便为请求这些服务的客户机提供更好的资源分配。

服务注册

LREG进程(12c版本之前通过PMON 进程来完成这个任务)进程通过服务注册功能,动态地将实例信息注册到监听器,以使监听器能将客户端的连接请求转发到适当的服务处理程序。LREG进程为监听器提供了以下信息:

1、与服务相关联的数据库实例名称,及其当前负载和最大负载

2、对实例可用的服务处理程序 (调度器和专用服务器),包括其类型、 协议地址,当前负载和最大负载

服务注册是动态的,并且不需要在 listener.ora 文件中配置。动态注册减少了管理多个数据库或实例的开销。

初始化参数 SERVICE_NAMES 列出实例所属的服务。在启动时,每个实例及其属于相同服务的其他实例,被注册到所有监听器。在数据库操作期间,每个服务的实例将 CPU 使用和当前的连接计数等有关信息,传递给监听相同服务的所有监听器。这种通信实现了动态负载平衡和连接的故障转移。

两种服务模式

Oracle对于客户端的连接请求,有两种服务模式,即专用服务器和共享服务器两种,下面一一介绍这两种模式:

备注:

1、需要注意的是,一般生产环境都是配置专用服务器模式 。共享服务器模式一般只需要了解即可。

2、数据库可以同时支持共享服务器连接和专用服务器连接。例如,一个客户端可以使用专用服务器连接,而另一个不同的客户端使用共享服务器连接到同一数据库。

专用服务器体系结构

专用服务器体系结构在专用服务器体系结构中,为每个客户端进程创建的服务器进程称为专用服务器进程 (或影子进程)。此服务器进程与客户端进程是相互分离的,只是为其服务,专用1:1(类似VIP一对一服务)。

客户端进程与服务器进程之间存在一对一的比例关系。即使当用户并未正在向数据库发起请求,专用服务器进程仍然是存在的------尽管它处于非活动状态,并在某些操作系统上可能会被换出到磁盘。

在专用服务器体系结构中,用户进程和服务器进程使用不同的机制进行通信:

如果客户端进程和专用服务器进程在同一台计算机上运行,则程序接口使用主机操作系统的进程间通信机制来执行其工作。

如果客户端进程和专用服务器进程在不同的计算机上运行,则由程序接口提供程序之间的通信机制(例如,网络软件和 Oracle 网络服务)。

共享服务器体系结构

在共享服务器体系结构中,调度器将传入网络的多个会话请求定向到一个共享服务器进程池,消除了为每个连接分配一个专用服务器进程的需要。池中的一个空闲的共享服务器进程从公共请求队列取出一个请求并处理。

共享服务器的潜在好处:

1、减少了操作系统上的进程数,相比许多的专用服务器,只需少量的共享服务器就可以执行同样多的处理量。

2、减少了实例 PGA 内存,每个专用服务器或共享服务器都有一个 PGA。更少的服务器进程意味着更少的 PGA 和更少的进程管理。

3、增加了应用程序的可扩展性,和可同时连接到数据库的客户端数量

4、当客户端频繁地连接和断开连接时,共享服务器的速度可能比专用服务器更快

共享服务器有几个缺点,包括在某些情况下响应速度较慢、功能支持不完整、增加了安装和调整的复杂程度。作为一个一般的指导原则,只有当并发连接到数据库的数量超过操作系统的处理能力时,才考虑使用共享服务器模式。

在共享服务器体系结构中需要以下进程:

1、将客户端进程连接到调度器进程或专用服务器进程的网络监听器(监听器是 Oracle 网络服务的一部分,而不是 Oracle 数据库的一部分),另外还有一点,要使用共享服务器,客户端进程必须通过 Oracle 网络服务来连接,即使该进程与 Oracle 数据库实例在同一台计算机上运行。

2、一个或多个调度器进程 (Dnnn)

3、一个或多个共享服务器进程

调度器请求和响应队列

用户的请求是一个 API 调用,它是用户的 SQL 语句的一部分。当用户发出一个调用时,会发生以下操作:

1、调度器将请求放入请求队列,下一个可用的共享服务器进程会从请求队列取出该请求。请求队列位于 SGA 中,能被实例的所有调度器进程访问

2、共享服务器进程检查公共请求队列,按先进先出的原则取出一个新请求。

3、一个共享服务器进程从队列中取出一个请求,并对数据库发出所有必要的调用以完成该请求。一个不同的服务器进程可能会处理数据库中的每个调用。因此,解析查询、 读取第一行、 读取下一行、和关闭结果集等每个请求都可能会由不同的共享服务器来处理。

4、当服务器进程完成了请求时,它将响应结果置于调度器的响应队列。每个调度器都有它自己的响应队列。

5、调度器将已完成的请求结果返回给适当客户端进程。

例如,一个订单录入系统,每个工作人员的客户端进程连接到一个调度器。工作人员所发出的每个请求被发送到该调度器,调度器则将此请求放入队列中。下一个可用的共享服务器取出该请求并为其服务,并将响应结果置于响应队列。当请求完成时,工作人员还与调度器保持着连接状态,但处理请求的共享服务器已经被释放并去为其他请求服务了。当工作人员与客户交谈时,另一个工作人员也可以使用同一共享服务器进程。

调度器进程(Dnnn)

调度器进程使得客户端进程可以共享数量有限的服务器进程。可以为单个数据库实例创建多个调度器进程。调度器进程的最佳个数取决于操作系统的限制和每个进程的连接数。

每个连接到调度器的客户端进程必须使用 Oracle 网络服务,即使这两个进程运行在同一主机上。

调度器进程建立通信的过程如下所示

1、当实例启动时,网络监听器进程被打开,并建立一条通过用户连接到 Oracle 数据库的通信路径。

2、每一个调度器进程将其监听连接请求的地址提供给监听器进程。必须至少为每个数据库客户端将使用的网络协议配置并启动一个调度器进程。

3、当客户端进程发出连接请求时,监听器将确定客户端进程是否应使用共享服务器进程:
1)如果监听器确定需要使用一个共享服务器进程,则监听器返回负载最轻的调度器进程的地址,客户端进程则直接连接到该调度器。
2)如果客户端进程不能与调度器进行通信,或者客户端进程请求的是一个专用服务器,则监听器将创建专用服务器,并建立一个适当的连接。

共享服务器进程 (Snnn)

在共享服务器配置中,每个共享服务器进程为多个客户端请求服务。除了共享服务器进程不与特定客户端进程相关联之外,共享服务器进程和专用服务器进程提供相同的功能。实际上,共享服务器配置中的共享服务器进程可以为任何客户端请求服务。

共享服务器进程的 PGA 不包含 UGA 数据,UGA 数据必须对所有共享服务器进程可访问 。共享服务器 PGA 仅包含特定于进程的数据。

所有与会话相关的信息存储在 SGA 中。每个共享服务器进程必须能够访问所有会话的数据空间,以便任何服务器都可以处理来自任何会话的请求。每个会话的数据空间是在 SGA 中分配的。

当连接到一个调度器进程时,无法执行某些管理性活动,包括关闭或启动实例和执行介质恢复等。这些活动通常需要在具有管理员权限的连接时执行。若要在使用共享服务器配置的系统中以管理员权限来连接,则必须使用专用服务器进程。

程序接口概述

程序接口是一个数据库应用程序和 Oracle 数据库之间的软件层。程序接口执行以下功能:

1、提供一个安全屏障,以防止客户端进程对 SGA 的破坏性访问

2、作为一种通信机制,格式化请求的信息、传递数据、和捕获并返回错误

3、在不同类型的计算机之间转换数据,或将其翻译为外部用户程序数据类型

Oracle 代码作为一个服务器程序,为应用程序 (客户)执行数据库任务,如从数据块读取行。程序接口由 Oracle 数据库软件和特定于操作系统的软件等几个部分组成。

程序接口结构

程序接口由以下几部分组成:

1、Oracle 调用接口 (OCI) 或 Oracle 运行时库 (SQLLIB)

2、程序接口的客户端或用户端

3、各种 Oracle 网络服务驱动程序 (特定协议通信软件)

4、程序接口的服务器端或 Oracle 数据库端(也称为 OPI)
注意:用户端和Oracle 数据库端的程序接口,都运行 Oracle 软件的驱动程序。

程序接口驱动程序

驱动程序通常是跨越网络传输数据的软件。他们执行如连接、断开连接、发出错误信号、并测试错误等操作。驱动程序是特定于通信协议的。

一般都有默认的驱动程序。可以安装多个驱动程序,如异步驱动程序或DECnet 驱动程序,并选择一个作为默认的驱动程序,但允许用户通过在连接时指定一个驱动程序来使用其他驱动程序。

不同的进程可以使用不同的驱动程序。一个进程可以使用不同的 Oracle 网络服务驱动程序,并发地连接到一个或多个数据库。

操作系统的通信软件

程序接口中将用户端连接到 Oracle 数据库端的最底层软件,是由主机操作系统提供的通信软件。例如 DECnet、 TCP/IP、 LU6.2、ASYNC 等。通讯软件可能由 Oracle 提供,但通常是从硬件供应商或第三方软件供应商单独购买的。

数据库驻留连接池

数据库驻留连接池 (DRCP) 为典型的 Web 应用程序场景提供专用服务器的连接池。Web 应用程序通常发起一个数据库连接、 短暂地使用该连接、然后将其释放。通过 DRCP,数据库可以扩展到能够同时接受数以万计的连接。

DRCP 提供了以下优点:

1、提供一个中间层连接池,以在中间层进程的线程之间共享连接。

2、使得数据库连接能在多个中间层进程之间共享。这些中间层进程可能在相同或不同的中间层主机上。

3、显著减少为支持众多客户端连接所需的关键数据库资源。例如,DRCP 可减少数据库的内存需求,并大大提高数据库和中间层的可扩展性。可用的服务器池还可以减少重新创建客户端连接的成本。

4、为多进程、 单线程的应用程序服务器体系结构提供连接池,如不能做中间层连接池的 PHP 和 Apache 等。

DRCP 使用池化服务器,这相当于一个专用服务器进程 (而不是共享服务器进程) 和数据库会话的联合体。池化服务器模型避免了为每个连接分配一个专用服务器但只需短时间使用该服务器的开销。

客户端从数据库驻留连接池获取连接,连接到一个称为连接代理的 Oracle 后台进程。该连接代理实现了池功能,并在来自客户端进程的多个入站连接之间多路复用池化服务器。

客户端要求数据库访问时,连接代理将从池中取出一个服务器进程,并交给客户端。客户端直接连接到服务器进程,直到请求的服务被完成。服务器完成后,服务器进程将被释放到池中。与客户端的连接将被归还给代理。

本文参考官方文档:https://docs.oracle.com/cd/E28271_01/server.1111/e25789/toc.htm

相关推荐
满天星83035772 小时前
【MySQL】表的基本查询(上)
linux·服务器·数据库·mysql
主角1 72 小时前
MySQL高可用集群
数据库·mysql
dajun1811234562 小时前
信息系统运维管理全流程详解 在线画图工具绘制运维流程图表技巧
运维·数据库·信息可视化·流程图·旅游·论文笔记
流觞 无依2 小时前
SQLite数据库损坏修复指南——解决“database disk image is malformed”报错
jvm·数据库·sqlite
道清茗2 小时前
【MySQL知识点问答题】 安全与性能管理
数据库·mysql
2501_920627612 小时前
Flutter 框架跨平台鸿蒙开发 - 数据库学习助手
数据库·学习·flutter·华为·harmonyos
ZStack开发者社区2 小时前
阿里云 × ZStack:云端管得好,边端交付稳
数据库·边缘计算
TDengine (老段)2 小时前
TDengine IDMP 可视化 —— 趋势图
大数据·数据库·人工智能·物联网·时序数据库·tdengine·涛思数据
万邦科技Lafite2 小时前
淘宝关键词API接口获取分类商品信息指南
java·前端·数据库·开放api·淘宝开放平台