oracle監聽是個伺服器端程序,負責監聽使用者端發來的請求,能夠給使用者端電腦和資料庫電腦建立資料的連結;oracle監聽收到request後派生出server process提供服務,會根據資料庫設定提供專有和共用兩種模式。
本教學操作環境:Windows10系統、Oracle 11g版、Dell G3電腦。
oracle監聽,是個伺服器端程序,負責監聽使用者端發來的請求
監聽器可以不必駐留在資料庫主機上,即可以把範例註冊到遠端主機上的監聽
監聽是oracle自帶的軟體或者說元件
本地連線可以不用監聽,但是遠端連線必須要
oracle監聽收到user process發出的request後,派生出server process來提供服務,server程序根據資料庫的設定有2種模式:專有模式和共用模式
專有模式:每個使用者端程序都有單獨的server程序來建立session提供服務,絕大部分超過99%的資料庫都是這種模式
共用模式:有個分配器叫dispatch,監聽把請求放入請求佇列中,dispatch會不停的查詢請求佇列,當發現有請求時候就把請求轉給server程序,再通過server程序提供服務,處理完後反饋給響應佇列,dispatch再把響應佇列中的轉發給使用者程序。類似與飯館吃飯,server程序相當於廚師,dispatch相當於服務員,服務員接受請求並轉發給相應的空閒廚師提供服務,廚師做好的菜放在哪兒,服務員再端給客戶;這種模式用的不多
dbca建庫後一般會有預設監聽,不用再設定,監聽的伺服器埠預設1521
一般的庫一個監聽就夠了,但是並行量太大的話可能需要設定多個監聽,非預設監聽的埠號大於1024即可,不同監聽之間服務名和埠號不能一樣
監聽如何區別不同的庫呢,所以需要把範例進行服務註冊,註冊到listen中,
註冊就是將主機上跑的範例新增到listen裡,讓listen知道主機上有哪些範例
設定方法
動態註冊
服務註冊有2種,一種是動態註冊,是通過pmon程序主動的自動的把範例註冊到listen中
監聽和範例的啟動順序,當監聽先啟動,沒問題,如果監聽後啟動,那麼可以手工alter system register註冊下,或者不用管,pmon會隔一段時間就去註冊下
一般預設監聽是動態註冊
不需要listener.ora檔案
服務狀態中有status READY(庫在mount或者open狀態)字樣
pmon給監聽提供範例名、服務名、服務處理程式的型別和地址
註冊的服務名叫 db_name.db_domain,db_nameXDB.db_domain
如果要pmon註冊到非預設監聽,就要設定local_listener引數了
設定監聽可以通過netca圖形設定,也可以命令設定
預設監聽的名稱LISTENER,設定如上,實際上沒有這個listener.ora,預設listen也是可以正常執行的那麼下面增加一個在1522埠的非預設動態監聽,名稱叫listener2
首先netmgr圖形新增一個監聽
或者編輯listener.ora來新增監聽也行
然後修改tnsnames.ora新增一個listener2的字串,以便修改local_listener引數,(就是把監聽中的那一段複製到tnsnames.ora中)
設定下local_listener引數並手工註冊下即可,
[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]$
不過這樣的話預設,pmon就不會往預設監聽中註冊了,也就是從1521存取不到了,如果要1521 1522同時提供服務,可以刪除預設監聽,設定改為
LISTENER2 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = study.localdomain)(PORT = 1522)) (ADDRESS = (PROTOCOL = TCP)(HOST = study.localdomain)(PORT = 1521)) )
由於動態監聽依賴於PMON,刪除監聽組態檔,預設監聽依然有效,監聽依舊監聽localhost:1521,LOCAL_LISTENER這個引數控制範例將自身動態註冊到哪兒,LOCAL_LISTENER 這個引數的預設值是(ADDRESS = (PROTOCOL=TCP)(HOST=hostname)(PORT=1521)),PMON依舊主動註冊範例到監聽,dbca建庫後預設就是這樣的註冊方式
看的出來動態監聽要求監聽和local_listener引數設定是一致的,都是預設的空的設定即預設監聽,非預設就顯示設定這兩個地方即可
tnsnames
.ora在動態監聽中不是必須的,只是為了設定個原生的字串方便local_listener的設定命令而已,直接設定如下形式也ok
alter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=study.localdomain)(PORT=1521))'; 等同於alter system set local_listener='';
設定註冊到多個監聽,可以如下
alter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=study.localdomain)(PORT=1521))','(ADDRESS=(PROTOCOL=TCP)(HOST=study.localdomain)(PORT=1522))';
或者先在tnsnames.ora中設定多個地址的字串
再設定alter systemset local_listener='LISTENER2';
在共用伺服器模式下,可以設定listener的一個引數叫做dispatchers,把這個分派器註冊到一個非預設監聽
ALTER SYSTEM SET DISPATCHERS=」(PROTOCOL=tcp)(LISTENER=lsnr2)」;
select service_id,name from vactiveservices可以查出,前面2個服務是註冊到監聽的,後面2個是Oracle有兩個內部的服務,SYSBACKGROUND是後臺程序使用的,SYS$USERS提供給沒有指定服務的使用者對談使用
service_names是服務名,如果為空,會把db_name.db_domain 註冊到監聽
以上就是什麼是oracle監聽的詳細內容,更多請關注TW511.COM其它相關文章!