19 Application and Oracle Net Services Architecture(19 应用程序与 Oracle Net Services 体系结构)
本章定义应用程序体系结构,并描述 Oracle 数据库和数据库应用程序如何在分布式处理环境中工作。本材料适用于几乎所有类型的 Oracle AI 数据库环境。
-
Overview of Oracle Application Architecture(Oracle 应用程序体系结构概述)
在本章上下文中,应用程序体系结构是指数据库应用程序连接到 Oracle 数据库的计算环境。
-
Overview of Oracle Net Services Architecture(Oracle Net Services 体系结构概述)
Oracle Net Services 是一套网络组件,可在分布式、异构计算环境中提供企业级连接解决方案。
-
Overview of the Program Interface(程序接口概述)
程序接口是数据库应用程序与 Oracle AI 数据库之间的软件层。
-
Overview of Oracle True Cache(Oracle True Cache 概述)
True Cache 是位于 Oracle AI 数据库前端的内存中只读缓存。
Overview of Oracle Application Architecture(Oracle 应用程序体系结构概述)
在本章上下文中,应用程序体系结构是指数据库应用程序连接到 Oracle 数据库的计算环境。
-
Overview of Client/Server Architecture(客户端/服务器体系结构概述)
在 Oracle AI 数据库环境中,数据库应用程序和数据库被分离为客户端/服务器体系结构。
-
Overview of Multitier Architecture(多层体系结构概述)
在传统的多层体系结构中,应用程序服务器为客户端提供数据,并充当客户端和数据库服务器之间的接口。
-
Overview of Grid Architecture(网格体系结构概述)
在 Oracle AI 数据库环境中,网格计算是一种计算体系结构,它将大量服务器和存储有效地池化为灵活、按需的计算资源。
Overview of Client/Server Architecture(客户端/服务器体系结构概述)
在 Oracle AI 数据库环境中,数据库应用程序和数据库被分离为客户端/服务器体系结构。
其组件如下:
- 客户端运行数据库应用程序,例如 SQL*Plus 或 Visual Basic 数据录入程序,该程序访问数据库信息并与用户交互。
- 服务器运行 Oracle AI 数据库软件,并处理对 Oracle 数据库进行并发、共享数据访问所需的功能。
尽管客户端应用程序和数据库可以在同一台计算机上运行,但当客户端部分和服务器部分由通过网络连接的不同计算机运行时,通常能获得更高的效率。以下各节讨论 Oracle AI 数据库客户端/服务器体系结构中的各种形式。
-
Distributed Processing(分布式处理)
使用多台主机来处理单个任务称为分布式处理。
-
Advantages of a Client/Server Architecture(客户端/服务器体系结构的优势)
Oracle AI 数据库在分布式处理环境中的客户端/服务器体系结构提供了许多好处。
Distributed Processing(分布式处理)
使用多台主机来处理单个任务称为分布式处理。
前端和后端处理发生在不同的计算机上。在图 19-1 中,客户端和服务器位于通过 Oracle Net Services 连接的不同主机上。
Figure 19-1 Client/Server Architecture and Distributed Processing(图 19-1 客户端/服务器体系结构与分布式处理)

图 19-2 是一个变体,描绘了一个分布式数据库。在此示例中,一台主机上的数据库访问位于不同主机上的另一个数据库中的数据。
Figure 19-2 Client/Server Architecture and Distributed Database(图 19-2 客户端/服务器体系结构与分布式数据库)

注意 :
本章的其余部分适用于一台服务器上有一个数据库的环境。
Advantages of a Client/Server Architecture(客户端/服务器体系结构的优势)
Oracle AI 数据库在分布式处理环境中的客户端/服务器体系结构提供了许多好处。
好处包括:
-
客户端应用程序不负责执行数据处理。相反,它们请求用户输入,从服务器请求数据,然后使用客户端工作站或终端(例如,使用图形或电子表格)的显示功能分析和呈现这些数据。
-
客户端应用程序不依赖于数据的物理位置。即使数据被移动或分发到其他数据库服务器,应用程序也只需很少或无需修改即可继续运行。
-
Oracle AI 数据库利用其底层操作系统的多任务处理和共享内存功能。因此,它为其客户端应用程序提供了尽可能最高程度的并发性、数据完整性和性能。
-
客户端工作站或终端可以针对数据的呈现进行优化(例如,通过提供图形和鼠标支持),而服务器可以针对数据的处理和存储进行优化(例如,拥有大量内存和磁盘空间)。
-
在网络环境中,您可以使用廉价的客户端工作站有效地访问服务器的远程数据。
-
数据库可以随着系统的增长而扩展。您可以添加多个服务器以在整个网络中分布数据库处理负载(水平扩展),或者您可以将数据库移至小型机或大型机,以利用更大系统的性能(垂直扩展)。无论哪种情况,数据和应用程序都只需很少或无需修改即可得到维护,因为 Oracle AI 数据库在系统之间是可移植的。
-
在网络环境中,共享数据存储在服务器上,而不是所有计算机上,这使得管理并发访问更容易、更高效。
-
在网络环境中,客户端应用程序使用 SQL 语句向服务器提交数据库请求。收到后,每个 SQL 语句由服务器处理,服务器将结果返回给客户端。网络流量最小化,因为只有请求和结果通过网络传输。
另请参见:
- 《Oracle AI Database Administrator's Guide》(《Oracle AI 数据库管理员指南》),了解有关分布式数据库的更多信息
Overview of Multitier Architecture(多层体系结构概述)
在传统的多层体系结构中,应用程序服务器为客户端提供数据,并充当客户端和数据库服务器之间的接口。
此体系结构允许使用应用程序服务器来:
- 验证客户端(例如 Web 浏览器)的凭据
- 连接到数据库服务器
- 执行请求的操作
多层体系结构的示例见图 19-3。
Figure 19-3 A Multitier Architecture Environment(图 19-3 多层体系结构环境)

