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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...