Oracle體系結構理解(2)
專用服務器與共享服務器
1.專用服務器
在我登陸時,Oracle總是會為我創建一個新的進程來連接Oracle服務器,這樣配置的服務器叫做Oracle專用服務器,這個產生的服務器進程會在SGA生存周期裡專門為我的請求服務。也就是說,每當我打開一個會話,則會產生一個進程,會話與服務器的對應關系是一對一的映射關系。
客戶端 --> 1521端口:監聽器 --> 生成進程 --> 連接實例 --> 數據庫
而實例是通過parameter文件查找control文件的位置,來構建起與數據庫進行數據交換的橋梁的。
2.共享服務器
在共享服務器當中,Oracle使用共享進程池來為大量的用戶提供服務(類似排隊的機制)。
不像專用服務器,我們不必每次為連接過來的客戶端專門打開一個進程進行服務,如果我有10000個用戶同時訪問數據庫,那麼我們要打開10000個進程,這會使得我的Oracle服務器資源損耗巨大,甚至將服務器壓垮。但是我在進程共享池裡打開100個進程供所有用戶使用,系統在管理進程的時候,由於進程數不大,提高管理效率,而且不會由於負載過大而造成崩潰的狀態。
但是為了有效的管理這100個進程,需要引入一個新的概念叫做調度器來管理,當客戶端對服務器進行訪問,監聽器收到客戶端請求,監聽器通過調度器了解到這100個進程中其中一個進程正在空閒當中,那麼就會回復客戶端哪個進程正在閒置並且進行訪問。然後訪問實例,進而訪問數據庫。
客戶端 --> 1521端口:監聽器 -->調用調度器 -->發現18888進程正在閒置 --> 回復客戶端通過18888進程進行訪問 --> 客戶端通過18888端口訪問實例 --> 數據庫
3.TNS透明網絡底層
tns是處理Oracle遠程訪問的基本軟件,查看一下Oracle工作目錄下的tnsnames.ora,在$ORACLE_HOME/network/admin/下。查看一下內容:
ORCL =
( DESCRIPTION =
( ADDRESS =
( PROTOCOL = TCP)
...
))
這裡配置著客戶端要訪問哪個主機的哪個端口,使用哪一個實例來訪問底層數據庫。
在Server端也會存放著Client端的相關信息,類似於Linux的ssh服務ssh_know_hosts文件。