-
Clients(客户端)
客户端发起要在数据库服务器上执行的操作的请求。
-
Application Servers(应用程序服务器)
应用程序服务器为客户端提供对数据的访问。它充当客户端与一个或多个数据库服务器之间的接口,并托管应用程序。
-
Database Servers(数据库服务器)
数据库服务器代表客户端提供应用程序服务器所请求的数据。数据库执行查询处理。
-
Service-Oriented Architecture (SOA)(面向服务的体系结构 (SOA))
在传统的多层或面向服务的体系结构 (SOA) 环境中,数据库可以充当 Web 服务提供者。
Clients(客户端)
客户端发起要在数据库服务器上执行的操作的请求。
客户端可以是 Web 浏览器或其他最终用户程序。在多层体系结构中,客户端通过一个或多个应用程序服务器连接到数据库服务器。
Application Servers(应用程序服务器)
应用程序服务器为客户端提供对数据的访问。它充当客户端与一个或多个数据库服务器之间的接口,并托管应用程序。
应用程序服务器允许瘦客户端(配备最少软件配置的客户端)访问应用程序,而无需对客户端计算机进行持续维护。应用程序服务器还可以为客户端执行数据重新格式化,从而减少客户端工作站的负载。
当应用程序服务器代表客户端在数据库服务器上执行操作时,它会假定该客户端的身份。最佳实践是限制应用程序服务器的权限,以防止它在客户端操作期间执行不必要和不需要的操作。
Database Servers(数据库服务器)
数据库服务器代表客户端提供应用程序服务器所请求的数据。数据库执行查询处理。
数据库服务器可以审计应用程序服务器代表客户端以及代表自身执行的操作。例如,客户端操作可以请求要在客户端上显示的信息,而应用程序服务器操作可以请求连接到数据库服务器。
在统一审计中,数据库可以将应用程序上下文(特定于应用程序的名称-值对)附加到统一审计跟踪中的记录。您可以配置数据库将哪些应用程序上下文写入数据库审计记录。
另请参见:
- 《Oracle AI Database Security Guide》(《Oracle AI 数据库安全指南》),获取审计简介
Service-Oriented Architecture (SOA)(面向服务的体系结构 (SOA))
在传统的多层或面向服务的体系结构 (SOA) 环境中,数据库可以充当 Web 服务提供者。
SOA 是一种依赖于支持网络上的计算机之间交互的服务的多层体系结构。在 SOA 上下文中,服务是一个自给自足的功能端点,具有明确定义的功能和服务级别协议,可以进行监视和管理,并有助于强制实施策略遵从性。
SOA 服务通常实现为可通过 HTTP 协议访问的 Web 服务。它们基于诸如 WSDL 和 SOAP 之类的 XML 标准。
Oracle AI 数据库 Web 服务功能是作为 Oracle XML DB 的一部分实现的,必须由 DBA 专门启用。然后,应用程序可以通过数据库 Web 服务完成以下任务:
- 提交 SQL 或 XQuery 查询,并将结果作为 XML 接收
- 调用独立的 PL/SQL 函数并接收结果
- 调用 PL/SQL 包函数并接收结果
数据库 Web 服务提供了一种将 Web 服务添加到应用程序环境的简单方法,无需应用程序服务器。但是,通过诸如 Oracle Fusion Middleware 之类的应用程序服务器调用 Web 服务,可在 SOA 环境中提供安全性、可扩展性、UDDI 注册和可靠的消息传递。然而,由于数据库 Web 服务可以轻松地与 Oracle Fusion Middleware 集成,它们可能适用于优化 SOA 解决方案。
另请参见:
- "PL/SQL Subprograms"("PL/SQL 子程序")
- 《Oracle XML Developer's Kit Programmer's Guide》(《Oracle XML 开发人员工具包程序员指南》),了解有关启用和使用数据库 Web 服务的信息
- 有关 SOA 和 Web 服务的更多信息,请参阅 Oracle Fusion Middleware 文档
Overview of Grid Architecture(网格体系结构概述)
在 Oracle AI 数据库环境中,网格计算是一种计算体系结构,它将大量服务器和存储有效地池化为灵活、按需的计算资源。
模块化的硬件和软件组件可以按需连接和重新组合,以满足企业不断变化的需求。
另请参见:
- 《Oracle Clusterware Administration and Deployment Guide》(《Oracle 集群件管理与部署指南》),了解有关服务器和存储网格的更详细信息
Overview of Oracle Net Services Architecture(Oracle Net Services 体系结构概述)
Oracle Net Services 是一套网络组件,可在分布式、异构计算环境中提供企业级连接解决方案。
Oracle Net Services 支持从应用程序到数据库实例以及从数据库实例到另一个数据库实例的网络会话。
Oracle Net Services 提供了位置透明性、集中配置和管理以及快速安装和配置。它还允许您最大化系统资源并提高性能。共享服务器体系结构增加了应用程序的可伸缩性以及同时连接到数据库的客户端数量。虚拟接口 (VI) 协议将大部分消息传递负担置于高速网络硬件上,从而释放了 CPU。
Oracle Net Services 使用由各种网络支持的通信协议或应用程序编程接口 (API),以提供分布式数据库和分布式处理。网络会话建立后,Oracle Net Services 充当客户端应用程序和数据库服务器的数据信使,建立并维护连接并交换消息。Oracle Net Services 之所以能执行这些任务,是因为它存在于网络中的每台计算机上。
- How Oracle Net Services Works(Oracle Net Services 如何工作)
Oracle AI 数据库协议从 Oracle 应用程序的接口接受 SQL 语句,然后将其打包以传输到 Oracle AI 数据库。 - The Oracle Net Listener(Oracle Net Listener)
Oracle Net Listener(简称监听器)是一个服务器端进程,它侦听传入的客户端连接请求并管理到数据库的流量。当数据库实例启动时,以及在其生命周期内的不同时间,实例会联系监听器并建立到该实例的通信途径。 - Dedicated Server Architecture(专用服务器体系结构)
在专用服务器体系结构中,为每个客户端进程创建的服务器进程称为专用服务器进程(或影子进程)。 - Shared Server Architecture(共享服务器体系结构)
在共享服务器体系结构中,调度程序将多个传入的网络会话请求定向到共享服务器进程池。 - Database Resident Connection Pooling(数据库驻留连接池)
数据库驻留连接池 (DRCP) 为典型的 Web 应用程序场景提供了一个专用服务器连接池。
另请参见:
- 《Oracle AI Database Net Services Administrator's Guide》(《Oracle AI 数据库网络服务管理员指南》),了解 Oracle Net 体系结构概述
How Oracle Net Services Works(Oracle Net Services 如何工作)
Oracle AI 数据库协议从 Oracle 应用程序的接口接受 SQL 语句,然后将其打包以传输到 Oracle AI 数据库。
传输通过受支持的行业标准更高级别协议或 API 进行。来自 Oracle AI 数据库的回复通过相同的高级通信机制打包。此工作独立于网络操作系统进行。
根据运行 Oracle AI 数据库的操作系统,数据库服务器的 Oracle Net Services 软件可能包括驱动程序软件并启动一个额外的后台进程。
另请参见:
- 《Oracle AI Database Net Services Administrator's Guide》(《Oracle AI 数据库网络服务管理员指南》),了解有关 Oracle Net Services 如何工作的更多信息
The Oracle Net Listener(Oracle Net Listener)
Oracle Net Listener(简称监听器)是一个服务器端进程,它侦听传入的客户端连接请求并管理到数据库的流量。当数据库实例启动时,以及在其生命周期内的不同时间,实例会联系监听器并建立到该实例的通信途径。
服务注册使监听器能够确定数据库服务及其服务处理程序是否可用。服务处理程序是充当与数据库的连接点的专用服务器进程或调度程序。在注册期间,LREG 进程向监听器提供实例名称、数据库服务名称以及服务处理程序的类型和地址。此信息使监听器能够在客户端请求到达时启动服务处理程序。
下图显示了两个数据库,每个数据库位于单独的主机上。数据库环境由两个监听器提供服务,每个监听器位于单独的主机上。在每个数据库实例中运行的 LREG 进程与两个监听器通信以注册数据库。
Figure 19-4 Two Listeners(图 19-4 两个监听器)

