問題描述
周一剛上班,測試部門的同事就反饋nwmh喝topicis實(shí)例不能訪問,她根據(jù)大模型提供的辦法逐個(gè)嘗試后依然未能解決,還提供了監(jiān)聽啟動(dòng)成功的截圖。

分析過程
查看實(shí)例進(jìn)程是否存在
該服務(wù)器上共有5個(gè)實(shí)例

查看監(jiān)聽狀態(tài)
服務(wù)器端的監(jiān)聽器需要啟動(dòng)。監(jiān)聽器通過配置文件listener.ora來設(shè)置相關(guān)參數(shù),并使用lsnrctl命令進(jìn)行管理

查看監(jiān)聽配置文件是否正確
listener.ora
listener.ora是oracle服務(wù)器端的網(wǎng)絡(luò)配置文件,oracle根據(jù)它來配監(jiān)聽服務(wù)。它接受遠(yuǎn)程對(duì)數(shù)據(jù)庫的申請(qǐng),并轉(zhuǎn)交給oracle的服務(wù)進(jìn)程。
根據(jù)監(jiān)聽程序不支持服務(wù)的提示檢查listener.ora文件是否存在,listener.ora文件是存在的,參數(shù)也配置正確。
[oracle@topdb193 ~]$ cat /opt/u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
# listener.ora Network Configuration File: /opt/u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.193)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_LISTENER = /opt/u01/app/oracletnsnames.ora
tnsnames.ora文件是存在的,參數(shù)也配置正確
[oracle@topdb193 ~]$ cat /opt/u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# tnsnames.ora Network Configuration File: /opt/u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
TOPICIS =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.193)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = topicis)
)
)
TOPOERS1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.193)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = topoers1)
)
)
DATATEST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.193)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = datatest)
)
)
NWMH =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.193)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = nwmh)
)
)
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.193)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
查看 IP 地址和主機(jī)名的映射關(guān)系
[oracle@topdb193 ~]$ cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.3.193 topdb193
192.168.3.193 nacos.topnet.com內(nèi)容正確
查看監(jiān)聽日志
配置沒問題但是監(jiān)聽一直報(bào)監(jiān)聽程序不支持服務(wù),分析思路進(jìn)入了死胡同,青學(xué)會(huì)MOP技術(shù)社區(qū)①群中咨詢大佬們,群里大佬反饋數(shù)據(jù)庫沒注冊(cè)上,等一分鐘后再查監(jiān)聽狀態(tài),沒配置靜態(tài)監(jiān)聽。現(xiàn)場著實(shí)是沒配置靜態(tài)監(jiān)聽,監(jiān)聽啟動(dòng)后已經(jīng)等待數(shù)分鐘查看監(jiān)聽狀態(tài)依然顯示監(jiān)聽程序不支持服務(wù)。
臨時(shí)解決辦法
手動(dòng)注冊(cè)監(jiān)聽
export ORACLE_SID=nwmh
sqlplus / as sysdba
SYS@nwmh >alter system register;查看監(jiān)聽服務(wù)
手動(dòng)注冊(cè)監(jiān)聽服務(wù)后查看監(jiān)聽服務(wù)正常,應(yīng)用訪問也恢復(fù)。
[oracle@topdb193 trace]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 11-8月 -2025 09:40:24
Copyright (c) 1991, 2013, Oracle. All rights reserved.
正在連接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.3.193)(PORT=1521)))
LISTENER 的 STATUS
------------------------
別名 LISTENER
版本 TNSLSNR for Linux: Version 11.2.0.4.0 - Production
啟動(dòng)日期 11-8月 -2025 09:28:35
正常運(yùn)行時(shí)間 0 天 0 小時(shí) 11 分 48 秒
跟蹤級(jí)別 off
安全性 ON: Local OS Authentication
SNMP OFF
監(jiān)聽程序參數(shù)文件 /opt/u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
監(jiān)聽程序日志文件 /opt/u01/app/oracle/diag/tnslsnr/topdb193/listener/alert/log.xml
監(jiān)聽端點(diǎn)概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.3.193)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
服務(wù)摘要..
服務(wù) "nwmh" 包含 1 個(gè)實(shí)例。
實(shí)例 "nwmh", 狀態(tài) READY, 包含此服務(wù)的 1 個(gè)處理程序...
服務(wù) "nwmhXDB" 包含 1 個(gè)實(shí)例。
實(shí)例 "nwmh", 狀態(tài) READY, 包含此服務(wù)的 1 個(gè)處理程序...
用同樣的辦法datatest、orcl、topoers1、nwmh均得到解決。但是該辦法對(duì)topicis實(shí)例不奏效,登錄topicis實(shí)例提示如下異常:
[oracle@topdb193 ~]$ export ORACLE_SID=topicis
[oracle@topdb193 ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on 星期一 8月 11 09:36:34 2025
Copyright (c) 1982, 2013, Oracle. All rights reserved.
已連接。pmon進(jìn)程在,推測topicis實(shí)例已經(jīng)閉庫,目前狀態(tài)是裝活著,查看高級(jí)日志,發(fā)現(xiàn)2025-8-11 9:04數(shù)據(jù)庫已關(guān)閉

但是pmon進(jìn)程沒關(guān)閉
[oracle@topdb193 topdb193]$ ps -ef | grep ora_pmon_topicis | grep -v grep
oracle 10067 1 0 2月06 ? 00:26:18 ora_pmon_topicis嘗試手動(dòng)啟動(dòng)topicis實(shí)例
SYS@topicis >startup
ORA-01012: not logged on
SYS@topicis >conn / as sysdba
已連接到空閑例程。
SYS@topicis >startup
ORA-01012: not logged on
SYS@topicis >exit
已斷開連接解決辦法:準(zhǔn)備手動(dòng)干掉pmon進(jìn)程再啟動(dòng)
kill -15 pmon
參數(shù)說明:
執(zhí)行完該指令后,操作系統(tǒng)會(huì)發(fā)送一個(gè) SIGTERM 信號(hào)給對(duì)應(yīng)的程序。當(dāng)程序接收到該信號(hào)后,可能會(huì)發(fā)生以下幾種情況的一種:
當(dāng)前程序立刻停止;
程序釋放相應(yīng)資源,然后再停止;
程序可能仍然繼續(xù)運(yùn)行。
大部分程序會(huì)先釋放自己的資源,然后再停止。但是也有程序可以在接受到信號(hào)量后,繼續(xù)做其他一些事情,并且這些事情是可以配置的。如果程序正在等待IO,可能就不會(huì)立馬做出響應(yīng)。也就是說,kill -15 時(shí)SIGTERM 是可能被阻塞、被忽略的。長時(shí)間pmon進(jìn)程依然或者,無奈
kill -9 pmon
參數(shù)說明:
如果 kill -15時(shí) SIGTERM 不進(jìn)行響應(yīng)?那 kill -9則是 SIGKILL就是必殺信號(hào),多半 ROOT 會(huì)直接使用這個(gè)命令,但并不推薦這么做。
小結(jié):在使用 kill -9 前,應(yīng)該先使用 kill -15,給目標(biāo)進(jìn)程一個(gè)清理善后工作的機(jī)會(huì)。如果沒有,可能會(huì)留下一些不完整的文件或狀態(tài),從而影響服務(wù)的再次啟動(dòng)。啟動(dòng)topicis實(shí)例成功。
最終解決辦法
推測是topicis實(shí)例異常閉庫pmon進(jìn)程阻塞未停止造成其他四個(gè)實(shí)例的監(jiān)聽功能不工作。
對(duì)于一臺(tái)服務(wù)器上多個(gè)實(shí)例的場景,動(dòng)態(tài)監(jiān)聽結(jié)合配置靜態(tài)監(jiān)聽會(huì)好些,不會(huì)因?yàn)槠渲幸粋€(gè)實(shí)例異常阻塞其他實(shí)例。
[oracle@topdb193 ~]$ cat /opt/u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
# listener.ora Network Configuration File: /opt/u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_NAME = orcl)
(ORACLE_HOME = /opt/u01/app/oracle/product/11.2.0/db_1)
(PROGRAM = orcl)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.193)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_LISTENER = /opt/u01/app/oracle
[oracle@topdb193 ~]$ lsnrctl stop
[oracle@topdb193 ~]$ lsnrctl start附:深入剖析 Oracle11g 監(jiān)聽器工作機(jī)理與實(shí)現(xiàn)原理
1. 引言
Oracle 數(shù)據(jù)庫的監(jiān)聽器(Listener)是一個(gè)關(guān)鍵的網(wǎng)絡(luò)服務(wù)組件,負(fù)責(zé)處理來自客戶端的連接請(qǐng)求,并將這些請(qǐng)求轉(zhuǎn)發(fā)到相應(yīng)的數(shù)據(jù)庫實(shí)例。在 Oracle 11g 中,監(jiān)聽器的工作機(jī)理和實(shí)現(xiàn)原理對(duì)于確保數(shù)據(jù)庫的高效運(yùn)行和穩(wěn)定性至關(guān)重要。本文將深入剖析 Oracle 11g 監(jiān)聽器的工作流程和內(nèi)部機(jī)制,幫助讀者更好地理解和配置監(jiān)聽器,以提高數(shù)據(jù)庫的性能和可靠性。
2. Oracle11g 監(jiān)聽器概述
Oracle 監(jiān)聽器是一個(gè)在數(shù)據(jù)庫服務(wù)器上運(yùn)行的守護(hù)進(jìn)程,它監(jiān)聽特定端口的網(wǎng)絡(luò)請(qǐng)求,以便于客戶端能夠連接到 Oracle 數(shù)據(jù)庫。在 Oracle 11g 中,監(jiān)聽器不僅負(fù)責(zé)接收連接請(qǐng)求,還負(fù)責(zé)將請(qǐng)求重定向到正確的數(shù)據(jù)庫服務(wù)。監(jiān)聽器配置正確與否直接影響到客戶端是否能夠成功連接到數(shù)據(jù)庫。
監(jiān)聽器維護(hù)著一個(gè)服務(wù)注冊(cè)表,其中包含了數(shù)據(jù)庫實(shí)例的相關(guān)信息,例如服務(wù)名、實(shí)例名、數(shù)據(jù)庫版本等。當(dāng)數(shù)據(jù)庫實(shí)例啟動(dòng)時(shí),它會(huì)向監(jiān)聽器注冊(cè)自己的信息。客戶端通過提供服務(wù)名或其他信息向監(jiān)聽器請(qǐng)求連接時(shí),監(jiān)聽器會(huì)查詢服務(wù)注冊(cè)表,找到對(duì)應(yīng)的服務(wù),并將客戶端的連接請(qǐng)求轉(zhuǎn)發(fā)到相應(yīng)的數(shù)據(jù)庫實(shí)例。
2.1 監(jiān)聽器的主要功能
- 管理和分配數(shù)據(jù)庫的連接請(qǐng)求。
- 支持多種協(xié)議,如 TCP/IP、SSL 等。
- 支持負(fù)載均衡和高可用性配置。
2.2 監(jiān)聽器的配置文件
listener.ora:監(jiān)聽器的配置文件,定義了監(jiān)聽器監(jiān)聽的協(xié)議、端口和服務(wù)信息。tnsnames.ora:包含了網(wǎng)絡(luò)服務(wù)名稱( alias)和對(duì)應(yīng)的服務(wù)信息,用于客戶端連接數(shù)據(jù)庫時(shí)使用。
了解監(jiān)聽器的基本概念和配置文件是管理和維護(hù) Oracle 數(shù)據(jù)庫的基礎(chǔ)。下面我們將詳細(xì)介紹如何查看和修改監(jiān)聽器的配置。
3. 監(jiān)聽器配置與管理
監(jiān)聽器的配置與管理是確保 Oracle 數(shù)據(jù)庫能夠接受客戶端連接請(qǐng)求的關(guān)鍵步驟。在 Oracle 11g 中,管理員需要了解如何查看監(jiān)聽器的狀態(tài),如何對(duì)其進(jìn)行配置修改,以及如何解決常見的配置問題。
3.1 查看監(jiān)聽器狀態(tài)
要查看監(jiān)聽器的狀態(tài),可以使用 lsnrctl 命令行工具。以下是一個(gè)查看監(jiān)聽器狀態(tài)的示例命令:
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 19-MAR-2023 10:09:57
Copyright (c) 1991, 2011, Oracle. All rights reserved.
Welcome to LSNRCTL, type 'help' for information.
LSNRCTL> status
Listener LOGFILE is /u01/app/oracle/diag/tnslsnr/oracle/listener.log
Listener Parameter File is /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Listener Backends are currently supported version(s): 11.2.0.4.0, 11.1.0.7.0, 10.2.0.5.0, 9.2.0.8.0, 8.1.7.10.0, 8.0.6.0.0
The listener supports protocol versions before Oracle8.0.6.0.0
LSNRCTL>3.2 修改監(jiān)聽器配置
修改監(jiān)聽器配置通常涉及到編輯 listener.ora 文件。以下是一個(gè)簡單的 listener.ora 文件示例:
SID_LIST_LISTENER =
(SID_LIST =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(PROGRAM = extproc)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle-server)(PORT = 1521))
)如果需要修改監(jiān)聽器監(jiān)聽的端口,可以更改 PORT 參數(shù)的值。修改后,需要重新啟動(dòng)監(jiān)聽器使其生效:
LSNRCTL> stop
LSNRCTL> start3.3 監(jiān)聽器常見問題
在管理監(jiān)聽器時(shí),可能會(huì)遇到一些常見問題,如監(jiān)聽器無法啟動(dòng)、客戶端無法連接等。這些問題通常與網(wǎng)絡(luò)配置、權(quán)限設(shè)置或監(jiān)聽器配置文件有關(guān)。解決這些問題的一般步驟包括:
- 檢查監(jiān)聽器日志文件以確定錯(cuò)誤原因。
- 確認(rèn)監(jiān)聽器配置文件中的設(shè)置與數(shù)據(jù)庫實(shí)例的配置相匹配。
- 檢查網(wǎng)絡(luò)設(shè)置,如防火墻規(guī)則、端口沖突等。
通過以上步驟,管理員可以有效地配置和管理 Oracle 11g 的監(jiān)聽器,確保數(shù)據(jù)庫服務(wù)的穩(wěn)定運(yùn)行。
4. 監(jiān)聽器的工作流程
Oracle 監(jiān)聽器的工作流程是客戶端與數(shù)據(jù)庫實(shí)例建立連接的關(guān)鍵環(huán)節(jié)。以下是 Oracle 11g 監(jiān)聽器處理連接請(qǐng)求的詳細(xì)步驟:
4.1 客戶端發(fā)起連接請(qǐng)求
當(dāng)客戶端需要連接到 Oracle 數(shù)據(jù)庫時(shí),它會(huì)通過 tnsnames.ora 文件中定義的網(wǎng)絡(luò)服務(wù)名稱(alias)來指定要連接的數(shù)據(jù)庫服務(wù)。客戶端的網(wǎng)絡(luò)層使用這些信息來建立到數(shù)據(jù)庫服務(wù)器的 TCP/IP 連接。
4.2 監(jiān)聽器接收請(qǐng)求
監(jiān)聽器在配置的端口上持續(xù)監(jiān)聽來自客戶端的連接請(qǐng)求。一旦有請(qǐng)求到達(dá),監(jiān)聽器就會(huì)接收這個(gè)請(qǐng)求,并根據(jù)請(qǐng)求中攜帶的信息進(jìn)行下一步處理。
4.3 監(jiān)聽器查詢服務(wù)注冊(cè)表
監(jiān)聽器會(huì)查詢內(nèi)部的服務(wù)注冊(cè)表,查找與客戶端請(qǐng)求相匹配的服務(wù)信息。這個(gè)信息包括數(shù)據(jù)庫實(shí)例的 SID(系統(tǒng)標(biāo)識(shí)符)、服務(wù)名、實(shí)例名等。
4.4 監(jiān)聽器轉(zhuǎn)發(fā)連接請(qǐng)求
如果監(jiān)聽器在服務(wù)注冊(cè)表中找到了匹配的服務(wù),它就會(huì)將客戶端的連接請(qǐng)求轉(zhuǎn)發(fā)到對(duì)應(yīng)的數(shù)據(jù)庫實(shí)例。如果服務(wù)注冊(cè)表中沒有匹配的服務(wù),監(jiān)聽器會(huì)返回一個(gè)錯(cuò)誤信息給客戶端。
4.5 數(shù)據(jù)庫實(shí)例處理連接請(qǐng)求
數(shù)據(jù)庫實(shí)例接收到來自監(jiān)聽器的轉(zhuǎn)發(fā)請(qǐng)求后,會(huì)創(chuàng)建一個(gè)新的服務(wù)器進(jìn)程來處理客戶端的連接。這個(gè)服務(wù)器進(jìn)程會(huì)與客戶端建立會(huì)話,并處理后續(xù)的 SQL 請(qǐng)求。
4.6 連接建立
一旦服務(wù)器進(jìn)程與客戶端成功建立連接,客戶端就可以開始發(fā)送 SQL 語句,并接收來自數(shù)據(jù)庫的響應(yīng)數(shù)據(jù)。
以下是監(jiān)聽器工作流程的簡化示例代碼:
# 客戶端請(qǐng)求連接
客戶端 -> 監(jiān)聽器: "連接到數(shù)據(jù)庫服務(wù)"
# 監(jiān)聽器接收并處理請(qǐng)求
監(jiān)聽器 -> 服務(wù)注冊(cè)表: "查詢服務(wù)信息"
服務(wù)注冊(cè)表 -> 監(jiān)聽器: "返回服務(wù)信息"
# 監(jiān)聽器轉(zhuǎn)發(fā)請(qǐng)求到數(shù)據(jù)庫實(shí)例
監(jiān)聽器 -> 數(shù)據(jù)庫實(shí)例: "轉(zhuǎn)發(fā)客戶端連接請(qǐng)求"
# 數(shù)據(jù)庫實(shí)例處理連接
數(shù)據(jù)庫實(shí)例 -> 客戶端: "連接建立,準(zhǔn)備接收SQL請(qǐng)求"理解監(jiān)聽器的工作流程對(duì)于診斷連接問題、優(yōu)化網(wǎng)絡(luò)配置以及確保數(shù)據(jù)庫服務(wù)的高可用性至關(guān)重要。通過對(duì)工作流程的深入理解,管理員可以更有效地管理 Oracle 數(shù)據(jù)庫環(huán)境。
5. 監(jiān)聽器與數(shù)據(jù)庫的交互
Oracle 監(jiān)聽器與數(shù)據(jù)庫之間的交互是確保客戶端能夠順利連接到數(shù)據(jù)庫實(shí)例的核心機(jī)制。這種交互涉及多個(gè)步驟和組件,下面將詳細(xì)探討監(jiān)聽器與數(shù)據(jù)庫實(shí)例之間的交互過程。
Oracle監(jiān)聽器設(shè)置在服務(wù)端,是基于服務(wù)端的一種網(wǎng)絡(luò)服務(wù),用于監(jiān)聽客戶端向數(shù)據(jù)庫端發(fā)出的連接請(qǐng)求。判斷一下連接請(qǐng)求是否正確,請(qǐng)求有效就連接,失敗就拒絕。所以要連接遠(yuǎn)程數(shù)據(jù)庫,遠(yuǎn)程數(shù)據(jù)庫就必須要配置監(jiān)聽器,客戶端則不需要配置。
下面是連接過程:

