ORACLE監聽理解

来源:https://www.cnblogs.com/yongestcat/archive/2019/09/20/11525972.html
-Advertisement-
Play Games

參考官方文檔Net Services Reference的7 Oracle Net Listener Parameters (listener.ora)1 監聽概念oracle監聽,是個伺服器端進程,負責監聽客戶端發來的請求監聽器可以不必駐留在資料庫主機上,即可以把實例註冊到遠程主機上的監聽監聽是o... ...


參考官方文檔Net Services Reference的7 Oracle Net Listener Parameters (listener.ora)

1 監聽概念

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 配置方法

2.1 動態註冊

服務註冊有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參數了

image


配置監聽可以通過netca圖形配置,也可以命令配置

image預設監聽的名稱LISTENER,配置如上,實際上沒有這個listener.ora,預設listen也是可以正常運行的


那麼下麵增加一個在1522埠的非預設動態監聽,名稱叫listener2

首先netmgr圖形添加一個監聽

image

或者編輯listener.ora來添加監聽也行

image

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

image設置下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中配置多個地址的字元串

image

再設置alter system set local_listener='LISTENER2';


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

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


image

select service_id,name from v$active_services可以查出,前面2個服務是註冊到監聽的,後面2個是Oracle有兩個內部的服務,SYS$BACKGROUND是後臺進程使用的,SYS$USERS提供給沒有指定服務的用戶會話使用


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

2.2  靜態註冊

另一種是靜態註冊,服務的狀態一般是status UNKNOWN字樣,靜態註冊是監聽程式根據配置文件listener.ora裡面的配置去監聽指定的地址埠和實例,是oem和其他服務所需要的

靜態註冊不是實例主動去監聽處註冊,而是監聽自己管理一個埠和服務的列表,監聽根據這個列表來將請求轉發到具體的實例

比如如下配置

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

SID_LIST_LISTENER2=
  (SID_LIST=
    (SID_DESC=
      (GLOBAL_DBNAME=STUDY)
      (ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)
      (SID_NAME=STUDY)
    )
  )
ADR_BASE_LISTENER2 = /u01/app/oracle

GLOBAL_DBNAME即服務名,看service_names參數即可,如果為空,就是db_name.db_domain,或者先動態註冊看一下服務名

SID_NAME需要大寫,否則安裝EM會有影響,如果不確定也可以先動態註冊觀察下

註意命名格式是LISTENER_NAME 和 SID_LIST_LISTENER_NAME


當資料庫關閉的時候,靜態註冊的監聽依舊可以連接,動態監聽就不行了,所以遠程啟動資料庫這樣的操作就一定需要靜態監聽


[oracle@study admin]$ sqlplus sys/[email protected]:1521/study as sysdba 

SQL*Plus: Release 11.2.0.1.0 Production on Fri Sep 20 10:59:06 2019

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

ERROR:
ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor


Enter user-name: ^C
[oracle@study admin]$ sqlplus sys/[email protected]:1522/study as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Fri Sep 20 10:59:15 2019

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to an idle instance.

10:59:15 [email protected]:1522/study> startup
ORACLE instance started.

Total System Global Area 1536602112 bytes
Fixed Size                  2213616 bytes
Variable Size             922749200 bytes
Database Buffers          603979776 bytes
Redo Buffers                7659520 bytes
Database mounted.
Database opened.
10:59:25 [email protected]:1522/study> 

好了,對oracle監聽有個大概的瞭解


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • centos7 內部集成了mariadb,而安裝mysql的話會和mariadb的文件衝突,所以需要先卸載掉mariadb。 ...
  • 連接資料庫有2種方式:在本機安裝Oracle資料庫或者是安裝一個oracle簡易客戶端當然,簡易客戶端跟oracle資料庫比較少了一些功能連接方式:1)簡易連接sqlplus scott/[email protected]:1521/study註意最後的study是服務名,別搞錯了這種ora-12514... ...
  • SQL Server 數據類型(文章來源:鬆軟科技www.sysoft.net.cn) Character 字元串: Unicode 字元串: Binary 類型: Number 類型: 固定精度和比例的數字。允許從 -10^38 +1 到 10^38 -1 之間的數字。 p 參數指示可以存儲的最大 ...
  • SQL DROP INDEX 語句 我們可以使用 DROP INDEX 命令刪除表格中的索引。 用於 Microsoft SQLJet (以及 Microsoft Access) 的語法: 用於 MS SQL Server 的語法: 用於 IBM DB2 和 Oracle 語法: 用於 MySQL ...
  • 一 SELECT語句關鍵字的定義順序 二 SELECT語句關鍵字的執行順序 三 準備表和數據 \1. 新建一個測試資料庫TestDB; 2.創建測試表table1和table2; 3.插入測試數據; 準備工作做完以後,table1和table2看起來應該像下麵這樣 四 準備SQL邏輯查詢測試語句 + ...
  • 本文基於Flink1.9版本簡述如何連接Kafka。 流式連接器 我們知道可以自己來開發Source 和 Sink ,但是一些比較基本的 Source 和 Sink 已經內置在 Flink 里。 預定義的source支持從文件、目錄、socket,以及 collections 和 iterators ...
  • 查詢指定日期,指定顯示欄位,排序,註釋功能 規整的查詢格式 ...
  • 問題經濟學上有個“海盜分金”模型:是說5個海盜搶得100枚金幣,他們按抽簽的順序依次提方案:首先由1號提出分配方案,然後5人表決,超過半數同意方案才被通過,否則他將被扔入大海喂鯊魚,依此類推,假設海盜是足夠聰明的先利己再傷人,最後方案是怎樣的?網上百度來的的代碼with a as (select 1... ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...