当前位置: 代码迷 >> 综合 >> Oracle 19c Concepts(16):Application and Oracle Net Services Architecture
  详细解决方案

Oracle 19c Concepts(16):Application and Oracle Net Services Architecture

热度:59   发布时间:2024-01-06 06:12:11.0

Oracle 应用程序体系结构概述

在本章中, 应用程序体系结构指的是连接到 Oracle 数据库的某个数据库应用程序的计算环境。

客户端/服务器体系结构概述

在 Oracle 数据库环境中,数据库应用程序和数据库被划分为客户端/服务器体系结构。

组成部分如下:

  • 客户端运行数据库应用程序,例如 SQL*Plus 或 Visual Basic 数据输入程序,它访问数据库中的信息,并与某个用户进行交互。

  • 服务器运行 Oracle 数据库软件,并处理对 Oracle 数据库进行并发、共享的数据访问所需的功能。

虽然客户端应用程序和数据库可以在同一台计算机上运行,但当客户端部分和服务器部分在通过网络连接的不同计算机上运行时,往往会取得更高的效能。以下各节讨论了各种 Oracle 数据库客户端/服务器体系结构的变体。

分布式处理

使用多个主机来处理单个任务被称为分布式处理。

前端处理和后端处理发生在不同的计算机上。在图 16-1 中,客户端和服务器位于通过 Oracle 网络服务连接的不同主机上。

图 16-1 客户端/服务器体系结构和分布式处理


Description of "Figure 16-1 Client/Server Architecture and Distributed Processing"

图 16-2 描述了分布式数据库的一种变体。在本示例中,在一个主机上的数据库,访问位于另一台主机上的一个不同数据库中的数据。

图 16-2 客户端/服务器体系结构和分布式数据库


Description of "Figure 16-2 Client/Server Architecture and Distributed Database"
客户端/服务器体系结构的优点

分布式处理环境中的 Oracle 数据库客户端/服务器体系结构,提供了一些好处。

好处包括:

  • 客户端应用程序不负责执行数据处理。他们从用户请求输入、从服务器请求数据、然后使用客户端工作站或终端(例如,使用图形或电子表格)的显示功能,分析并显示这些数据。

  • 客户端应用程序不依赖于数据的物理位置。即使数据被移动或分发到其他数据库服务器, 应用程序不用修改或只需很少修改,就可以继续正常工作。

  • Oracle 数据库利用其底层操作系统的多任务和共享内存设施。其结果是,它为客户端应用程序提供了尽可能高的并发性、数据完整性和性能。

  • 客户端工作站或终端可以对数据显示进行优化(例如,通过提供图形和鼠标支持),而服务器可以对数据处理和存储进行优化(例如,通过拥有大量内存和磁盘空间)。

  • 在网络化的环境中, 您可以使用廉价的客户端工作站来有效地访问服务器上的远程数据。

  • 随着您的系统规模增大,数据库可以扩展。您可以添加多个服务器,以便能够通过网络分散数据库处理负载(水平扩展),或将数据库移到小型机或大型机,以利用更大型系统的性能(垂直扩展)。在任何一种情况下,对数据和应用程序的维护基本不需要进行修改或只需要很少的修改,因为 Oracle 数据库在多个系统之间是可移植的。

  • 在网络化的环境中,共享数据存储在服务器上,而不是在所有计算机上,这使管理并发访问变得更容易、更高效。

  • 在网络化的环境中,客户端应用程序使用 SQL 语句向服务器提交数据库请求。服务器收到请求后,会处理每个 SQL 语句并将结果返回给客户端。由于只有请求及其结果在网络上传输,网络通信量被最小化了。

另见:

《Oracle Database Administrator’s Guide》了解分布式数据库的更多信息

多层体系结构概述

在传统的多层体系结构环境中,应用程序服务器为客户端提供数据,并作为客户端和数据库服务器之间的接口。

这种体系结构使用应用程序服务器来:

  • 验证客户端(比如 Web 浏览器) 凭据

  • 连接到数据库服务器

  • 执行请求的操作

图 16-3 显示了一个多层体系结构的示例。

图 16-3 多层体系结构环境


Description of "Figure 16-3 A Multitier Architecture Environment"
客户端

客户端向数据库服务器发起一个请求,以在其上执行某个操作。

客户端可能是一个 Web 浏览器或其他终端用户程序。在一个多层体系结构中,客户端通过一个或多个应用程序服务器连接到数据库服务器。

应用程序服务器

应用程序服务器为客户端提供了对数据的访问。它作为客户端和一个或多个数据库服务器之间的接口,并承载应用程序。

