一、Oracle客戶端與服務(wù)器端的通訊機制
1、OracleNet協(xié)議
如下圖所示,Oracle通過Oracle Net協(xié)議實現(xiàn)客戶端與服務(wù)器端的連接以及數(shù)據(jù)傳遞。OracleNet是同時駐留在Oracle數(shù)據(jù)庫服務(wù)器端和客戶端上的一個軟件層,它封裝了TCP/IP協(xié)議,負責建立與維護客戶端應(yīng)用程序到數(shù)據(jù)庫服務(wù)器的連接。
如下圖所示,客戶端發(fā)出的請求首先通過OracleNet協(xié)議轉(zhuǎn)換,轉(zhuǎn)換成可以通過網(wǎng)絡(luò)傳輸?shù)男畔ⅲㄟ^TCP/IP網(wǎng)絡(luò)將請求傳輸?shù)綌?shù)據(jù)庫服務(wù)器端;服務(wù)器端接受到客戶請求后要通過OracleNet協(xié)議轉(zhuǎn)換,將請求轉(zhuǎn)換成數(shù)據(jù)庫可以解釋執(zhí)行的本地指令,并在服務(wù)器端執(zhí)行(主要是一些輸入輸出操作),并將結(jié)果通過TCP/IP協(xié)議和OracleNet協(xié)議傳輸給客戶端顯示。
2、客戶端與服務(wù)器端的連接過程
在分析客戶端與服務(wù)器端的連接機制之前,先要定義兩個概念,一個是Oracle監(jiān)聽器,一個是Oracle網(wǎng)絡(luò)服務(wù)名。
Oracle數(shù)據(jù)庫服務(wù)器通過一個名為“OracleNet監(jiān)聽器”的組件接收來自客戶端的連接請求。監(jiān)聽器是位于服務(wù)器端的一個后臺進程,發(fā)送給數(shù)據(jù)庫的客戶端連接請求,首先被服務(wù)器端的監(jiān)聽器所偵聽,并將請求所轉(zhuǎn)交給對應(yīng)的數(shù)據(jù)庫實例,從而建立起客戶端與服務(wù)器的連接。連接建立后,客戶端與服務(wù)器端就可以直接進行通訊,不再需要監(jiān)聽器參與。
要實現(xiàn)監(jiān)聽器對客戶請求的監(jiān)聽,需要對監(jiān)聽器進行配置,包括監(jiān)聽端口、監(jiān)聽器所在數(shù)據(jù)庫的全局數(shù)據(jù)庫名稱、數(shù)據(jù)庫實例等信息。
Oracle網(wǎng)絡(luò)服務(wù)名是一個標識符,它代表著客戶端連接服務(wù)器的配置信息(實際上就是連接請求的內(nèi)容),包括數(shù)據(jù)庫主機地址、監(jiān)聽端口、全局數(shù)據(jù)庫名稱等內(nèi)容((有關(guān)全局數(shù)據(jù)庫、數(shù)據(jù)庫實例等,請參考Oracle數(shù)據(jù)庫安裝部分)。
如圖所示,客戶端與服務(wù)端的連接過程為:
(1)首先在服務(wù)器端有一個常駐的監(jiān)聽器(監(jiān)聽服務(wù)要打開)監(jiān)聽客戶端發(fā)出的連接請求。
(2)用戶在客戶端(企業(yè)服務(wù)器或SQL工具)輸入用戶名、口令及網(wǎng)絡(luò)服務(wù)名,或在SQL命令行中輸入類似“CONNECTusername/password@net_Service_name”的類似請求。
(3)客戶端查看網(wǎng)絡(luò)服務(wù)配置文件tnsname.ora,將網(wǎng)絡(luò)服務(wù)名映射為包含Oracle服務(wù)器地址、監(jiān)聽端口和全局數(shù)據(jù)庫名的連接描述符。
(4)客戶端根據(jù)連接描述符定位監(jiān)聽器,并通過網(wǎng)絡(luò)將連接信息傳遞給監(jiān)聽器。
(5)監(jiān)聽器查詢監(jiān)聽配置文件listener.ora,找出所要連接的數(shù)據(jù)庫服務(wù)器。
(6)客戶機和服務(wù)器開始通信。
二、監(jiān)聽器配置
1、添加和配置監(jiān)聽器
如下圖所示使用Oracle Net Configuration Asistant工具添加并配置服務(wù)器的監(jiān)聽器:
監(jiān)聽程序配置完成后,數(shù)據(jù)庫系統(tǒng)會自動啟動該監(jiān)聽器。
添加和配置監(jiān)聽器后也可以使用Oracle NetManager工具查看和修改監(jiān)聽器配置,如監(jiān)聽位置、監(jiān)聽器所服務(wù)的全局數(shù)據(jù)庫名稱等。如下圖所示:
對于本安裝,監(jiān)聽器配置信息記錄在E:\Oracle_Server\oracle\ora92\network\admin\listener.ora文件中。其主要內(nèi)容如下:
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)
)
)
三、客戶端工具的安裝與網(wǎng)絡(luò)服務(wù)的配置
可以在不同于數(shù)據(jù)庫主機的其它機器安裝客戶端工具,并通過配置客戶端網(wǎng)絡(luò)服務(wù),連接到數(shù)據(jù)庫服務(wù)器。客戶端安裝與配置過程如下圖所示(本安裝將客戶端安裝在了與數(shù)據(jù)庫同一臺機器的不同目錄中,模擬遠程訪問數(shù)據(jù)庫的情況):
在安裝了客戶端并配置了客戶端網(wǎng)絡(luò)服務(wù)名之后就可以從客戶端工具登錄和訪問遠端數(shù)據(jù)庫服務(wù)器了。對于本安裝,客戶端網(wǎng)絡(luò)服務(wù)配置記錄在E:\Oracle_Client\oracle\ora92\network\admin\tnsnames.ora文件中,其主要內(nèi)容如下:
REMOTEDB=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.6)(PORT =1521))
)
(CONNECT_DATA =
(SERVICE_NAME = mydb.bawei)
)
)
這樣,當在客戶端工具中輸入網(wǎng)絡(luò)服務(wù)名remotedb時,將被解析為數(shù)據(jù)庫地址、端口、全局數(shù)據(jù)庫名等信息,與輸入的用戶名、密碼一起發(fā)送到服務(wù)器端,由監(jiān)聽器接收,并與監(jiān)聽配置文件對照,將請求轉(zhuǎn)交給相應(yīng)的數(shù)據(jù)庫實例處理。
客戶端網(wǎng)絡(luò)服務(wù)可以使用客戶端的Oracle Net Manager工具進行修改,也可以添加新的客戶端網(wǎng)絡(luò)服務(wù)名。
需要指出的是:
服務(wù)器端的客戶工具(SQL PLUS、企業(yè)管理控制臺等)與數(shù)據(jù)庫服務(wù)的連接機制與遠程客戶端連接是一樣的。
在安裝完Oracle數(shù)據(jù)庫后,系統(tǒng)默認在數(shù)據(jù)庫服務(wù)器本地安裝了SQLPLUS等客戶端工具,而且在監(jiān)聽配置文件的相同位置E:\Oracle_Server\oracle\ora92\network\admin文件夾中默認提供了服務(wù)器端的網(wǎng)絡(luò)服務(wù)連接配置文件tnsnames.ora,其中包含一個與數(shù)據(jù)庫實例SID同名的網(wǎng)絡(luò)服務(wù)名配置,包括數(shù)據(jù)庫所在主機名或ip地址、監(jiān)聽端口、數(shù)據(jù)庫服務(wù)名(全局數(shù)據(jù)庫名)等。對于本安裝,該tnsnames.ora文件主要內(nèi)容如下:
MYDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = tsinghua-p5z3mm)(PORT =1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = mydb.bawei)
)
)
當使用數(shù)據(jù)庫服務(wù)器端的客戶工具時,和從遠程客戶機連接服務(wù)器一樣,也是根據(jù)輸入的用戶名、密碼及網(wǎng)絡(luò)服務(wù)名(或類似CONNECTusername/password@net_Service_name的SQL命令行),查找tnsnames.ora文件,找到網(wǎng)絡(luò)連接服務(wù)名等于net_Service_name的一項,并獲取數(shù)據(jù)庫主機地址、監(jiān)聽端口、全局數(shù)據(jù)庫名等信息。
該請求信息同樣被傳輸?shù)奖O(jiān)聽端口,監(jiān)聽器再將該信息與同在文件夾E:\Oracle_Server\oracle\ora92\network\admin中的listener.ora監(jiān)聽器配置文件對照,如果listener.ora監(jiān)聽器配置文件中包含匹配的項,則將該請求轉(zhuǎn)給對應(yīng)的數(shù)據(jù)庫實例。
由此可見,服務(wù)器端的客戶端工具與數(shù)據(jù)庫服務(wù)的連接與遠程客戶端連接一樣,執(zhí)行了相同的的過程。
實際上,服務(wù)器端的客戶工具是通過服務(wù)器端tnsnames.ora和listener.ora進行驗證并建立連接;遠程客戶端是通過客戶端的tnsnames.ora和服務(wù)器端的listener.ora執(zhí)行驗證和建立連接。
您可能感興趣的文章:- 利用Oracle數(shù)據(jù)庫發(fā)送郵件的實例代碼
- Oracle 存儲過程發(fā)送郵件實例學(xué)習(xí)
- oracle 發(fā)送郵件 實現(xiàn)方法
- pl/sql連接遠程oracle服務(wù)器的配置教程
- oracle數(shù)據(jù)庫tns配置方法詳解
- Oracle 11g 客戶端的安裝和配置的圖文教程
- Oracle Database 10g數(shù)據(jù)庫安裝及配置教程
- Oracle 配置連接遠程數(shù)據(jù)庫的教程
- Oracle 10g安裝配置方法圖文教程
- ORACLE 配置郵件服務(wù)器操作示例