图 19-5 显示了一个浏览器发出 HTTP 连接以及一个客户端通过监听器建立数据库连接。监听器无需驻留在数据库主机上。
Figure 19-5 Listener Architecture(图 19-5 监听器体系结构)

客户端通过监听器建立连接的基本步骤如下:
- 客户端进程或另一个数据库请求连接。
- 监听器选择合适的服务处理程序来服务客户端请求,并将请求转发给该处理程序。
- 客户端进程直接连接到服务处理程序。监听器不再参与通信。
-
Service Names(服务名称)
服务名称是用于客户端连接的服务的逻辑表示。
-
Services in a Multitenant Environment(多租户环境中的服务)
客户端必须使用服务连接到 PDB 或应用程序根容器。
-
Service Registration(服务注册)
在 Oracle Net 中,服务注册是 LREG 进程向监听器动态注册实例信息的一项功能。
另请参见:
- "Overview of Client Processes"("客户端进程概述")和"Overview of Server Processes"("服务器进程概述")
Service Names(服务名称)
服务名称是用于客户端连接的服务的逻辑表示。
当客户端连接到监听器时,它会请求连接到某个服务。当数据库实例启动时,它会向监听器注册自身,表明其按名称提供一个或多个服务。因此,监听器充当客户端和实例之间的中介,并将连接请求路由到正确的位置。
一个服务(如监听器所知)可以标识一个或多个数据库实例。同样,单个数据库实例可以向监听器注册一个或多个服务。连接到某个服务的客户端无需指定它们需要哪个实例。
图 19-6 显示了一个与两个服务(book.example.com 和 soft.example.com)相关联的单实例数据库。这些服务允许同一个数据库被不同的客户端以不同方式标识。数据库管理员可以限制或预留系统资源,从而更好地将资源分配给请求这些服务之一的客户端。
Figure 19-6 Multiple Services Associated with One Database(图 19-6 与一个数据库关联的多个服务)