5.1 服務(wù)注冊(cè)
當(dāng)數(shù)據(jù)庫實(shí)例啟動(dòng)時(shí),它會(huì)向監(jiān)聽器注冊(cè)自己的服務(wù)信息。這個(gè)過程稱為服務(wù)注冊(cè),它允許監(jiān)聽器知道當(dāng)前可用的數(shù)據(jù)庫服務(wù)。注冊(cè)信息包括服務(wù)名、實(shí)例名、數(shù)據(jù)庫版本、ORACLE_HOME 路徑等。以下是服務(wù)注冊(cè)的簡化流程:
數(shù)據(jù)庫實(shí)例 -> 監(jiān)聽器: "注冊(cè)服務(wù)信息"
監(jiān)聽器 -> 服務(wù)注冊(cè)表: "更新服務(wù)信息"5.2 連接轉(zhuǎn)發(fā)
當(dāng)監(jiān)聽器接收到客戶端的連接請(qǐng)求后,它會(huì)根據(jù)請(qǐng)求中提供的信息(如服務(wù)名)查詢服務(wù)注冊(cè)表,找到對(duì)應(yīng)的服務(wù),并將連接請(qǐng)求轉(zhuǎn)發(fā)到相應(yīng)的數(shù)據(jù)庫實(shí)例。以下是連接轉(zhuǎn)發(fā)的簡化流程:
客戶端 -> 監(jiān)聽器: "發(fā)起連接請(qǐng)求"
監(jiān)聽器 -> 服務(wù)注冊(cè)表: "查詢服務(wù)信息"
監(jiān)聽器 -> 數(shù)據(jù)庫實(shí)例: "轉(zhuǎn)發(fā)連接請(qǐng)求"5.3 會(huì)話建立
一旦數(shù)據(jù)庫實(shí)例接收到來自監(jiān)聽器的連接請(qǐng)求,它會(huì)為客戶端創(chuàng)建一個(gè)新的服務(wù)器進(jìn)程,并建立與客戶端的會(huì)話。這個(gè)過程稱為會(huì)話建立。以下是會(huì)話建立的簡化流程:
數(shù)據(jù)庫實(shí)例 -> 客戶端: "創(chuàng)建服務(wù)器進(jìn)程"
數(shù)據(jù)庫實(shí)例 -> 客戶端: "建立會(huì)話"5.4 會(huì)話管理
在會(huì)話建立之后,客戶端和數(shù)據(jù)庫實(shí)例之間的交互由服務(wù)器進(jìn)程管理。服務(wù)器進(jìn)程負(fù)責(zé)執(zhí)行客戶端發(fā)送的 SQL 語句,并將查詢結(jié)果返回給客戶端。以下是會(huì)話管理的簡化流程:
客戶端 -> 數(shù)據(jù)庫實(shí)例: "發(fā)送SQL語句"
數(shù)據(jù)庫實(shí)例 -> 客戶端: "返回查詢結(jié)果"5.5 會(huì)話終止
當(dāng)客戶端完成數(shù)據(jù)庫操作后,它會(huì)斷開與數(shù)據(jù)庫實(shí)例的連接。此時(shí),數(shù)據(jù)庫實(shí)例會(huì)終止相應(yīng)的服務(wù)器進(jìn)程,并從監(jiān)聽器的服務(wù)注冊(cè)表中移除該服務(wù)。以下是會(huì)話終止的簡化流程:
客戶端 -> 數(shù)據(jù)庫實(shí)例: "斷開連接"
數(shù)據(jù)庫實(shí)例 -> 監(jiān)聽器: "更新服務(wù)注冊(cè)表"監(jiān)聽器與數(shù)據(jù)庫實(shí)例之間的這些交互步驟是確保數(shù)據(jù)庫服務(wù)正常運(yùn)行的關(guān)鍵。通過深入了解這些交互過程,數(shù)據(jù)庫管理員可以更好地監(jiān)控和維護(hù) Oracle 數(shù)據(jù)庫環(huán)境,確保服務(wù)的連續(xù)性和穩(wěn)定性。
6. 監(jiān)聽器性能優(yōu)化
Oracle 監(jiān)聽器的性能對(duì)于數(shù)據(jù)庫的整體性能和用戶體驗(yàn)至關(guān)重要。優(yōu)化監(jiān)聽器可以提升數(shù)據(jù)庫的響應(yīng)速度和處理能力,以下是一些針對(duì) Oracle 11g 監(jiān)聽器性能優(yōu)化的策略。
6.1 負(fù)載均衡
Oracle 監(jiān)聽器支持負(fù)載均衡功能,可以將客戶端連接請(qǐng)求分散到不同的數(shù)據(jù)庫實(shí)例,從而避免單個(gè)實(shí)例過載。在 listener.ora 文件中配置 SERVERS 和 SERVERS_LIST 參數(shù)可以實(shí)現(xiàn)負(fù)載均衡。
SID_LIST_LISTENER =
(SID_LIST =
(SID_NAME = ORCL)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(SERVERS = 2)
(SERVERS_LIST = (PRIMARY_SVR = (HOST = server1)(PORT = 1521))
(SECONDARY_SVR = (HOST = server2)(PORT = 1521)))
)6.2 高可用性配置
為了提高監(jiān)聽器的高可用性,可以配置多個(gè)監(jiān)聽器實(shí)例,并使用第三方負(fù)載均衡器或 Oracle 的負(fù)載均衡解決方案,如 Oracle Net Manager。
6.3 調(diào)整監(jiān)聽器參數(shù)
監(jiān)聽器的一些參數(shù)可以調(diào)整以優(yōu)化性能,例如:
MAX_CONNECTIONS:設(shè)置監(jiān)聽器可以同時(shí)處理的連接數(shù)。MAX_Sessions:設(shè)置監(jiān)聽器可以同時(shí)處理的會(huì)話數(shù)。
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle-server)(PORT = 1521))
(MAX_CONNECTIONS = 1000)
(MAX_SESSIONS = 1000)
)6.4 監(jiān)聽器日志和統(tǒng)計(jì)信息
定期查看監(jiān)聽器的日志文件和統(tǒng)計(jì)信息可以幫助識(shí)別性能瓶頸。可以使用 LSNRCTL 命令行工具來查看統(tǒng)計(jì)信息:
LSNRCTL> show statistics6.5 網(wǎng)絡(luò)優(yōu)化
優(yōu)化網(wǎng)絡(luò)設(shè)置,如調(diào)整 TCP/IP 緩沖區(qū)大小、減少網(wǎng)絡(luò)延遲和丟包,都可以提升監(jiān)聽器的性能。
6.6 使用 SSL
如果安全是一個(gè)考慮因素,可以使用 SSL 來加密監(jiān)聽器與客戶端之間的通信。雖然 SSL 會(huì)增加一些處理開銷,但它可以提供更高級(jí)別的安全性。
通過上述優(yōu)化措施,可以提高 Oracle 11g 監(jiān)聽器的性能,確保數(shù)據(jù)庫服務(wù)能夠高效地處理客戶端請(qǐng)求,同時(shí)保持系統(tǒng)的穩(wěn)定性和安全性。
7. 常見問題與故障排除
在管理和維護(hù) Oracle 11g 監(jiān)聽器的過程中,管理員可能會(huì)遇到各種問題。正確識(shí)別和解決這些問題對(duì)于確保數(shù)據(jù)庫服務(wù)的連續(xù)性和穩(wěn)定性至關(guān)重要。以下是一些常見的監(jiān)聽器問題及其故障排除方法。
7.1 監(jiān)聽器無法啟動(dòng)
當(dāng)監(jiān)聽器無法啟動(dòng)時(shí),首先檢查監(jiān)聽器日志文件,該文件通常位于 $ORACLE_HOME/diag/tnslsnr/<hostname>/listener 目錄下。日志文件中通常會(huì)包含錯(cuò)誤信息,指出無法啟動(dòng)的原因。
- 端口沖突:檢查是否有其他服務(wù)占用了監(jiān)聽器配置的端口。
- 配置文件錯(cuò)誤:檢查
listener.ora文件中的配置是否有誤。 - 權(quán)限問題:確保 Oracle 用戶有權(quán)限在監(jiān)聽器端口上進(jìn)行監(jiān)聽。
netstat -an | grep 1521使用上述命令檢查端口 1521(默認(rèn)的 Oracle 監(jiān)聽器端口)是否被占用。
7.2 客戶端無法連接
如果客戶端無法連接到數(shù)據(jù)庫,可能的原因包括:
- 監(jiān)聽器未啟動(dòng):確認(rèn)監(jiān)聽器是否正在運(yùn)行。
- 網(wǎng)絡(luò)問題:檢查客戶端與服務(wù)器之間的網(wǎng)絡(luò)連接。
- 服務(wù)名錯(cuò)誤:確保客戶端使用的服務(wù)名與
listener.ora文件中配置的服務(wù)名相匹配。
LSNRCTL> status使用 LSNRCTL status 命令檢查監(jiān)聽器狀態(tài)。
7.3 監(jiān)聽器日志顯示錯(cuò)誤
監(jiān)聽器日志中可能會(huì)顯示各種錯(cuò)誤,以下是一些常見的錯(cuò)誤及其解決方法:
- TNS-12541:監(jiān)聽器無法解析服務(wù)名,檢查
listener.ora和tnsnames.ora文件中的配置。 - TNS-12560:監(jiān)聽器無法接收連接,檢查網(wǎng)絡(luò)配置和防火墻設(shè)置。
grep TNS-12541 $ORACLE_HOME/diag/tnslsnr/oracle/listener.log使用上述命令在監(jiān)聽器日志中搜索特定錯(cuò)誤。
7.4 監(jiān)聽器性能問題
如果監(jiān)聽器性能下降,可能需要:
- 調(diào)整監(jiān)聽器參數(shù):如
MAX_CONNECTIONS和MAX_SESSIONS。 - 優(yōu)化網(wǎng)絡(luò)設(shè)置:調(diào)整 TCP/IP 參數(shù),如
tcp.send_buffer_size和tcp.receive_buffer_size。
7.5 監(jiān)聽器安全漏洞
監(jiān)聽器可能存在安全漏洞,應(yīng)采取以下措施:
- 限制監(jiān)聽器訪問:僅允許受信任的 IP 地址訪問監(jiān)聽器端口。
- 使用 SSL:配置監(jiān)聽器使用 SSL 來加密客戶端和服務(wù)器之間的通信。
故障排除的關(guān)鍵在于仔細(xì)分析錯(cuò)誤信息,逐步排除可能的原因。以下是一個(gè)簡單的故障排除流程示例:
# 故障排除流程
1. 確認(rèn)監(jiān)聽器狀態(tài)
2. 檢查監(jiān)聽器日志
3. 驗(yàn)證網(wǎng)絡(luò)連接
4. 核對(duì)配置文件
5. 查看系統(tǒng)權(quán)限
6. 調(diào)整監(jiān)聽器參數(shù)
7. 測試連接通過遵循這些步驟,管理員可以有效地解決監(jiān)聽器的問題,確保 Oracle 數(shù)據(jù)庫服務(wù)的正常運(yùn)行。
8. 總結(jié)
本文詳細(xì)介紹了 Oracle 11g 監(jiān)聽器的工作機(jī)理與實(shí)現(xiàn)原理,包括監(jiān)聽器的基本概念、配置與管理、工作流程、與數(shù)據(jù)庫的交互、性能優(yōu)化以及常見問題與故障排除方法。通過深入了解監(jiān)聽器的作用和配置,管理員可以更好地管理和維護(hù)數(shù)據(jù)庫服務(wù),確保其穩(wěn)定性和高效性。
監(jiān)聽器作為 Oracle 數(shù)據(jù)庫網(wǎng)絡(luò)服務(wù)的關(guān)鍵組件,其重要性不言而喻。正確的配置和優(yōu)化可以提升數(shù)據(jù)庫的連接性能,增強(qiáng)系統(tǒng)的可用性和安全性。同時(shí),掌握故障排除技巧可以幫助管理員快速響應(yīng)和解決可能出現(xiàn)的問題。
在未來的工作中,管理員應(yīng)持續(xù)關(guān)注 Oracle 數(shù)據(jù)庫技術(shù)的發(fā)展,不斷學(xué)習(xí)和實(shí)踐,以提高自己在數(shù)據(jù)庫管理和維護(hù)方面的專業(yè)技能。通過不斷優(yōu)化監(jiān)聽器配置,確保 Oracle 數(shù)據(jù)庫能夠?yàn)闃I(yè)務(wù)提供可靠、高效的服務(wù)。
參考鏈接:https://blog.csdn.net/weixin_42233789/article/details/105392180
https://blog.csdn.net/Golden_soft/article/details/81510985
https://my.oschina.net/emacs_8744887/blog/17161211
最后,感謝青學(xué)會(huì)MOP技術(shù)社區(qū)①群中大佬答疑