应用程序服务器允许多个瘦客户端访问,它们只具有最少的软件配置, 可以访问应用程序而无需在客户端计算机上进行持续维护。应用程序服务器也可以为客户端执行一些数据格式化, 以减少客户端工作站上的负荷。

当应用服务器为客户机在数据库服务器上执行操作时,应用程序服务器将假定以客户端的身份来执行。应用程序服务器的权限应该有所限制,以防止在客户端操作期间执行不需要和不必要的操作。

数据库服务器

数据库服务器为代表客户端的应用程序服务器提供其请求的数据。数据库执行所有的查询处理。

数据库服务器可以审计代表客户端的应用程序服务器所执行的操作, 和代表其自身的应用程序服务器所执行的操作。 例如, 客户端可能会请求信息并在客户端上显示,而应用程序服务器可能会请求连接到数据库服务器。

在统一审计中,数据库可以将应用程序上下文(应用程序特定的名称-值)附加到统一审计跟踪中的记录。您可以配置数据库将哪些应用程序上下文写入数据库审计记录。

另见:

  • "Data Access Monitoring"

  • "Database Auditing"

面向服务的体系结构 (SOA)

在传统的多层环境或面向服务的体系结构 (SOA) 环境中,数据库可以作为 Web 服务提供者来工作。 

SOA 是一个依赖于服务的多层体系结构,以支持在网络上计算机到计算机的交互。在SOA上下文中,服务是一个自给自足的功能端点,具有定义良好的功能和服务级别协议,可以监视和管理,并可以帮助强制执行策略服从。

SOA 服务通常是作为可通过 HTTP 协议访问的 Web 服务来实现的。他们基于 XML 标准,如 WSDL 和 SOAP 等。

Oracle 数据库的 Web 服务能力是作为 XML DB 的一部分来实现的,这必须专门由 DBA 来启用。然后应用程序就可以通过数据库的 Web 服务来完成以下工作:

  • 提交 SQL 或 XQuery 查询,并按 XML 接收其结果

  • 调用独立 PL/SQL 函数,并接收其结果

  • 调用 PL/SQL 包函数,并接收其结果

数据库的 Web 服务提供了一个简单的方法,以将 Web 服务添加到一个应用程序环境,而不需要应用程序服务器。然而, 通过应用程序服务器(如Oracle 融合中间件) 调用 Web 服务,可在 SOA 环境中提供安全性、可扩展性、UDDI 注册和可靠消息等。但是,由于数据库的 Web 服务能够方便地与 Oracle 融合中间件集成,他们可能有助于优化你的 SOA 解决方案。

另见:

  • "PL/SQL Subprograms"

  • 《Oracle XML Developer's Kit Programmer's Guide》关于如何启用和使用数据库的 Web 服务的信息

  • Oracle 融合中间件文档关于 SOA 和 Web 服务的详细信息

网格体系结构概述

在 Oracle 数据库环境中,网格计算体系结构将大量的服务器和存储有效地集中到一个灵活的、 随需而变的计算资源。

模块化的硬件和软件组件,可以根据需要进行连接或重组,以满足不断变化的业务需求。

另见:

"Overview of Grid Computing"关于服务器和存储网格的更详细的信息

Oracle Net服务体系结构概述

Oracle 网络服务是一套网络组件,在分布式的异构计算环境中,提供企业范围的连接解决方案。 

Oracle 网络服务使你能够从一个应用程序会话通过网络连接到一个数据库实例,或从一个数据库实例连接到另一个数据库实例。

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

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

另见:

《Oracle Database Net Services Administrator's Guide》关于 Oracle 网络体系结构的概述

Oracle 网络服务是如何工作的

Oracle数据库协议接受来自Oracle应用程序接口的SQL语句,然后将它们打包传输到Oracle数据库。

传输通过受支持的行业标准高级协议或API进行。从 Oracle 数据库返回的结果会使用同样高度级别的通信机制打包。此工作的发生独立于网络操作系统。

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

另见:

《Oracle Database Net Services Administrator's Guide》有关 Oracle 网络服务如何工作的详细信息

Oracle 网络监听器

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

服务注册使监听器可以确定一个数据库服务及其服务处理程序是否是可用的。 服务处理程序是一个专用服务器进程或作为到数据库的一个连接点的分派器。在注册期间,PMON 过程为监听器提供实例名称、数据库服务名称和服务处理程序的类型和地址。此信息使监听器能够在客户端请求到达时启动一个服务处理程序。

