如果現(xiàn)在使用一個(gè)專(zhuān)用服務(wù)器登錄數(shù)據(jù)庫(kù),則會(huì)創(chuàng)建一個(gè)新的進(jìn)程,提供專(zhuān)門(mén)的服務(wù):
現(xiàn)在可以看到,線(xiàn)程有20個(gè)而不是19個(gè),多加的這個(gè)線(xiàn)程就是我們的專(zhuān)用服務(wù)器進(jìn)程(稍后會(huì)介紹專(zhuān)用服務(wù)器進(jìn)程的更多內(nèi)容)。注銷(xiāo)時(shí),這個(gè)額外的線(xiàn)程也沒(méi)有了。在UNIX上,可以看到正在運(yùn)行的Oracle進(jìn)程列表上會(huì)多加一個(gè)進(jìn)程,這就是我們的專(zhuān)用服務(wù)器。
再回過(guò)來(lái)看前面的那個(gè)圖。現(xiàn)在如果按最常用的配置連接Oracle,則如圖2-2所示。
圖2-2 典型的專(zhuān)用服務(wù)器配置
如前所述,在我登錄時(shí),Oracle總會(huì)為我創(chuàng)建一個(gè)新的進(jìn)程。這通常稱(chēng)為專(zhuān)用服務(wù)器配置,因?yàn)檫@個(gè)服務(wù)器進(jìn)程會(huì)在我的會(huì)話(huà)生存期中專(zhuān)門(mén)為我服務(wù)。對(duì)于每個(gè)會(huì)話(huà),都會(huì)出現(xiàn)一個(gè)新的專(zhuān)用服務(wù)器,會(huì)話(huà)與專(zhuān)用服務(wù)器之間存在一對(duì)一的映射。按照定義,這個(gè)專(zhuān)用服務(wù)器不是實(shí)例的一部分。我的客戶(hù)進(jìn)程(也就是想要連接數(shù)據(jù)庫(kù)的程序)會(huì)通過(guò)某種網(wǎng)絡(luò)通道(如TCP/IP socket)與這個(gè)專(zhuān)用服務(wù)器直接通信,并由這個(gè)服務(wù)器進(jìn)程接收和執(zhí)行我的SQL。如果必要,它會(huì)讀取數(shù)據(jù)文件,并在數(shù)據(jù)庫(kù)的緩存中查找我要的數(shù)據(jù)。也許它會(huì)完成我的更新語(yǔ)句,也可能會(huì)運(yùn)行我的PL/SQL代碼。這個(gè)服務(wù)器進(jìn)程的主要目標(biāo)就是對(duì)我提交的SQL調(diào)用做出響應(yīng)。