另请参见:
- 《Oracle AI Database Net Services Administrator's Guide》(《Oracle AI 数据库网络服务管理员指南》),了解有关命名方法的更多信息
Services in a Multitenant Environment(多租户环境中的服务)
客户端必须使用服务连接到 PDB 或应用程序根容器。
使用服务名称的连接会在 PDB 或应用程序根容器中启动一个新会话。前台进程,以及因此会话,在其生命周期的每一刻,都有一个唯一定义的当前容器。
下图显示了两个客户端使用两个不同的监听器连接到 PDB。
Figure 19-7 Services in a CDB(图 19-7 CDB 中的服务)

-
Service Creation(服务创建)
当您执行
CREATE PLUGGABLE DATABASE语句创建 PDB 时,数据库会自动在 CDB 内创建并启动一个服务。 -
Connections to Containers in a CDB(连接到 CDB 中的容器)
通常,CDB 管理员必须拥有适当的权限才能配置 PDB 并连接到各个容器。CDB 管理员是公用用户。
Service Creation(服务创建)
当您执行 CREATE PLUGGABLE DATABASE 语句创建 PDB 时,数据库会自动在 CDB 内创建并启动一个服务。
默认服务具有一个属性,该属性将 PDB 标识为该服务的初始当前容器。该属性显示在 DBA_SERVICES.PDB 列中。
-
Default Services(默认服务)
默认服务与 PDB 同名。PDB 名称必须是有效的服务名称,且在 CDB 内必须唯一。
-
Nondefault Services(非默认服务)
您可以为每个 PDB 创建附加服务,每个 CDB 最多可创建 10,000 个。每个附加服务都将其 PDB 表示为初始当前容器。
Default Services(默认服务)
默认服务与 PDB 同名。PDB 名称必须是有效的服务名称,且在 CDB 内必须唯一。
当您创建一个应用程序容器(这需要指定 AS APPLICATION CONTAINER 子句)时,Oracle AI 数据库会自动为应用程序根容器创建一个新的默认服务。该服务与应用程序容器同名。必须正确配置 Oracle Net Services,以便客户端访问此服务。同样,每个应用程序 PDB 都有其自己的默认服务名称,应用程序种子 PDB 也有其自己的默认服务名称。
Example 19-1 Switching to a PDB Using a Default Service(示例 19-1:使用默认服务切换到 PDB)
此示例使用默认服务(与 PDB 同名)切换到名为 salespdb 的 PDB:
sql
ALTER SESSION SET CONTAINER = salespdb;
Nondefault Services(非默认服务)
您可以为每个 PDB 创建附加服务,每个 CDB 最多可创建 10,000 个。每个附加服务都将其 PDB 表示为初始当前容器。
在图 19-7 中,erppdb 和 hrpdb 存在非默认服务。例如,在图 19-7 中,名为 hrpdb 的 PDB 有一个名为 hrpdb 的默认服务。无法删除默认服务。
当您使用 ALTER SESSION SET CONTAINER 切换到某个容器时,该会话将使用该容器的默认服务。您可以选择通过指定 SERVICE = service_name 为该容器使用不同的服务,其中 service_name 是服务的名称。您可能希望使用特定服务,以便会话可以利用其服务属性和功能,例如服务指标、负载均衡、Resource Manager 设置等。
Example 19-2 Switching to a PDB Using a Nondefault Service(示例 19-2:使用非默认服务切换到 PDB)
在此示例中,hrpdb 的默认服务不支持所有服务属性和功能,例如服务指标、FAN、负载均衡、Oracle AI Database Resource Manager、Transaction Guard、Application Continuity 等。您可以按如下方式切换到非默认服务:
sql
ALTER SESSION SET CONTAINER = hrpdb SERVICE = hrpdb_full;
Connections to Containers in a CDB(连接到 CDB 中的容器)
通常,CDB 管理员必须拥有适当的权限才能配置 PDB 并连接到各个容器。CDB 管理员是公用用户。
CDB 管理员可以使用以下任一技术:
-
直接连接到 PDB 或应用程序根容器。
用户需要在该容器中拥有
CREATE SESSION权限。 -
使用
ALTER SESSION SET CONTAINER语句在容器之间切换,这对于连接池和高级 CDB 管理都很有用。语法是ALTER SESSION SET CONTAINER = container_name [SERVICE = service_name]。例如,CDB 管理员可以在一个会话中连接到根容器,然后在同一会话中切换到某个 PDB。在这种情况下,用户需要在该容器中拥有
SET CONTAINER系统权限。
下表描述了涉及图 19-7 中 CDB 的一个场景。每一行都描述了发生在前一行操作之后的操作。公用用户 SYSTEM 查询当前容器的名称以及 CDB 中 PDB 的名称。
Table 19-1 Services in a CDB(表 19-1 CDB 中的服务)
| 操作(Operation) | 描述(Description) |
|---|---|
SQL> CONNECT SYSTEM@prod Enter password: ******** Connected. |
SYSTEM 用户(CDB 中所有容器的公用用户)使用名为 prod 的服务连接到根容器。 |
SQL> SHOW CON_NAME CON_NAME -------- CDB$ROOT |
SYSTEM 使用 SQL*Plus 命令 SHOW CON_NAME 列出用户当前连接到的容器的名称。CDB$ROOT 是根容器的名称。 |
SQL> SELECT NAME, PDB FROM V$SERVICES 2 ORDER BY PDB, NAME; NAME PDB ---------------------- -------- SYS$BACKGROUND CDB$ROOT SYS$USERS CDB$ROOT prod.example.com CDB$ROOT erppdb.example.com ERPPDB erp.example.com ERPPDB hr.example.com HRPDB hrpdb.example.com HRPDB salespdb.example.com SALESPDB 8 rows selected. |
对 V$SERVICES 的查询显示存在三个 PDB,其服务名称与 PDB 名称匹配。hrpdb 和 erppdb 都有一个附加服务。 |
SQL> ALTER SESSION SET CONTAINER = hrpdb; Session altered. |
SYSTEM 使用 ALTER SESSION 连接到 hrpdb。 |
SQL> SELECT SYS_CONTEXT 2 ('USERENV', 'CON_NAME') 3 AS CUR_CONTAINER FROM DUAL; CUR_CONTAINER ------------- HRPDB |
查询确认当前容器现在是 hrpdb。 |
另请参见:
- 《Oracle AI Database SQL Language Reference》(《Oracle AI 数据库 SQL 语言参考》),了解
ALTER SESSION SET CONTAINER的语法和语义
Service Registration(服务注册)
在 Oracle Net 中,服务注册是 LREG 进程向监听器动态注册实例信息的一项功能。
此信息使监听器能够将客户端连接请求转发到适当的服务处理程序。LREG 向监听器提供有关以下各项的信息:
- 数据库提供的数据库服务的名称
- 与服务关联的数据库实例的名称及其当前负载和最大负载
- 实例可用的服务处理程序(调度程序和专用服务器),包括其类型、协议地址以及当前负载和最大负载
服务注册是动态的,不需要在 listener.ora 文件中进行配置。动态注册减少了多个数据库或实例的管理开销。
初始化参数 SERVICE_NAMES 列出了实例所属的服务。在启动时,每个实例都会向属于相同服务的其他实例的监听器注册。在数据库操作期间,每个服务的实例会将有关 CPU 使用情况和当前连接计数的信息传递给相同服务中的所有监听器。这种通信实现了动态负载均衡和连接故障转移。
另请参见:
- "Listener Registration Process (LREG)"("监听器注册进程 (LREG)")
- 《Oracle AI Database Net Services Administrator's Guide》(《Oracle AI 数据库网络服务管理员指南》),了解有关服务注册的更多信息
- 《Oracle Real Application Clusters Administration and Deployment Guide》(《Oracle Real Application Clusters 管理与部署指南》),了解 Oracle RAC 中的实例注册和客户端/服务连接
Dedicated Server Architecture(专用服务器体系结构)
在专用服务器 体系结构中,为每个客户端进程创建的服务器进程称为专用服务器进程 (或影子进程)。
专用服务器进程与客户端进程分离,并且仅代表客户端进程运行,如图 19-8 所示。
Figure 19-8 Oracle AI Database Using Dedicated Server Processes(图 19-8 使用专用服务器进程的 Oracle AI 数据库)

