首頁 > 資料庫 > Oracle > 主體

什麼是oracle監聽

WBOY
發布: 2022-05-26 10:29:38
原創
5826 人瀏覽過

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

什麼是oracle監聽

本教學操作環境: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參數了

什麼是oracle監聽

#配置監聽可以透過netca圖形配置,也可以指令配置

什麼是oracle監聽

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

首先netmgr圖形加入一個監聽

什麼是oracle監聽

#或編輯listener.ora來加入監聽也行

什麼是oracle監聽

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

什麼是oracle監聽

設定下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中配置多个地址的字符串

什麼是oracle監聽

再设置alter systemset local_listener='LISTENER2';

在共享服务器模式下,可以配置listener的一个参数叫做dispatchers,把这个分派器注册到一个非默认监听

ALTER SYSTEM SET DISPATCHERS=”(PROTOCOL=tcp)(LISTENER=lsnr2)”;
登入後複製

什麼是oracle監聽

select service_id,name from vactiveservices可以查出,前面2个服务是注册到监听的,后面2个是Oracle有两个内部的服务,SYSBACKGROUND是后台进程使用的,SYS$USERS提供给没有指定服务的用户会话使用

什麼是oracle監聽

service_names是服务名,如果为空,会把db_name.db_domain 注册到监听

推荐教程:《Oracle视频教程

以上是什麼是oracle監聽的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!