1、Oracle客戶端與服務器端的通訊機制sql
Oracle產品安裝完成後,服務器和客戶端都須要進行網絡配置才能實現網絡鏈接,服務器端配置監聽器,客戶端配置網絡服務名。數據庫
一、oracle net協議vim
Oracle經過oracle net協議實現客戶端與服務器端的鏈接及數據傳遞。Oracle net是同時駐留在服務器端和客戶端上的一個軟件層,它封裝了TCP/IP,負責創建與維護客戶端應用程序到數據庫服務器的鏈接。有協議就要有相應的端口,因此oracle NET有個默認的偵聽端口1521。服務器
.網絡
客戶端發出的請求首先經過oracle net協議轉換,轉換成能夠經過網絡傳輸的信息,經過tcp/ip網絡將請求傳輸到數據庫服務器端,服務器端收到客戶端請求後經過oracle net協議轉換,將請求轉換成數據庫能夠解釋執行的本地指令,並在服務器端執行,並將結果經過tcp/ip和oracle net協議傳輸給客戶端顯示。oracle
2、客戶端與服務器端的鏈接過程tcp
Oracle服務器經過一個名爲「oracle net監聽器」的組件接收來自客戶端的鏈接請求,監聽位於服務器端的一個後臺進程。發送的客戶端鏈接請求,首先被服務器的監聽器所偵聽,並交給對應的數據庫實例,從而創建起客戶端與服務器的鏈接。鏈接創建後,客戶端與服務器端就能夠直接進行通訊,不須要監聽器參與。要實現監聽器對客戶請求的監聽,須要對監聽器進行配置。ide
Oracle網絡服務名是一個標識符,表明客戶端鏈接服務器的配置信息。工具
客戶端與服務器端的鏈接過程以下:spa
1)在服務器端有一個常駐的監聽器,監聽客戶端發出的鏈接請求。
2)用戶在客戶端使用(企業管理器或sql工具),輸入用戶名、口令及網絡服務名,或在sql命令行中輸入相似「CONNECT username/password@net_service_name」的請求。
3)客戶端查看網絡服務配置文件tnsnames.ora文件,將網絡服務名映射爲包含oracle服務器地址、監聽端口和全局數據庫名的鏈接描述符。
4)客戶端根據鏈接描述符定位監聽器,並經過網絡鏈接信息傳遞給監聽器。
5)監聽器查詢監聽配置文件listener.ora,找出所要鏈接的服務器。
6)客戶端和服務器開始通訊。
三、配置和管理Oracle網絡配置的工具常見的有如下幾種:
1)netca方式
查看監聽文件
開啓新的監聽器
查看監聽器狀態
2)netmgr方式
添加監聽器便可
3)命令方式
修改vim /opt/oracle/product/11.2/db_1/network/admin/listener.ora
增長新的偵聽器,代碼以下:
開啓新的監聽器
上面紅框中的代碼the listener supports no services顯示沒有任何服務註冊到該監聽器上,這與監聽和數據庫實例的啓動前後順序有關。
解決方法:監聽啓動和數據庫實例啓動的順序
根據前面的知識,啓動完數據庫實例後,啓動監聽,在鏈接數據庫時,只有這兩者兼備,oracle才能向外提供服務。
監聽和實例啓動順序的前後會對兩者之間的工做協調產生影響,具體以下:
先啓動監聽,後啓動實例:此時遠程客戶端鏈接實例是正常的,不會有問題,由於監聽先啓動,在啓動實例時後臺進程PMON會向監聽註冊服務器,當用戶請求服務時,二者的協調工做已準備就緒。
先啓動實例,後啓動監聽:若是監聽剛啓動,用戶立刻鏈接實例,可能會報「監聽程序當前沒法識別鏈接描述符中請求的服務」的錯誤,緣由在於PMON還沒來得及向監聽註冊實例服務。可是這個問題只會存在很短的一段時間,再鏈接就不會有問題了,爲何等一會就行了呢?由於PMON每隔一段時間都會看有無服務須要向監聽註冊,此時若監聽已啓動,PMON就能註冊成功,兩者的協調工做就準備就緒了。
有沒有辦法解決很短的一段時間內的這個問題呢?答案是必定的。就是以靜態註冊的方式,即將實例的服務描述添加到listener.ora,這樣只要啓動監聽,對應的服務在監聽中就註冊了。這是隻要實例正常啓動完成,就能夠對外提供服務器了。在Listener.ora代碼中添加以下代碼便可。
4、客戶端的鏈接
客戶端鏈接到數據庫服務器必須知道一些信息,如數據庫服務器的主機名或ip地址,使用的通訊協議、端口號、以及對應的數據庫服務名,這些須要在客戶端設置
1)在win7上安裝oracle客戶端軟件
雙擊上圖中第二個文件安裝
安裝完成時候會在c:盤下生成oracle文件夾:
2)找到c:\oracle\product\11.2.0\client_lite\network\admin\tnsnames.ora文件,並修改,修改結果以下:
3)注意:須要在hosts文件裏面添加解析
4)在win7客戶端上打開命名行,執行命令鏈接
已經遠程鏈接到oracle服務器