Oracle 应用程序体系结构概述
客户端/服务器体系结构概述
组成部分如下:
- 客户端运行数据库应用程序,例如 SQL*Plus 或 Visual Basic 数据输入程序,它访问数据库中的信息,并与某个用户进行交互。
- 服务器运行 Oracle 数据库软件,并处理对 Oracle 数据库进行并发、共享的数据访问所需的功能。
分布式处理
使用多个主机来处理单个任务被称为分布式处理。
图 16-1 客户端/服务器体系结构和分布式处理
Description of "Figure 16-1 Client/Server Architecture and Distributed Processing"
图 16-2 客户端/服务器体系结构和分布式数据库
Description of "Figure 16-2 Client/Server Architecture and Distributed Database"
客户端/服务器体系结构的优点
好处包括:
- 客户端应用程序不负责执行数据处理。他们从用户请求输入、从服务器请求数据、然后使用客户端工作站或终端(例如,使用图形或电子表格)的显示功能,分析并显示这些数据。
- 客户端应用程序不依赖于数据的物理位置。即使数据被移动或分发到其他数据库服务器, 应用程序不用修改或只需很少修改,就可以继续正常工作。
- Oracle 数据库利用其底层操作系统的多任务和共享内存设施。其结果是,它为客户端应用程序提供了尽可能高的并发性、数据完整性和性能。
- 客户端工作站或终端可以对数据显示进行优化(例如,通过提供图形和鼠标支持),而服务器可以对数据处理和存储进行优化(例如,通过拥有大量内存和磁盘空间)。
- 在网络化的环境中, 您可以使用廉价的客户端工作站来有效地访问服务器上的远程数据。
- 随着您的系统规模增大,数据库可以扩展。您可以添加多个服务器,以便能够通过网络分散数据库处理负载(水平扩展),或将数据库移到小型机或大型机,以利用更大型系统的性能(垂直扩展)。在任何一种情况下,对数据和应用程序的维护基本不需要进行修改或只需要很少的修改,因为 Oracle 数据库在多个系统之间是可移植的。
- 在网络化的环境中,共享数据存储在服务器上,而不是在所有计算机上,这使管理并发访问变得更容易、更高效。
- 在网络化的环境中,客户端应用程序使用 SQL 语句向服务器提交数据库请求。服务器收到请求后,会处理每个 SQL 语句并将结果返回给客户端。由于只有请求及其结果在网络上传输,网络通信量被最小化了。
另见:
《Oracle Database Administrator’s Guide》了解分布式数据库的更多信息
多层体系结构概述
这种体系结构使用应用程序服务器来:
-
验证客户端(比如 Web 浏览器) 凭据
-
连接到数据库服务器
-
执行请求的操作
图 16-3 显示了一个多层体系结构的示例。
客户端
客户端向数据库服务器发起一个请求,以在其上执行某个操作。
应用程序服务器
数据库服务器
在统一审计中,数据库可以将应用程序上下文(应用程序特定的名称-值)附加到统一审计跟踪中的记录。您可以配置数据库将哪些应用程序上下文写入数据库审计记录。
面向服务的体系结构 (SOA)
SOA 服务通常是作为可通过 HTTP 协议访问的 Web 服务来实现的。他们基于 XML 标准,如 WSDL 和 SOAP 等。
-
提交 SQL 或 XQuery 查询,并按 XML 接收其结果
-
调用独立 PL/SQL 函数,并接收其结果
-
调用 PL/SQL 包函数,并接收其结果
数据库的 Web 服务提供了一个简单的方法,以将 Web 服务添加到一个应用程序环境,而不需要应用程序服务器。然而, 通过应用程序服务器(如Oracle 融合中间件) 调用 Web 服务,可在 SOA 环境中提供安全性、可扩展性、UDDI 注册和可靠消息等。但是,由于数据库的 Web 服务能够方便地与 Oracle 融合中间件集成,他们可能有助于优化你的 SOA 解决方案。
另见:
-
《Oracle XML Developer's Kit Programmer's Guide》关于如何启用和使用数据库的 Web 服务的信息
-
Oracle 融合中间件文档关于 SOA 和 Web 服务的详细信息
网格体系结构概述
另见:
"Overview of Grid Computing"关于服务器和存储网格的更详细的信息
Oracle Net服务体系结构概述
Oracle 网络服务是一套网络组件,在分布式的异构计算环境中,提供企业范围的连接解决方案。
Oracle 网络服务使用支持广泛范围的网络的通信协议或应用编程接口(API),以提供分布式数据库和分布式处理。建立网络会话后,Oracle 网络服务将作为客户端应用程序和数据库之间的数据传递者,建立和维持一个连接,并为其交换消息。Oracle 网络服务之所以可以执行这些任务,是因为它存在于网络中的每台计算机上。
另见:
《Oracle Database Net Services Administrator's Guide》关于 Oracle 网络体系结构的概述
Oracle 网络服务是如何工作的
Oracle数据库协议接受来自Oracle应用程序接口的SQL语句,然后将它们打包传输到Oracle数据库。
传输通过受支持的行业标准高级协议或API进行。从 Oracle 数据库返回的结果会使用同样高度级别的通信机制打包。此工作的发生独立于网络操作系统。
另见:
《Oracle Database Net Services Administrator's Guide》有关 Oracle 网络服务如何工作的详细信息
Oracle 网络监听器
下图显示了分别位于两台独立主机上的两个数据库。 为该数据库环境服务的是分别位于另外两台独立主机上的两个监听器。 在每个数据库实例上运行的 PMON 进程都与这两个监听器进行通信,以注册其数据库。
客户端通过一个监听器建立连接的基本步骤如下:
-
客户端进程或另一个数据库请求一个连接。
- 监听器选择一个适当的服务处理程序, 来为客户端请求提供服务,并将请求转发到处理程序。
- 客户端进程直接连接到服务处理程序。 之后侦听器就不再参与其间的通信了。
服务名
另见:
《Oracle Database Net Services Administrator's Guide》了解命名方法的更多信息
服务注册
在Oracle Net中,服务注册是LREG进程向监听器动态地将注册实例信的功能。
-
由数据库提供的数据库服务名称
-
与服务相关联的数据库实例名称,及其当前负载和最大负载
- 对实例可用的服务处理程序(分派器和专用服务器),包括其类型、协议地址,当前负载和最大负载
另见:
-
《Oracle Database Net Services Administrator's Guide》了解服务注册的更多信息
-
《Oracle Real Application Clusters Administration and Deployment Guide》了解在 Oracle RAC 中的实例注册和客户端/服务连接
专用服务器体系结构
图 16-7 Oracle 数据库使用的专用服务器进程
Description of "Figure 16-7 Oracle Database Using Dedicated Server Processes"
- 如果客户端进程和专用服务器进程在同一台计算机上运行,则程序接口使用主机操作系统的进程间通信机制来执行其工作。
- 如果客户端进程和专用服务器进程在不同的计算机上运行,则由程序接口提供程序之间的通信机制(例如,网络软件和 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 语句的一部分。
- 分派器将请求放入请求队列,下一个可用的共享服务器进程会从请求队列取出该请求。
请求队列位于 SGA 中,能被实例的所有分派器进程访问。
- 共享服务器进程检查公共请求队列, 按先进先出的原则取出一个新请求。
- 一个共享服务器进程从队列中取出一个请求,并对数据库发出所有必要的调用以完成该请求。一个不同的服务器进程可能会处理数据库中的每个调用。因此,解析查询、读取第一行、读取下一行和关闭结果集等每个请求都可能会由不同的共享服务器来处理。
- 当服务器进程完成了请求时,它将响应结果置于分派器的响应队列。每个分派器都有它自己的响应队列。
-
分派器将已完成的请求结果返回给适当客户端进程。
另见:
分派器进程(Dnnn)
分派器进程使得客户端进程可以共享数量有限的服务器进程。
分派器进程建立通信的过程如下所示:
- 当实例启动时,网络监听器进程被打开,并建立一条通过用户连接到 Oracle 数据库的通信路径。
-
每一个分派器进程将其监听连接请求的地址提供给监听器进程。
必须至少为每个数据库客户端将使用的网络协议配置并启动一个分派器进程。 - 当客户端进程发出连接请求时,监听器将确定客户端进程是否应使用共享服务器进程:
- 如果监听器确定需要使用一个共享服务器进程,则监听器返回负载最轻的分派器进程的地址, 客户端进程则直接连接到该分派器。
- 如果客户端进程不能与分派器进行通信,或者客户端进程请求的是一个专用服务器, 则监听器将创建专用服务器,并建立一个适当的连接。
-
另见:
《Oracle Database Net Services Administrator's Guide》了解如何配置分派器
共享服务器进程(Snnn)
在共享服务器配置中,每个共享服务器进程为多个客户端请求服务。
受限制的共享服务器操作
当连接到一个分派器进程时, 无法执行特定的管理活动, 包括关闭或启动实例和执行介质恢复等。
这些活动通常需要在具有管理员权限的连接时执行。若要在使用共享服务器配置的系统中以管理员权限来连接,则必须指定您要使用专用服务器进程。
另见:
《Oracle Database Net Services Administrator's Guide》关于正确的连接字符串语法
数据库驻留连接池
DRCP 提供了以下优点:
-
提供一个中间层连接池,以在中间层进程的线程之间共享连接。
- 使得数据库连接能在多个中间层进程之间共享。这些中间层进程可能在相同或不同的中间层主机上。
- 显著减少为支持众多客户端连接所需的关键数据库资源。例如,DRCP 可减少数据库的内存需求,并大大提高数据库和中间层的可扩展性。可用的服务器池还可以减少重新创建客户端连接的成本。
- 为多进程、 单线程的应用程序服务器体系结构提供连接池,如不能做中间层连接池的 PHP 和 Apache 等。
程序接口概述
程序接口是一个数据库应用程序和 Oracle 数据库之间的软件层。
-
提供一个安全屏障,以防止客户端进程对 SGA 的破坏性访问
- 作为一种通信机制,格式化请求的信息、传递数据和捕获并返回错误
- 在不同类型的计算机之间转换数据或将其翻译为外部用户程序数据类型
程序接口结构
程序接口由几个不同的组件组成。
这些组件包括:
-
Oracle 调用接口(OCI)或 Oracle 运行时库 (SQLLIB)
-
程序接口的客户端或用户端
-
各种 Oracle 网络服务驱动程序(特定协议通信软件)
-
操作系统通信软件
-
程序接口的服务器端或 Oracle 数据库端(也称为 OPI)
用户端和程序接口的 Oracle 数据库端,都运行 Oracle 软件的驱动程序。
程序接口驱动程序
驱动程序通常是跨越网络传输数据的软件。
驱动执行如连接、断开连接、发出错误信号、并测试错误等操作。驱动程序是特定于通信协议的。
默认驱动程序始终存在。您可以安装多个驱动程序,如异步驱动程序或DECnet 驱动程序,并选择一个作为默认的驱动程序,但允许用户通过在连接时指定一个驱动程序来使用其他驱动程序。
另见:
- 您系统的安装和配置指南,关于选择、安装、及添加驱动程序的详细信息
-
《Oracle Database Net Services Administrator's Guide》了解 JDBC 驱动程序
操作系统的通信软件