11GConcepts(翻译第十五章)ProcessArchitecture(进程体系结构)(一)

2014-11-24 09:11:56 · 作者: · 浏览: 12

第十五章Process Architecture(进程体系结构)

本章讨论了Oracle数据库的进程。

这一章包含下面小节:

·Introduction to Processes

·Overview of Client Processes

·Overview of Server Processes

·Overview of Background Processes

Introduction to Processes(进程介绍)

一个进程就是一个操作系统的机制,它可以运行连续的步骤。这个机制是依赖于操作系统的。举个例子,在Linux上Oracle的一个后台进程就是一个linux进程。在windows上,一个Oracle后台进程就是oracle.exe进程中的一个线程而已。

通过进程去运行代码模块。所有连接Oracle数据库的用户,必须运行以下模块来访问数据库实例:

·应用程序或Oracle数据库实用工具

一个数据库用户运行数据库应用,如预编译的程序或数据库工具如SQL*Plus,它们发出SQL语句到数据库。

·Oracle数据库代码

每个用户有为其运行的Oracle数据库代码,以解释和处理应用程序的SQL语句。

一个进程正常在其私有的内存区域中运行。绝大多数进程会周期性写一个相关的trace file。

Multiple-Process Oracle Database Systems(多进程Oracle数据库系统

Multiple-process Oracle(同样被成为multiuser(多用户)数据库)使用一些进程去运行Oracle数据库代码的不同部分,以及额外附加一些进程提供给用户(要么是一个进程服务一个用户,要么是一个或个多个进程共享处理多个用户)。绝大多数数据库就的多用户的,因为一个数据库主要的优点就是管理多个用户同时对某数据发出请求。

每个数据库instance的进程执行一个特别的工作。通过将数据库的工作拆分,然后放到一些进程,多个用户和应用程序就可以同时连接到一个Instance,而系统还会提供很好的性能。

Types of Processes(进程的类型)

一个数据库instance(实例)包含这些类型的进程,或者说与这些进程类型进行交互。

·Client processes(客户端进程)运行引用或者Oracle工具代码

·Oracle processes(Oracle进程)运行Oacle数据库代码,Oracle processes包括下面两个子类型:

OBackground processes(后台进程)和实例一起启动,执行一些维护任务比如执行instance recovery,清理进程,写redo buffers 到磁盘等等。

OServer processes(服务进程)执行基于client请求的工作

举个例子,这些进程解析SQL查询,将它们放到sharedpool,为每个查询创建和执行一个查询计划,以及将buffer 从 buffercache 读出 或者从磁盘中读出。

注意:server process,以及这些进程分配的内存,都是运行在instance中的。Instance在server processes停止后,依然是运行的。

OSlave processes(从属进程)为一个background或server 进程执行额外的任务。

进程结构的变化依赖与操作系统以及 对数据库可选项的选择。举个例子,连接用户的代码,可以被设置为 dedicated server或shared server连接模式。在shared server体系结构,每个server 进程上运行的数据库代码可以服务于多个client 进程

下午显示了一个SGA和后台进程使用dedicated(专用)服务连接模式。应用是通过client process运行的,它和dedicated server进程不同,server进程是运行着数据库的代码。每个client进程都有它自己的server 进程(server进程有自己的PGA)。

\

Overview of Client Processes(客户端进程概述)

当一个用户运行一个应用程序类似 Pro*C程序或SQL*Plus,操作系统会创建一个client进程(有些时候也叫user 进程)来运行用户的应用。该Client应用程序有已经链接的Oracle数据库类库,这个类库提供与数据库进行通讯所需的APIs

Client and Server Processes(客户进程以及服务进程)

Client进程和Oracle 进程有很重要的不同,Oracle进程直接与实例进行交互的。服务于client进程的Oracle进程可以在SGA中读和写,而client 进程却不行。一个client进程可以运行在数据库主机以外的主机上,而Oracle进程不行。

举个栗子,假设一个用户在client主机上运行了SQL*Plus 以及通过网络连接到在不同主机上的数据库sample(数据库实例还没有启动):

SQL> CONNECT SYS@inst1 AS SYSDBA

Enter password: *********

Connected to an idle instance.

在client主机上,查找进程为sqlplus或sample 将只显示sqlplus进程:

% ps -ef | grep -e sample -e sqlplus | grep -v grep
clientuser 29437 29436  0 15:40 pts/1    00:00:00 sqlplus           as sysdba

在服务器主机上,查询进程为sqlplus或sample将显示一个非本地连接的服务进程:

% ps -ef | grep -e sample -e sqlplus | grep -v grep
serveruser 29441     1  0 15:40          00:00:00 oraclesample (LOCAL=NO)

Connections and Sessions(连接和会话)

一个Connection(连接)是在client 进程以及database instance之间的物理连接。一个连接路径是通过使用进程间的连接机制或网络软件 建立起来的。基本上,一个连接发生在 一个client进程 和一个server process之间,或一个client进程 和一个 dispatcher(调度器)之间,但它通常可以在client 进程和Oracle Connection Manager(CMAN)之间建立。

一个session(会话)是一个数据库实例中的一个逻辑的存在,它代表一个当前用户登录到数据库的状态。举个栗子,当一个用户/密码被数据库验证通过时,会建立一个session。一个session存在时间为从验证通过一直到用户disconnect或者退出数据库应用程序。

一个单独的连接,可以有0,1,乃至多个session建立其上。这些session之间是独立的:一个session 提交操作,不会影响其他session中的事务。

注意:如果OracleNET connection pooling(连接池,共享模式的东西)配置了,那么也有可能出现连接断开,但是session不受影响

可以有多个session同时存在,且都是一个数据库用户。如下图显示,用户hr可以有多个连接。在专有连接模式中,数据库会为每个connecti