下图显示了分别位于两台独立主机上的两个数据库。 为该数据库环境服务的是分别位于另外两台独立主机上的两个监听器。 在每个数据库实例上运行的 PMON 进程都与这两个监听器进行通信,以注册其数据库。

图 16-4 两个监听


Description of "Figure 16-4 Two Listeners"

图 16-5 显示一个浏览器发出一个 HTTP 连接,而一个客户端发出一个数据库连接,它们都通过监听器连接到数据库。监听器不必驻留在数据库主机上。

图 16-5 监听架构


Description of "Figure 16-5 Listener Architecture"

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

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

  2. 监听器选择一个适当的服务处理程序, 来为客户端请求提供服务,并将请求转发到处理程序。

  3. 客户端进程直接连接到服务处理程序。 之后侦听器就不再参与其间的通信了。

另见:

"Overview of Client Processes""Overview of Server Processes"

服务名

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

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

通过监听器识别到的一个单一的服务,可以标识一个或多个数据库实例。单个数据库实例也可以向一个侦听器注册为一个或多个服务。连接到服务的客户端不需要指明它们需要哪个实例。

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

图 16-6 与一个数据库关联的多个服务


Description of "Figure 16-6 Multiple Services Associated with One Database"

另见:

《Oracle Database Net Services Administrator's Guide》了解命名方法的更多信息

服务注册

在Oracle Net中,服务注册是LREG进程向监听器动态地将注册实例信的功能。

此信息使监听器能将客户端的连接请求转发到适当的服务处理程序。LREG为监听提供以下信息:
  • 由数据库提供的数据库服务名称

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

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

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

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

另见:

  • "Listener Registration Process (LREG)"

  • 《Oracle Database Net Services Administrator's Guide》了解服务注册的更多信息

  • 《Oracle Real Application Clusters Administration and Deployment Guide》了解在 Oracle RAC 中的实例注册和客户端/服务连接

专用服务器体系结构

在专用服务器体系结构中,为每个客户端进程创建的服务器进程称为专用服务器进程(或影子进程)。

此服务器进程与客户端进程是相互分离的,只是为其服务,如图 16-7 所示。

图 16-7 Oracle 数据库使用的专用服务器进程


Description of "Figure 16-7 Oracle Database Using Dedicated Server Processes"

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

图 16-7 显示了在联网的多台计算机上运行的用户进程和服务器进程。不过,如果在同一台计算机运行客户端应用程序和数据库的代码,但如果他们在一个单一进程中运行,主机操作系统可能无法在其中维持两个程序的适度分离,则还是会使用专用服务器体系结构。Linux 就是这种操作系统的一个例子。

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

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

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

未充分利用的专用服务器有时会导致操作系统资源的使用效率低下。考虑一个使用专用服务器进程的订单录入系统。 当某个客户提交了一个订单时,工作人员将订单输入到数据库中。在事务的大部分时间里,工作人员都在与客户交谈,而专用于工作人员客户端进程的服务器进程一直处于空闲状态。该服务器进程在事务的大部分时间里并不是需要的,为输入命令,如果系统维持了太多进程,则当别的工作人员在输入订单时,系统速度可能会变得更慢。对这种类型的应用程序,共享服务器体系结构可能更为可取。

另见:

《Oracle Database Net Services Administrator's Guide》了解专用服务器进程

共享服务器体系结构

在共享服务器体系结构中, 分派器将传入网络的多个会话请求定向到一个共享服务器进程池

共享池消除了为每个连接分配一个专用服务器进程的需要。 池中的一个空闲的共享服务器进程从公共请求队列取出一个请求并处理之。

共享服务器的潜在好处如下所示:

  • 减少了操作系统上的进程数

    相比许多的专用服务器,只需少量的共享服务器就可以执行同样多的处理量。

  • 减少了实例 PGA 内存

    每个专用服务器或共享服务器都有一个 PGA。更少的服务器进程意味着更少的 PGA 和更少的进程管理。

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

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

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

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

  • 将客户端进程连接到分派器进程或专用服务器进程的网络监听器(监听器是 Oracle 网络服务的一部分,而不是 Oracle 数据库的一部分)

  • 一个或多个分派器进程(Dnnn)

  • 一个或多个共享服务器进程

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

另见:

  • 《Oracle Database Net Services Administrator's Guide》有关共享服务器体系结构的详细信息

  • 《Oracle Database Administrator’s Guide》了解如何将数据库配置为共享服务器

分派器请求和响应队列

用户的请求是一个 API 调用,它是用户的 SQL 语句的一部分。

