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編程藝術》人民郵電出版社