什么是oracle監(jiān)聽

oracle監(jiān)聽是個(gè)服務(wù)器端進(jìn)程,負(fù)責(zé)監(jiān)聽客戶端發(fā)來的請(qǐng)求,能夠給客戶端電腦和數(shù)據(jù)庫(kù)電腦建立數(shù)據(jù)的鏈接;oracle監(jiān)聽收到request后派生出server process提供服務(wù),會(huì)根據(jù)數(shù)據(jù)庫(kù)配置提供專有和共享兩種模式。

什么是oracle監(jiān)聽

本教程操作環(huán)境:Windows10系統(tǒng)、Oracle 11g版、Dell G3電腦。

什么是oracle監(jiān)聽

oracle監(jiān)聽,是個(gè)服務(wù)器端進(jìn)程,負(fù)責(zé)監(jiān)聽客戶端發(fā)來的請(qǐng)求

監(jiān)聽器可以不必駐留在數(shù)據(jù)庫(kù)主機(jī)上,即可以把實(shí)例注冊(cè)到遠(yuǎn)程主機(jī)上的監(jiān)聽

監(jiān)聽是oracle自帶的軟件或者說組件

本地連接可以不用監(jiān)聽,但是遠(yuǎn)程連接必須要

oracle監(jiān)聽收到user process發(fā)出的request后,派生出server process來提供服務(wù),server進(jìn)程根據(jù)數(shù)據(jù)庫(kù)的配置有2種模式:專有模式和共享模式

? 專有模式:每個(gè)客戶端進(jìn)程都有單獨(dú)的server進(jìn)程來建立Session提供服務(wù),絕大部分超過99%的數(shù)據(jù)庫(kù)都是這種模式

? 共享模式:有個(gè)分配器叫dispatch,監(jiān)聽把請(qǐng)求放入請(qǐng)求隊(duì)列中,dispatch會(huì)不停的查詢請(qǐng)求隊(duì)列,當(dāng)發(fā)現(xiàn)有請(qǐng)求時(shí)候就把請(qǐng)求轉(zhuǎn)給server進(jìn)程,再通過server進(jìn)程提供服務(wù),處理完后反饋給響應(yīng)隊(duì)列,dispatch再把響應(yīng)隊(duì)列中的轉(zhuǎn)發(fā)給用戶進(jìn)程。類似與飯館吃飯,server進(jìn)程相當(dāng)于廚師,dispatch相當(dāng)于服務(wù)員,服務(wù)員接受請(qǐng)求并轉(zhuǎn)發(fā)給相應(yīng)的空閑廚師提供服務(wù),廚師做好的菜放在哪兒,服務(wù)員再端給客戶;這種模式用的不多

dbca建庫(kù)后一般會(huì)有默認(rèn)監(jiān)聽,不用再配置,監(jiān)聽的服務(wù)端口默認(rèn)1521

一般的庫(kù)一個(gè)監(jiān)聽就夠了,但是并發(fā)量太大的話可能需要配置多個(gè)監(jiān)聽,非默認(rèn)監(jiān)聽的端口號(hào)大于1024即可,不同監(jiān)聽之間服務(wù)名和端口號(hào)不能一樣

監(jiān)聽如何區(qū)別不同的庫(kù)呢,所以需要把實(shí)例進(jìn)行服務(wù)注冊(cè),注冊(cè)到listen中,

注冊(cè)就是將主機(jī)上跑的實(shí)例添加到listen里,讓listen知道主機(jī)上有哪些實(shí)例

配置方法

動(dòng)態(tài)注冊(cè)

服務(wù)注冊(cè)有2種,一種是動(dòng)態(tài)注冊(cè),是通過pmon進(jìn)程主動(dòng)的自動(dòng)的把實(shí)例注冊(cè)到listen中

監(jiān)聽和實(shí)例的啟動(dòng)順序,當(dāng)監(jiān)聽先啟動(dòng),沒問題,如果監(jiān)聽后啟動(dòng),那么可以手工alter system register注冊(cè)下,或者不用管,pmon會(huì)隔一段時(shí)間就去注冊(cè)下

一般默認(rèn)監(jiān)聽是動(dòng)態(tài)注冊(cè)

不需要listener.ora文件

服務(wù)狀態(tài)中有status READY(庫(kù)在mount或者open狀態(tài))字樣

pmon給監(jiān)聽提供實(shí)例名、服務(wù)名、服務(wù)處理程序的類型和地址

注冊(cè)的服務(wù)名叫 db_name.db_domain,db_nameXDB.db_domain

如果要pmon注冊(cè)到非默認(rèn)監(jiān)聽,就要配置local_listener參數(shù)了

什么是oracle監(jiān)聽

配置監(jiān)聽可以通過netca圖形配置,也可以命令配置

什么是oracle監(jiān)聽

默認(rèn)監(jiān)聽的名稱LISTENER,配置如上,實(shí)際上沒有這個(gè)listener.ora,默認(rèn)listen也是可以正常運(yùn)行的那么下面增加一個(gè)在1522端口的非默認(rèn)動(dòng)態(tài)監(jiān)聽,名稱叫l(wèi)istener2

首先netmgr圖形添加一個(gè)監(jiān)聽

什么是oracle監(jiān)聽

或者編輯listener.ora來添加監(jiān)聽也行

什么是oracle監(jiān)聽

然后修改tnsnames.ora添加一個(gè)listener2的字符串,以便修改local_listener參數(shù),(就是把監(jiān)聽中的那一段復(fù)制到tnsnames.ora中)

什么是oracle監(jiān)聽

設(shè)置下local_listener參數(shù)并手工注冊(cè)下即可,

