oracle 客戶端與伺服器端的關係
一、Oracle客戶端與伺服器端的通訊機制
1、Oracle Net協議
如下圖所示,Oracle通過Oracle Net協議實現客戶端與伺服器端的連線以及資料傳遞。Oracle Net是同時駐留在Oracle資料庫伺服器端和客戶端上的一個軟體層,它封裝了TCP/IP協議,負責建立與維護客戶端應用程式到資料庫伺服器的連線。
如下圖所示,客戶端發出的請求首先通過Oracle Net協議轉換,轉換成可以通過網路傳輸的資訊,通過TCP/IP網路將請求傳輸到資料庫伺服器端;伺服器端接受到客戶請求後要通過Oracle Net協議轉換,將請求轉換成資料庫可以解釋執行的本地指令,並在伺服器端執行(主要是一些輸入輸出操作),並將結果通過TCP/IP協議和Oracle Net協議傳輸給客戶端顯示。
2、客戶端與伺服器端的連線過程
在分析客戶端與伺服器端的連線機制之前,先要定義兩個概念,一個是Oracle監聽器,一個是Oracle網路服務名。
Oracle資料庫伺服器通過一個名為“Oracle Net監聽器”的元件接收來自客戶端的連線請求。監聽器是位於伺服器端的一個後臺程式,傳送給資料庫的客戶端連線請求,首先被伺服器端的監聽器所偵聽,並將請求所轉交給對應的資料庫例項,從而建立起客戶端與伺服器的連線。連線建立後,客戶端與伺服器端就可以直接進行通訊,不再需要監聽器參與。
要實現監聽器對客戶請求的監聽,需要對監聽器進行配置,包括監聽埠、監聽器所在資料庫的全域性資料庫名稱、資料庫例項等資訊。
Oracle網路服務名是一個識別符號,它代表著客戶端連線伺服器的配置資訊(實際上就是連線請求的內容),包括資料庫主機地址、監聽埠、全域性資料庫名稱等內容((有關全域性資料庫、資料庫例項等,請參考Oracle資料庫安裝部分)。
如圖所示,客戶端與服務端的連線過程為:
(1)首先在伺服器端有一個常駐的監聽器(監聽服務要開啟)監聽客戶端發出的連線請求。
(2)使用者在客戶端(企業伺服器或SQL工具)輸入使用者名稱、口令及網路服務名,或在SQL命令列中輸入類似“CONNECT
username/password@net_Service_name”的類似請求。
(3)客戶端檢視網路服務配置檔案tnsname.ora,將網路服務名對映為包含Oracle伺服器地址、監聽埠和全域性資料庫名的連線描述符。
(4)客戶端根據連線描述符定位監聽器,並通過網路將連線資訊傳遞給監聽器。
(5)監聽器查詢監聽配置檔案listener.ora,找出所要連線的資料庫伺服器。
(6)客戶機和伺服器開始通訊。
二、監聽器配置
1、新增和配置監聽器
如下圖所示使用Oracle Net Configuration Asistant工具新增並配置伺服器的監聽器:
監聽程式配置完成後,資料庫系統會自動啟動該監聽器。
新增和配置監聽器後也可以使用Oracle Net Manager工具檢視和修改監聽器配置,如監聽位置、監聽器所服務的全域性資料庫名稱等。如下圖所示:
對於本安裝,監聽器配置資訊記錄在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資料庫後,系統預設在資料庫伺服器本地安裝了SQL
PLUS等客戶端工具,而且在監聽配置檔案的相同位置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)
)
)
當使用資料庫伺服器端的客戶工具時,和從遠端客戶機連線伺服器一樣,也是根據輸入的使用者名稱、密碼及網路服務名(或類似CONNECT username/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執行驗證和建立連線。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29654823/viewspace-1198165/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Easyvision中的伺服器與客戶端伺服器客戶端
- Oracle 客戶端安裝Oracle客戶端
- aix安裝oracle客戶端AIOracle客戶端
- Oracle 客戶端生成AWR方法Oracle客戶端
- 4.1.7.2.5 與快速應用程式通知整合的Oracle客戶端Oracle客戶端
- socket.io 客戶端與伺服器應用客戶端伺服器
- YUM源伺服器搭建與客戶端配置使用伺服器客戶端
- 客戶端登入Oracle 12.2伺服器報ORA-01017的解惑客戶端Oracle伺服器
- MQTT伺服器搭建服務端和客戶端MQQT伺服器服務端客戶端
- linux簡易 Oracle客戶端安裝LinuxOracle客戶端
- Redis 6.0 客戶端快取的伺服器端實現Redis客戶端快取伺服器
- C#Socket伺服器與客戶端的開發(3)C#伺服器客戶端
- 三、T-SQL增刪改、資料的匯入匯出、客戶端-伺服器的關係SQL客戶端伺服器
- 服務端,客戶端服務端客戶端
- 客戶端,服務端客戶端服務端
- Swoole 協程 MySQL 客戶端與非同步回撥 MySQL 客戶端的對比MySql客戶端非同步
- 實現客戶端與服務端的HTTP通訊客戶端服務端HTTP
- Linux下簡單的ACE socket客戶端和伺服器端Linux客戶端伺服器
- 「Oracle」客戶端 PL/SQL DEVELOPER 安裝使用Oracle客戶端SQLDeveloper
- Golang 實現客戶端與伺服器端UDP協議連線通訊Golang客戶端伺服器UDP協議
- USB 端點與USB HUB的關係
- 孤兒程式與終端的關係
- php與ethereum客戶端互動PHP客戶端
- dubbo客戶端客戶端
- Pulsar客戶端客戶端
- mqtt 客戶端MQQT客戶端
- React 伺服器端渲染和客戶端渲染效果對比React伺服器客戶端
- SAP UI渲染模式:客戶端渲染 VS 伺服器端渲染UI模式客戶端伺服器
- rsync備份【基於客戶端與服務端】客戶端服務端
- Web 應用客戶端渲染和伺服器端渲染的比較Web客戶端伺服器
- 用AnySQL在沒有oracle客戶端的伺服器上傳送郵件SQLOracle客戶端伺服器
- 客戶端 post ,get 訪問伺服器客戶端伺服器
- Nacos - 客戶端心跳續約及客戶端總結客戶端
- 關於客戶端資訊流思考客戶端
- Windows客戶端的JProfiler遠端監控Linux上的Tomcat伺服器Windows客戶端LinuxTomcat伺服器
- Python socket的客戶端Python客戶端
- Java的oauth2.0 服務端與客戶端的實現JavaOAuth服務端客戶端
- oracle11g客戶端靜默安裝Oracle客戶端
- 物理DataGuard客戶端無縫切換--客戶端TAF 配置客戶端