客户端进程和服务器进程之间存在一对一的关系。即使用户没有主动发出数据库请求,专用服务器进程也会保留------尽管它处于非活动状态,并且在某些操作系统上可能会被换出。
图 19-8 显示了在网络计算机上运行的用户和服务器进程。但是,如果同一台计算机同时运行客户端应用程序和数据库代码,但主机操作系统无法在这两个程序作为单个进程运行时保持其分离,则也会使用专用服务器体系结构。Linux 就是这种操作系统的一个例子。
在专用服务器体系结构中,用户和服务器进程使用不同的机制进行通信:
- 如果客户端进程和专用服务器进程在同一台计算机上运行,则程序接口使用主机操作系统的进程间通信机制来完成其工作。
- 如果客户端进程和专用服务器进程在不同的计算机上运行,则程序接口提供程序之间的通信机制(例如网络软件和 Oracle Net Services)。
未充分利用的专用服务器有时会导致操作系统资源使用效率低下。考虑一个带有专用服务器进程的订单录入系统。当客户下订单时,店员将订单输入数据库。在大部分事务处理过程中,店员都在与客户交谈,而专用于该店员客户端进程的服务器进程则处于空闲状态。在事务处理的大部分时间里,不需要该服务器进程,如果系统管理的进程过多,其他正在输入订单的店员可能会感觉到系统变慢。对于此类应用程序,共享服务器体系结构可能更合适。
另请参见:
- 《Oracle AI Database Net Services Administrator's Guide》(《Oracle AI 数据库网络服务管理员指南》),了解有关专用服务器进程的更多信息
Shared Server Architecture(共享服务器体系结构)
在共享服务器体系结构中,调度程序将多个传入的网络会话请求定向到共享服务器进程池。
共享池消除了为每个连接提供专用服务器进程的需要。池中空闲的共享服务器进程会从公共队列中拾取请求。
共享服务器的潜在好处如下:
- 减少操作系统上的进程数量
少量共享服务器即可执行与许多专用服务器同等处理量的工作。 - 减少实例 PGA 内存
每个专用服务器或共享服务器都有一个 PGA。更少的服务器进程意味着更少的 PGA 和更少的进程管理。 - 提高应用程序的可伸缩性以及可以同时连接到数据库的客户端数量
- 当客户端连接和断开连接的速率很高时,可能比专用服务器更快
共享服务器也有一些缺点,包括在某些情况下响应时间较慢、功能支持不完整以及设置和调优的复杂性增加。作为一般准则,仅当您拥有的到数据库的并发连接数超过操作系统可以处理的数量时,才使用共享服务器。
共享服务器体系结构中需要以下进程:
- 一个网络监听器,用于将客户端进程连接到调度程序或专用服务器(该监听器是 Oracle Net Services 的一部分,而非 Oracle AI 数据库的一部分)
注意 :
要使用共享服务器,客户端进程必须通过 Oracle Net Services 连接,即使该进程与 Oracle AI 数据库实例在同一台计算机上运行也是如此。
- 一个或多个调度程序进程(
Dnnn) - 一个或多个共享服务器进程
数据库可以同时支持共享服务器和专用服务器连接。例如,一个客户端可以使用专用服务器连接,而另一个客户端使用共享服务器连接到同一数据库。
- Dispatcher Request and Response Queues(调度程序请求和响应队列)
来自用户的请求是单个 API 调用,它是用户 SQL 语句的一部分。 - Restricted Operations of the Shared Server(共享服务器的受限操作)
在连接到调度程序进程时,无法执行特定的管理活动,包括关闭或启动实例以及介质恢复。
另请参见:
- 《Oracle AI Database Net Services Administrator's Guide》(《Oracle AI 数据库网络服务管理员指南》),了解有关共享服务器体系结构的更多信息
- 《Oracle AI Database Administrator's Guide》(《Oracle AI 数据库管理员指南》),了解如何为共享服务器配置数据库
Dispatcher Request and Response Queues(调度程序请求和响应队列)
来自用户的请求是单个 API 调用,它是用户 SQL 语句的一部分。
当用户进行调用时,会发生以下操作:
- 调度程序将请求放入请求队列,由下一个可用的共享服务器进程拾取。
请求队列位于 SGA 中,对实例的所有调度程序进程公用。 - 共享服务器进程检查公用请求队列中是否有新请求,并以先进先出的方式拾取新请求。
- 一个共享服务器进程拾取队列中的一个请求,并进行所有必要的数据库调用来完成此请求。
不同的服务器进程可以处理每个数据库调用。因此,解析查询、获取第一行、获取下一行以及关闭结果集的请求可能各自由不同的共享服务器处理。 - 当服务器进程完成请求后,它将响应放入调用调度程序的响应队列中。每个调度程序都有自己的响应队列。
- 调度程序将完成的请求返回给适当的客户端进程。
例如,在订单录入系统中,每个店员的客户端进程都连接到一个调度程序。店员发出的每个请求都发送到此调度程序,调度程序将请求放入队列中。下一个可用的共享服务器拾取该请求,为其提供服务,然后将响应放入响应队列。当请求完成后,店员仍然连接到调度程序,但处理该请求的共享服务器被释放,并可用于其他请求。当一位店员与客户交谈时,另一位店员可以使用相同的共享服务器进程。
图 19-9 显示了客户端进程如何通过 API 与调度程序通信,以及调度程序如何将用户请求传送给共享服务器进程。
Figure 19-9 The Shared Server Configuration and Processes(图 19-9 共享服务器配置和进程)

