一、Oracle用戶端與伺服器端的通訊機制
1、OracleNet協議
如所示,Oracle通過Oracle Net協議實現用戶端與伺服器端的串連以及資料傳遞。OracleNet是同時駐留在Oracle資料庫伺服器端和用戶端上的一個軟體層,它封裝了TCP/IP協議,負責建立與維護用戶端應用程式到資料庫伺服器的串連。
如所示,用戶端發出的請求首先通過OracleNet協議轉換,轉換成可以通過網路傳輸的資訊,通過TCP/IP網路將請求傳輸到資料庫伺服器端;伺服器端接受到客戶請求後要通過OracleNet協議轉換,將請求轉換成資料庫可以解釋執行的本地指令,並在伺服器端執行(主要是一些輸入輸出操作),並將結果通過TCP/IP協議和OracleNet協議傳輸給用戶端顯示。
2、用戶端與伺服器端的串連過程
在分析用戶端與伺服器端的串連機制之前,先要定義兩個概念,一個是Oracle監聽器,一個是Oracle網路服務名。
Oracle資料庫伺服器通過一個名為“OracleNet監聽器”的組件接收來自用戶端的串連請求。監聽器是位於伺服器端的一個後台進程,發送給資料庫的用戶端串連請求,首先被伺服器端的監聽器所偵聽,並將請求所轉交給對應的資料庫執行個體,從而建立起用戶端與伺服器的串連。串連建立後,用戶端與伺服器端就可以直接進行通訊,不再需要監聽器參與。
要實現監聽器對客戶請求的監聽,需要對監聽器進行配置,包括監聽連接埠、監聽器所在資料庫的全域資料庫名稱、資料庫執行個體等資訊。
Oracle網路服務名是一個標識符,它代表著用戶端串連伺服器的配置資訊(實際上就是串連請求的內容),包括資料庫主機地址、監聽連接埠、全域資料庫名稱等內容((有關全域資料庫、資料庫執行個體等,請參考Oracle資料庫安裝部分)。
,用戶端與服務端的串連過程為:
(1)首先在伺服器端有一個常駐的監聽器(監聽服務要開啟)監聽用戶端發出的串連請求。
(2)使用者在用戶端(企業伺服器或SQL工具)輸入使用者名稱、口令及網路服務名,或在SQL命令列中輸入類似“CONNECTusername/password@net_Service_name”的類似請求。
(3)用戶端查看網路服務設定檔tnsname.ora,將網路服務名映射為包含Oracle伺服器位址、監聽連接埠和全域資料庫名的串連描述符。
(4)用戶端根據串連描述符定位監聽器,並通過網路將串連資訊傳遞給監聽器。
(5)監聽器查詢監聽設定檔listener.ora,找出所要串連的資料庫伺服器。
(6)客戶機和伺服器開始通訊。
二、監聽器配置
1、添加和配置監聽器
如所示使用Oracle Net Configuration Asistant工具添加並設定管理員的監聽器:
監聽程式配置完成後,資料庫系統會自動啟動該監聽器。
添加和配置監聽器後也可以使用Oracle NetManager工具查看和修改監聽器配置,如監聽位置、監聽器所服務的全域資料庫名稱等。如所示:
對於本安裝,監聽器配置資訊記錄在E:\Oracle_Server\oracle\ora92\network\admin\listener.ora檔案中。其主要內容如下:
LISTENER=
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = tsinghua-p5z3mm)(PORT =1521))
)
)
)
SID_LIST_LISTENER =
(SID_LIST=
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = E:\Oracle_Server\oracle\ora92)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = mydb.bawei)
(ORACLE_HOME = E:\Oracle_Server\oracle\ora92)
(SID_NAME = mydb)
)
)
三、用戶端工具的安裝與網路服務的配置
可以在不同於資料庫主機的其它機器安裝用戶端工具,並通過配置用戶端網路服務,串連到資料庫伺服器。用戶端安裝與配置過程如所示(本安裝將用戶端安裝在了與資料庫同一台機器的不同目錄中,類比遠端存取資料庫的情況):
在安裝了用戶端並配置了用戶端網路服務名之後就可以從用戶端工具登入和訪問遠端資料庫伺服器了。對於本安裝,用戶端網路服務配置記錄在E:\Oracle_Client\oracle\ora92\network\admin\tnsnames.ora檔案中,其主要內容如下:
REMOTEDB=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.6)(PORT =1521))
)
(CONNECT_DATA =
(SERVICE_NAME = mydb.bawei)
)
)
這樣,當在用戶端工具中輸入網路服務名remotedb時,將被解析為資料庫地址、連接埠、全域資料庫名等資訊,與輸入的使用者名稱、密碼一起發送到伺服器端,由監聽器接收,並與監聽設定檔對照,將請求轉交給相應的資料庫執行個體處理。
用戶端網路服務可以使用用戶端的Oracle Net Manager工具進行修改,也可以添加新的用戶端網路服務名。
需要指出的是:
伺服器端的客戶工具(SQL PLUS、企業管理主控台等)與資料庫服務的串連機制與遠程用戶端串連是一樣的。
在安裝完Oracle資料庫後,系統預設在資料庫伺服器本地安裝了SQLPLUS等用戶端工具,而且在監聽設定檔的相同位置E:\Oracle_Server\oracle\ora92\network\admin檔案夾中預設提供了伺服器端的網路服務串連設定檔tnsnames.ora,其中包含一個與資料庫執行個體SID同名的網路服務名配置,包括資料庫所在主機名稱或ip地址、監聽連接埠、資料庫服務名(全域資料庫名)等。對於本安裝,該tnsnames.ora檔案主要內容如下:
MYDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = tsinghua-p5z3mm)(PORT =1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = mydb.bawei)
)
)
當使用資料庫伺服器端的客戶工具時,和從遠程客戶機串連伺服器一樣,也是根據輸入的使用者名稱、密碼及網路服務名(或類似CONNECTusername/password@net_Service_name的SQL命令列),尋找tnsnames.ora檔案,找到網路連接服務名等於net_Service_name的一項,並擷取資料庫主機地址、監聽連接埠、全域資料庫名等資訊。
該請求資訊同樣被傳輸到監聽連接埠,監聽器再將該資訊與同在檔案夾E:\Oracle_Server\oracle\ora92\network\admin中的listener.ora監聽器設定檔對照,如果listener.ora監聽器設定檔中包含匹配的項,則將該請求轉給對應的資料庫執行個體。
由此可見,伺服器端的用戶端工具與資料庫服務的串連與遠程用戶端串連一樣,執行了相同的的過程。
實際上,伺服器端的客戶工具是通過伺服器端tnsnames.ora和listener.ora進行驗證並建立串連;遠程用戶端是通過用戶端的tnsnames.ora和伺服器端的listener.ora執行驗證和建立串連。