本文大部分為轉載。
原文作者1:realkid4,原文地址:鏈接
原文作者2:chyinzi,原文地址:鏈接
1,lsnrctl的使用
監聽器在Windows和Linux/Unix平臺上,都可以直接操作。
下面將以Windows平臺操作為例,Linux/Unix平臺的操作類似。
在命令行窗口(CMD),輸入lsnrctl,就可以進入監聽器控制窗口。
C:\Documents and Settings\Administrator>lsnrctl
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 26-12月-2010 21:53:04
Copyright (c) 1991, 2005, Oracle. All rights reserved.
歡迎來到LSNRCTL, 請鍵入"help"以獲得信息。
LSNRCTL>
通過輸入命令help,可以查看支持的監聽器操作命令。下面介紹常用的幾個。
a,status
功能:查看當前監聽器狀態
LSNRCTL> status
正在連接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
//連接監聽器的名稱和信息:主機名+監聽端口號
LISTENER 的 STATUS
------------------------
別名 LISTENER
版本 TNSLSNR for 32-bit Windows: Version 11.2.0.1.0 - Production
//Listener版本信息,在一臺機器多實例的情況下,很重要!因為版本對應向下兼容
啟動日期 08-11月-2017 13:47:21
正常運行時間 0 天 0 小時 4 分 32 秒
跟蹤級別 off
安全性 ON: Local OS Authentication
//監聽器一般有操作系統驗證和密碼驗證兩種安全驗證方式。
//這里Local OS Authentication表明啟動、關閉監聽器的操作權限是通過本地操作系統安全驗證
//也可以單獨為監聽器設置密碼,改為密碼驗證
SNMP OFF //是否開啟對簡單網絡管理協議的支持
監聽程序參數文件 C:\app\Administrator\product\11.2.0\dbhome_1\network\admin\listener.ora
//配置文件的存放路徑和文件名
監聽程序日志文件 c:\app\administrator\diag\tnslsnr\class11g\listener\alert\log.xml
//監聽器操作日志文件的路徑和文件名
監聽端點概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=class11g)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
//監聽器監聽的服務器和端口信息
服務摘要..
服務 "CLRExtProc" 包含 1 個實例。
實例 "CLRExtProc", 狀態 UNKNOWN, 包含此服務的 1 個處理程序...
服務 "Example_1" 包含 1 個實例。
實例 "sales", 狀態 UNKNOWN, 包含此服務的 1 個處理程序...
服務 "a" 包含 1 個實例。
實例 "sales", 狀態 READY, 包含此服務的 1 個處理程序...
服務 "b" 包含 1 個實例。
實例 "sales", 狀態 READY, 包含此服務的 1 個處理程序...
服務 "ora11g" 包含 1 個實例。
實例 "ora11g", 狀態 READY, 包含此服務的 1 個處理程序...
服務 "ora11gXDB" 包含 1 個實例。
實例 "ora11g", 狀態 READY, 包含此服務的 1 個處理程序...
服務 "sales" 包含 1 個實例。
實例 "sales", 狀態 READY, 包含此服務的 1 個處理程序...
服務 "salesXDB" 包含 1 個實例。
實例 "sales", 狀態 READY, 包含此服務的 1 個處理程序...
//當前已經在監聽器中注冊的服務名稱和實例名稱
命令執行成功
b,start/stop
功能:開啟/關閉監聽器
監聽器的行為受到參數文件listener.ora的控制。該文件是一個文本文件。
Oracle對于文本類型的參數文件,大多數情況下是不支持熱加載的。例如數據庫的Pfile和listener.ora都是如此。因此,當我們調整了監聽器的參數,通常會先停止監聽器,再開啟監聽器,這樣監聽器就會重新讀取參數文件并按照新的參數運行。
調整監聽參數的有兩種途徑,可以通過Oracle提供的GUI界面完成,也可以通過手工修改listener.ora來完成。
使用界面GUI,就是使用Net Configuration Assistant來配置。配置完成后,配置程序會自動重新啟動監聽器程序,來加載修改的參數文件。如果采用手工修改listener.ora,就必須要手工的進行監聽程序關閉和啟動。
使用GUI可以滿足大部分的情況,而且可以避免拼寫錯誤引發的監聽器故障(監聽器不會檢查配置項目的正確與否)。但是,在一些比較復雜的情況下,比如一臺機器綁定多個IP的情況,或者RAC的復雜功能配置上,還是更多使用手工編寫listener.ora的方法。
start命令執行后,會自動運行一次status命令,命令執行結果如下
LSNRCTL> stop
正在連接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
命令執行成功
LSNRCTL> start
啟動tnslsnr: 請稍候...
TNSLSNR for 32-bit Windows: Version 11.2.0.1.0 - Production
系統參數文件為C:\app\Administrator\product\11.2.0\dbhome_1\network\admin\listener.ora
寫入c:\app\administrator\diag\tnslsnr\class11g\listener\alert\log.xml的日志信息
監聽: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
監聽: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=class11g)(PORT=1521)))
監聽: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
正在連接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
LISTENER 的 STATUS
------------------------
別名 LISTENER
版本 TNSLSNR for 32-bit Windows: Version 11.2.0.1.0 - Production
啟動日期 09-11月-2017 10:55:31
正常運行時間 0 天 0 小時 0 分 3 秒
跟蹤級別 off
安全性 ON: Local OS Authentication
SNMP OFF
監聽程序參數文件 C:\app\Administrator\product\11.2.0\dbhome_1\network\admin\listener.ora
監聽程序日志文件 c:\app\administrator\diag\tnslsnr\class11g\listener\alert\log.xml
監聽端點概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=class11g)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
服務摘要..
服務 "CLRExtProc" 包含 1 個實例。
實例 "CLRExtProc", 狀態 UNKNOWN, 包含此服務的 1 個處理程序...
服務 "Example_1" 包含 1 個實例。
實例 "sales", 狀態 UNKNOWN, 包含此服務的 1 個處理程序...
命令執行成功
c,reload
功能:重新加載配置文件,類似于重啟監聽器
lsnrctl提供了reload命令,可以在listener啟動的情況下,重新加載參數文件和SID信息。
reload命令執行結果如下
LSNRCTL> reload
正在連接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
命令執行成功
d,其他命令
通過help可以看到lsnrctl提供的其他功能命令
LSNRCTL> help
以下操作可用
星號 (*) 表示修改符或擴展命令:
start stop status
services version reload
save_config trace change_password
quit exit set*
show*
各個命令的功能簡述如下:
start - Start the Oracle listener
stop - Stop the Oracle listener
status - Display the current status of the Oracle listener
services - Retrieve the listener services information
version - Display the oracle listener version information
reload - This will reload the oracle listener SID and parameter files. This is equivalent to lsnrctl stop and lsnrctl start.
save_config - This will save the current settings to the listener.ora file and also take a backup of the listener.ora file before overwriting it. If there are no changes, it will display the message “No changes to save for LISTENER”
trace - Enable the tracing at the listener level. The available options are ‘trace OFF’, ‘trace USER’, ‘trace ADMIN’ or ‘trace SUPPORT’
spawn - Spawns a new with the program with the spawn_alias mentioned in the listener.ora file
change_password - Set the new password to the oracle listener (or) change the existing listener password.
show - Display log files and other relevant listener information.
set選項
LSNRCTL> set
set之后提供了以下操作
星號 (*) 表示修改符或擴展命令:
password rawmode
displaymode trc_file
trc_directory trc_level
log_file log_directory
log_status current_listener
inbound_connect_timeout startup_waittime
save_config_on_stop dynamic_registration
enable_global_dynamic_endpoint
show選項
LSNRCTL> show
show之后提供了以下操作
星號 (*) 表示修改符或擴展命令:
rawmode displaymode
rules trc_file
trc_directory trc_level
log_file log_directory
log_status current_listener
inbound_connect_timeout startup_waittime
snmp_visible save_config_on_stop
dynamic_registration enable_global_dynamic_endpoint
oracle_home pid
2,監聽器工作過程
一般監聽器作為一個獨立process在操作系統中運行,監聽在特定網絡端口(默認為:1521),等待客戶端請求的到來。注意:我們在客戶端配置命名服務的時候,輸入的1521也就是為了與監聽器程序建立連接。
當一個請求“如期而至”,監聽器對照已經注冊的服務列表,查找對應的數據庫實例信息,獲取到指定實例的ORACLE_HOME路徑。相當于表明可以進行連接。
客戶端與實例的交互不是直接的,是通過Server Process作為代理中介來實現的。所有指令SQL都是客戶端通過Server Process發送到實例中,這種體系結構是Oracle對于實例和數據庫文件一種保護機制。
當監聽器獲得請求之后,要從Oracle實例中分配一個Server Process與之對應。這里不同的Oracle連接方式存在一些差別。
如果是專用連接模式,也就是一個客戶端連接對應一個Server Process。監聽器就會向OS請求fork(創造)出一個Server Process,與監聽器嘗試交互。
如果是共享連接模式,也就是多個客戶端共享一個Server Process(注意:這里還不是連接池)。監聽器就會向Dispatcher進程(管理共享模式連接的進程)請求一個Server Process與之交互。
Server Process與監聽器的連接,實際上就是相互信息的交換。Server Process將自身在OS中的進程編號、連接地址信息發給監聽器。監聽器將客戶端信息傳遞給Server Process。
監聽器獲取到Server Process的信息之后,將其返回給客戶端連接程序。客戶端獲取到信息之后,進行重連接,根據返回的信息與Server Process在制定的服務器端口進行聯系。
直到這個時候,客戶端程序才將連接用戶名、密碼等信息發給Server Process,進行登錄驗證等操作。監聽器的工作也就到此結束。
這里面有一個技術細節,就是Server Process與客戶端連接的時候,是允許不使用1521端口的。具體連接的端口,是帶有隨機因素的。在9i版本Windows平臺下,如果安裝了防火墻并設置只允許1521端口通信,會帶來一些連接問題。好在在其他平臺上和之后的版本中,實現了一種端口共享技術,連接可以和監聽器一起使用1521端口。