- Dispatcher Processes (Dnnn)(调度程序进程 (Dnnn))
调度程序进程使客户端进程能够共享有限数量的服务器进程。 - Shared Server Processes (Snnn)(共享服务器进程 (Snnn))
在共享服务器配置中,每个共享服务器进程都为多个客户端请求提供服务。
另请参见:
- "Large Pool"("大型池")
Dispatcher Processes (Dnnn)(调度程序进程 (Dnnn))
调度程序进程使客户端进程能够共享有限数量的服务器进程。
您可以为单个数据库实例创建多个调度程序进程。调度程序进程的最佳数量取决于操作系统限制和每个进程的连接数。
注意 :
连接到调度程序的每个客户端进程都必须使用 Oracle Net Services,即使两个进程在同一台主机上运行也是如此。
调度程序进程建立通信的方式如下:
- 当实例启动时,网络监听器进程打开并建立一个通信途径,用户通过该途径连接到 Oracle AI 数据库。
- 每个调度程序进程向监听器进程提供一个地址,调度程序在该地址侦听连接请求。
对于数据库客户端将使用的每种网络协议,必须至少配置并启动一个调度程序进程。 - 当客户端进程发出连接请求时,监听器确定该客户端进程是否应使用共享服务器进程:
- 如果监听器确定需要共享服务器进程,则监听器返回负载最轻的调度程序进程的地址,客户端进程直接连接到该调度程序。
- 如果进程无法与调度程序通信,或者客户端进程请求专用服务器,则监听器会创建一个专用服务器进程并建立适当的连接。
另请参见:
- 《Oracle AI Database Net Services Administrator's Guide》(《Oracle AI 数据库网络服务管理员指南》),了解如何配置调度程序
Shared Server Processes (Snnn)(共享服务器进程 (Snnn))
在共享服务器配置中,每个共享服务器进程都为多个客户端请求提供服务。
共享服务器进程和专用服务器进程提供相同的功能,不同之处在于共享服务器进程不与特定的客户端进程关联。相反,共享服务器进程为共享服务器配置中的任何客户端请求提供服务。
共享服务器进程的 PGA 不包含 UGA 数据,这些数据必须可供所有共享服务器进程访问。共享服务器 PGA 仅包含特定于进程的数据。
所有与会话相关的信息都包含在 SGA 中。每个共享服务器进程必须能够访问所有会话的数据空间,以便任何服务器都可以处理来自任何会话的请求。在 SGA 中为每个会话的数据空间分配空间。
另请参见:
- "Overview of the Program Global Area (PGA)"("程序全局区 (PGA) 概述")
Restricted Operations of the Shared Server(共享服务器的受限操作)
在连接到调度程序进程时,无法执行特定的管理活动,包括关闭或启动实例以及介质恢复。
这些活动通常在以管理员权限连接时执行。要在配置了共享服务器的系统中以管理员权限连接,必须指定您正在使用专用服务器进程。
另请参见:
- 《Oracle AI Database Net Services Administrator's Guide》(《Oracle AI 数据库网络服务管理员指南》),了解正确的连接字符串语法
Database Resident Connection Pooling(数据库驻留连接池)
数据库驻留连接池 (DRCP) 为典型的 Web 应用程序场景提供了一个专用服务器连接池。
Web 应用程序通常会建立数据库连接,短暂使用该连接,然后释放它。通过 DRCP,数据库可以扩展到数万个同时连接。
DRCP 提供以下优势:
- 补充了在中间层进程中在线程之间共享连接的中间层连接池。
- 支持跨多个中间层进程共享数据库连接。这些中间层进程可能属于同一个或不同的中间层主机。
- 显著减少了支持许多客户端连接所需的关键数据库资源。例如,DRCP 减少了数据库所需的内存,并提高了数据库和中间层的可伸缩性。可用服务器池还降低了重新创建客户端连接的成本。
- 为具有多进程、单线程应用程序服务器(如 PHP 和 Apache)的体系结构提供了池功能,这些服务器无法进行中间层连接池。
DRCP 使用池化服务器,它相当于一个专用服务器进程(而非共享服务器进程)和一个数据库会话的组合。池化服务器模型避免了为每个短暂需要服务器的连接都专门分配一个服务器的开销。
从数据库驻留连接池获取连接的客户端连接到一个 Oracle 后台进程,称为连接代理。连接代理实现池功能,并在来自客户端进程的入站连接之间复用池化服务器。
如图 19-10 所示,当客户端需要数据库访问时,连接代理从池中拾取一个服务器进程并将其移交给客户端。客户端直接连接到服务器进程,直到请求得到服务。服务器完成后,服务器进程被释放回池中。从客户端到代理的连接将被恢复。
Figure 19-10 DRCP(图 19-10 DRCP)