当用户发出一个调用时,会发生以下操作:

  1. 分派器将请求放入请求队列,下一个可用的共享服务器进程会从请求队列取出该请求。

    请求队列位于 SGA 中,能被实例的所有分派器进程访问。

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

  3. 一个共享服务器进程从队列中取出一个请求,并对数据库发出所有必要的调用以完成该请求。

    一个不同的服务器进程可能会处理数据库中的每个调用。因此,解析查询、读取第一行、读取下一行和关闭结果集等每个请求都可能会由不同的共享服务器来处理。

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

  5. 分派器将已完成的请求结果返回给适当客户端进程。

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

图 16-8 显示客户端进程如何与分派器进行跨 API 通信,及分派器如何就用户请求与共享服务器进程进行通信。

图 16-8 共享服务器配置和进程


Description of "Figure 16-8 The Shared Server Configuration and Processes"

另见:

"Large Pool"

分派器进程(Dnnn)

分派器进程使得客户端进程可以共享数量有限的服务器进程。

您可以为单个数据库实例创建多个分派器进程。 分派器进程的最佳个数取决于操作系统的限制和每个进程的连接数。

分派器进程建立通信的过程如下所示:

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

  2. 每一个分派器进程将其监听连接请求的地址提供给监听器进程。

    必须至少为每个数据库客户端将使用的网络协议配置并启动一个分派器进程。

  3. 当客户端进程发出连接请求时,监听器将确定客户端进程是否应使用共享服务器进程:

    • 如果监听器确定需要使用一个共享服务器进程,则监听器返回负载最轻的分派器进程的地址, 客户端进程则直接连接到该分派器。

    • 如果客户端进程不能与分派器进行通信,或者客户端进程请求的是一个专用服务器, 则监听器将创建专用服务器,并建立一个适当的连接。

另见:

《Oracle Database Net Services Administrator's Guide》了解如何配置分派器

共享服务器进程(Snnn)

在共享服务器配置中,每个共享服务器进程为多个客户端请求服务。

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

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

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

另见:

"Overview of the Program Global Area (PGA)"

受限制的共享服务器操作

当连接到一个分派器进程时, 无法执行特定的管理活动, 包括关闭或启动实例和执行介质恢复等。

这些活动通常需要在具有管理员权限的连接时执行。若要在使用共享服务器配置的系统中以管理员权限来连接,则必须指定您要使用专用服务器进程。

另见:

《Oracle Database Net Services Administrator's Guide》关于正确的连接字符串语法

数据库驻留连接池

数据库驻留连接池 (DRCP) 为典型的 Web 应用程序场景提供专用服务器的连接池。

Web 应用程序通常发起一个数据库连接、 短暂地使用该连接、然后将其释放。通过 DRCP,数据库可以扩展到能够同时接受数以万计的连接。

DRCP 提供了以下优点:

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

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

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

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

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

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

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

图 16-9 DRCP


Description of "Figure 16-9 DRCP"

在 DRCP 中,释放资源后使会话保持如初,但会话不再与连接(服务器进程)相关联。与共享服务器不同,此会话将其 UGA 存储在 PGA 中,而不是在 SGA 中。客户端可以通过检测后透明地重新建立连接。

另见:

  • "Connections and Sessions"

  • 《Oracle Database Administrator’s Guide》《Oracle Call Interface Programmer's Guide》了解 DRCP 的更多信息

程序接口概述

程序接口是一个数据库应用程序和 Oracle 数据库之间的软件层。 

程序接口执行以下功能:

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

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

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

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

程序接口结构

程序接口由几个不同的组件组成。

这些组件包括:

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

  • 程序接口的客户端或用户端

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

  • 操作系统通信软件

  • 程序接口的服务器端或 Oracle 数据库端(也称为 OPI)

用户端和程序接口的 Oracle 数据库端,都运行 Oracle 软件的驱动程序。

程序接口驱动程序

驱动程序通常是跨越网络传输数据的软件。

驱动执行如连接、断开连接、发出错误信号、并测试错误等操作。驱动程序是特定于通信协议的。

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

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

另见:

  • 您系统的安装和配置指南,关于选择、安装、及添加驱动程序的详细信息

  • 《Oracle Database Net Services Administrator's Guide》了解 JDBC 驱动程序

操作系统的通信软件

程序接口中将用户端连接到 Oracle 数据库端的最底层软件,是由主机操作系统提供的通信软件。

例如 DECnet、TCP/IP、LU6.2、ASYNC 等。 通讯软件可能由 Oracle 提供,但通常是从硬件供应商或第三方软件供应商单独购买的。
  相关解决方案