什麼是oracle監聽

2022-05-26 14:03:06

oracle監聽是個伺服器端程序,負責監聽使用者端發來的請求,能夠給使用者端電腦和資料庫電腦建立資料的連結;oracle監聽收到request後派生出server process提供服務,會根據資料庫設定提供專有和共用兩種模式。

本教學操作環境:Windows10系統、Oracle 11g版、Dell G3電腦。

什麼是oracle監聽

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引數了

11.png

設定監聽可以通過netca圖形設定,也可以命令設定

12.png

預設監聽的名稱LISTENER,設定如上,實際上沒有這個listener.ora,預設listen也是可以正常執行的那麼下面增加一個在1522埠的非預設動態監聽,名稱叫listener2

首先netmgr圖形新增一個監聽

13.png

或者編輯listener.ora來新增監聽也行

14.png

然後修改tnsnames.ora新增一個listener2的字串,以便修改local_listener引數,(就是把監聽中的那一段複製到tnsnames.ora中)

15.png

設定下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中設定多個地址的字串

16.png

再設定alter systemset local_listener='LISTENER2';

在共用伺服器模式下,可以設定listener的一個引數叫做dispatchers,把這個分派器註冊到一個非預設監聽

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

17.png

select service_id,name from vactiveservices可以查出,前面2個服務是註冊到監聽的,後面2個是Oracle有兩個內部的服務,SYSBACKGROUND是後臺程序使用的,SYS$USERS提供給沒有指定服務的使用者對談使用

18.png

service_names是服務名,如果為空,會把db_name.db_domain 註冊到監聽

以上就是什麼是oracle監聽的詳細內容,更多請關注TW511.COM其它相關文章!