在 DRCP 中,释放资源会使会话保持完整,但不再与连接(服务器进程)关联。与共享服务器不同,此会话将其 UGA 存储在 PGA 中,而不是 SGA 中。客户端可以在检测到活动时透明地重新建立连接。
另请参见:
- "Connections and Sessions"("连接与会话")
- 《Oracle AI Database Administrator's Guide》(《Oracle AI 数据库管理员指南》)和《Oracle Call Interface Developer's Guide》(《Oracle 调用接口开发人员指南》),了解有关 DRCP 的更多信息
Overview of the Program Interface(程序接口概述)
程序接口是数据库应用程序与 Oracle AI 数据库之间的软件层。
程序接口执行以下功能:
- 提供安全屏障,防止客户端进程对 SGA 进行破坏性访问
- 充当通信机制,格式化信息请求、传递数据以及捕获并返回错误
- 转换和翻译数据,特别是在不同类型的计算机之间或与外部用户程序数据类型之间
Oracle 代码充当服务器,代表应用程序(客户端)执行数据库任务,例如从数据块中获取行。程序接口由几个部分组成,这些部分由 Oracle AI 数据库软件和特定于操作系统的软件提供。
- Program Interface Structure(程序接口结构)
程序接口由几个不同的组件组成。 - Program Interface Drivers(程序接口驱动程序)
驱动程序是一种传输数据的软件,通常通过网络传输。 - Communications Software for the Operating System(操作系统的通信软件)
将用户端连接到程序接口的 Oracle AI 数据库端的最低层软件是通信软件,由主机操作系统提供。
Program Interface Structure(程序接口结构)
程序接口由几个不同的组件组成。
这些组件包括:
- Oracle 调用接口 (OCI) 或 Oracle 运行时库 (SQLLIB)
- 程序接口的客户端或用户端
- 各种 Oracle Net Services 驱动程序(特定于协议的通信软件)
- 操作系统通信软件
- 程序接口的服务器端或 Oracle AI 数据库端(也称为 OPI)
程序接口的用户端和 Oracle AI 数据库端运行 Oracle 软件,驱动程序也是如此。
Program Interface Drivers(程序接口驱动程序)
驱动程序是一种传输数据的软件,通常通过网络传输。
驱动程序执行诸如连接、断开连接、发出错误信号以及测试错误等操作。驱动程序特定于通信协议。
始终存在一个默认驱动程序。您可以安装多个驱动程序,例如异步或 DECnet 驱动程序,并选择一个作为默认驱动程序,同时允许用户通过在连接时指定驱动程序来使用其他驱动程序。
不同的进程可以使用不同的驱动程序。一个进程可以使用不同的 Oracle Net Services 驱动程序与单个数据库或多个数据库建立并发连接。
另请参见:
- 有关选择、安装和添加驱动程序的详细信息,请参阅您的系统安装和配置指南
- 《Oracle AI Database Net Services Administrator's Guide》(《Oracle AI 数据库网络服务管理员指南》),了解 JDBC 驱动程序
Communications Software for the Operating System(操作系统的通信软件)
将用户端连接到程序接口的 Oracle AI 数据库端的最低层软件是通信软件,由主机操作系统提供。
DECnet、TCP/IP、LU6.2 和 ASYNC 就是例子。通信软件可以由 Oracle 提供,但通常从硬件供应商或第三方软件供应商处单独购买。
Overview of Oracle True Cache(Oracle True Cache 概述)
True Cache 是位于 Oracle AI 数据库前端的内存中只读缓存。
与 Oracle Active Data Guard 类似,True Cache 是主数据库的一个功能齐全的只读副本,不同之处在于它主要是无磁盘的。
现代应用程序通常需要大量的连接和快速、低延迟的数据访问。一种流行的做法是将缓存放置在数据库前端,因为应用程序通常执行的读取操作远多于更新操作,并且它们可以从缓存中读取而不会影响数据库性能。例如,航空订票系统在人们搜索航班时频繁读取数据,而这些数据与数据库中的数据相比不是最新的是可以接受的。只有当有人预订航班时,应用程序才需要访问最新数据。
与传统缓存不同,True Cache 会自动将最常访问的数据保留在缓存中,并保持缓存与主数据库、同一缓存中的其他对象以及其他缓存的一致性。它可以缓存所有 Oracle AI 数据库对象和数据类型,包括 JSON。
由于 True Cache 实现了 Oracle AI 数据库安全策略,因此您可以控制对缓存的访问。这使您能够缓存敏感数据(例如私人个人信息),而这些数据通常是您不会缓存的。
相关主题:
- 《Oracle True Cache User's Guide》(《Oracle True Cache 用户指南》)