[oracle@study?admin]$?sql ? SQL*Plus:?Release?11.2.0.1.0?Production?on?Thu?Sep?19?17:07:41?2019 ? Copyright?(c)?1982,?2009,?Oracle.??All?rights?reserved. ? ? Connected?to: Oracle?Database?11g?Enterprise?Edition?Release?11.2.0.1.0?-?64bit?Production With?the?Partitioning,?OLAP,?Data?Mining?and?Real?Application?Testing?options ? 17:07:42?SYS@study>?show?parameter?local_list ? NAME?????????????????????????????????TYPE????????VALUE ------------------------------------?-----------?------------------------------ local_listener???????????????????????string 17:08:19?SYS@study>?alter?system?set?local_listener='LISTENER2'; ? System?altered. ? Elapsed:?00:00:00.04 17:09:03?SYS@study>?alter?system?register; ? System?altered. ? Elapsed:?00:00:00.00 17:09:21?SYS@study>?Disconnected?from?Oracle?Database?11g?Enterprise?Edition?Release?11.2.0.1.0?-?64bit?Production With?the?Partitioning,?OLAP,?Data?Mining?and?Real?Application?Testing?options [oracle@study?admin]$?lsnrctl?status?listener2 ? LSNRCTL?for?Linux:?Version?11.2.0.1.0?-?Production?on?19-SEP-2019?17:10:22 ? Copyright?(c)?1991,?2009,?Oracle.??All?rights?reserved. ? Connecting?to?(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=study.localdomain)(PORT=1522))) STATUS?of?the?LISTENER ------------------------ Alias?????????????????????listener2 Version???????????????????TNSLSNR?for?Linux:?Version?11.2.0.1.0?-?Production Start?Date????????????????19-SEP-2019?16:38:16 Uptime????????????????????0?days?0?hr.?32?min.?6?sec Trace?Level???????????????off Security??????????????????ON:?Local?OS?Authentication SNMP??????????????????????OFF Listener?Parameter?File???/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora Listener?Log?File?????????/u01/app/oracle/diag/tnslsnr/study/listener2/alert/log.xml Listening?Endpoints?Summary... ??(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=study.localdomain)(PORT=1522))) Services?Summary... Service?"study"?has?1?instance(s). ??Instance?"study",?status?READY,?has?1?handler(s)?for?this?service... Service?"studyXDB"?has?1?instance(s). ??Instance?"study",?status?READY,?has?1?handler(s)?for?this?service... The?command?completed?successfully [oracle@study?admin]$

不過這樣的話默認(rèn),pmon就不會(huì)往默認(rèn)監(jiān)聽中注冊(cè)了,也就是從1521訪問不到了,如果要1521 1522同時(shí)提供服務(wù),可以刪除默認(rèn)監(jiān)聽,配置改為

LISTENER2?= ??(DESCRIPTION?= ????(ADDRESS?=?(PROTOCOL?=?TCP)(HOST?=?study.localdomain)(PORT?=?1522)) ????(ADDRESS?=?(PROTOCOL?=?TCP)(HOST?=?study.localdomain)(PORT?=?1521)) ??)

由于動(dòng)態(tài)監(jiān)聽依賴于PMON,刪除監(jiān)聽配置文件,默認(rèn)監(jiān)聽依然有效,監(jiān)聽依舊監(jiān)聽localhost:1521,LOCAL_LISTENER這個(gè)參數(shù)控制實(shí)例將自身動(dòng)態(tài)注冊(cè)到哪兒,LOCAL_LISTENER 這個(gè)參數(shù)的默認(rèn)值是(ADDRESS = (PROTOCOL=TCP)(HOST=hostname)(PORT=1521)),PMON依舊主動(dòng)注冊(cè)實(shí)例到監(jiān)聽,dbca建庫(kù)后默認(rèn)就是這樣的注冊(cè)方式

看的出來動(dòng)態(tài)監(jiān)聽要求監(jiān)聽和local_listener參數(shù)配置是一致的,都是缺省的空的配置即默認(rèn)監(jiān)聽,非默認(rèn)就顯示配置這兩個(gè)地方即可

tnsnames

.ora在動(dòng)態(tài)監(jiān)聽中不是必須的,只是為了配置個(gè)本地的字符串方便local_listener的配置命令而已,直接配置如下形式也ok

alter?system?set?local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=study.localdomain)(PORT=1521))';?????? 等同于alter?system?set?local_listener='';

配置注冊(cè)到多個(gè)監(jiān)聽,可以如下

alter?system?set?local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=study.localdomain)(PORT=1521))','(ADDRESS=(PROTOCOL=TCP)(HOST=study.localdomain)(PORT=1522))';

或者先在tnsnames.ora中配置多個(gè)地址的字符串

什么是oracle監(jiān)聽

再設(shè)置alter systemset local_listener=’LISTENER2′;

在共享服務(wù)器模式下,可以配置listener的一個(gè)參數(shù)叫做dispatchers,把這個(gè)分派器注冊(cè)到一個(gè)非默認(rèn)監(jiān)聽

ALTER?SYSTEM?SET?DISPATCHERS=”(PROTOCOL=tcp)(LISTENER=lsnr2)”;

什么是oracle監(jiān)聽

select service_id,name from vactiveservices可以查出,前面2個(gè)服務(wù)是注冊(cè)到監(jiān)聽的,后面2個(gè)是Oracle有兩個(gè)內(nèi)部的服務(wù),SYSBACKGROUND是后臺(tái)進(jìn)程使用的,SYS$USERS提供給沒有指定服務(wù)的用戶會(huì)話使用

什么是oracle監(jiān)聽

service_names是服務(wù)名,如果為空,會(huì)把db_name.db_domain 注冊(cè)到監(jiān)聽

推薦教程:《Oracle視頻教程

以上就是什么是

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊15 分享