日期:2014-05-16  浏览次数:20383 次

Oracle体系结构之-连接配置结构

Oracle的连接可以分成两种:

一、专用服务器连接结构(Dedicated Server):

在这种方式中,对于每一个用户,其数据库应用是由用户进程所运行,并有一个专用服务器进程为之服务,执行Oracle服务器代码。



专用服务器的工作过程:
1)客户端通过oracle net向监听器发连接请求
2)监听器收到请求并将此请求导向服务器,服务器向用户返回一个连接成功信息,并为此用户创建一个专用连接
3) 客户直接与该专用服务器进程进行交互,处理SQL,并且服务器在该会话的PGA中建立一个专用SQL区。

二、多线程服务器连接结构(Multithread Server)

在这种方式中,一个或多个客户应用程序共享一组服务器进程,与专用服务器不同的是,客户和服务器进程不是一对一的关系,而是由调度进程对多个服务器进程进行调度,以服务来自客户应用的连接请求




专用服务器结构中,一个服务器进程只为一个客户服务。这样的话,如果有一千个客户,就需要有一千个对应的服务器进程,就会耗费大量的系统资源。为了支持对于可伸缩性的需求,在oracle7中引入了多线程服务器(MTS,也称为共享服务器)。下面说明共享服务器建立连接的过程,以级与建立专用服务器连接过程的不同:

1) 客户通过网络与监听器联系
2) 监听器检测到请求,基于Oracle net结构来确定是否与多线程服务器连接。监听器将客户请求导向相应的调度程序
3) 监听器通过使客户与调度程序了解对方的网络地址,从面完成了双方的介绍。
4) 一旦客户与调度程序知道如何找到对方,它们就直接通信,不要需要监听器。客户直接将操作请求发送给调度程序
5) 调度程序将客户请求放在SGA的请求队列中。
6) 下一个可用的共享服务器进程从请求队列中读取请求,进行相应的工作。
7)?共享服务器进程将结果存放在提交相应请求的调度程序的响应队列中
8)?度程序从响应队列中读取数据并将结果送组客户

补充:
==============================================================================
共享服务器连接和专用服务器连接之间有一个重大区别,与数据库连接的客户进程不会与共享服务器直接通信,但专用服务器则不然,客户进程会与专用服务器直接通信。

之所以不能与共享服务器直接对话,原因就在于这个服务器进程是共享的。为了共享这些进程,还需要另外一种机制,通过这种机制才能与服务器进程“对话”。为此,Oracle使用了一个或一组称为“调度器”的进程。客户进程通过网络与一个调度器进程通信。这个调度进程将客户的请求放入SGA中的请求队列。第一个空闲的共享服务器会得到这个请求,并进行处理。完成这个命令后,共享服务器会把响应放在在原调度器(即接受请求的调度器)的响应队列中。调度器进程一直在监听这个队列,发现有结果后,就会把结果传给用户。
==============================================================================

注:本文内容均参考自CSDN网友方友松的技术Blog,作者Blog地址为:http://blog.csdn.net/truexf/
??????? 及Tom kyte的《Oracle9i&10g编程艺术》人民邮电出版社