Oracle中的TNS監聽器程序概念及其作用

Oracle監聽器listener是一個重要的數據庫服務器組件,在整個Oracle體系結構中,扮演着重要的作用。

 

監聽器Lisener功能

 

從當前的Oracle版本看,Listener主要負責下面的幾方面功能:

 

1、 監聽客戶端請求。監聽器運行在數據庫服務器之上,與Oracle實例(可爲多個)相關關聯,是一個專門的進程process,在windows的服務項目或者Linux的運行進程列表中,都會看到對應的運行進程。Windows上名爲TNSLSNR,Linux/Unix平臺上是lsnrctl。監聽器守候在服務器制定端口(默認爲:1521),監聽客戶端的請求。

2、 爲客戶端請求分配Server Process。監聽器只負責接聽請求,之後將請求轉接給Oracle Server Process。在Oracle的服務模式下,客戶端進程是不允許直接操作數據庫實例和數據,而是通過一個服務進程Server Process(也稱爲影子進程)作爲代理。監聽器接受到請求之後,就向操作系統(或者Dispatcher組件)要求fork(或分配)一個Server Process與客戶端相連。

3、 註冊實例服務。本質上將,listener是建立實例和客戶端進程之間聯繫的橋樑。Listener與實例之間的聯繫,就是通過註冊的過程來實現的。註冊的過程就是實例告訴監聽器,它的數據庫數據庫實例名稱instance_name和服務名service_names。監聽器註冊上這樣的信息,對客戶端請求根據監聽註冊信息,找到正確的服務實例名稱。目前Oracle版本中,提供動態註冊和靜態註冊兩種方式。

4、 錯誤轉移failover。Failover是RAC容錯的一個重要方面功能,其功能是在數據庫實例崩潰的時候,可以自動將請求轉移到其他可用實例上的一種功能。可以提供很大程度上的可用性(Availability)功能。這個過程中,發現實例已經崩潰,並且將請求轉移到其他實例上,就屬於是listener的功能。

5、 負載均衡衡量。在RAC架構中,Oracle實現了負載均衡。當一個客戶請求到來時,Oracle會根據當前RAC集羣環境中所有實例的負載情況,避開負載較高的實例,將請求轉移到負載較低的實例進行處理。在早期RAC版本中,負載輕重的衡量是根據監聽器當前維護連接數目來確定的,而不是實時查看多實例的負載。RAC環境中的監聽器之間進行溝通通信。

 

下面的部分,會從幾個方面對監聽器進行簡單介紹。

 

監聽器操作

 

監聽器在Windows和Linux/Unix平臺上,都是可以直接操作的。下面以Windows平臺操作爲例,其他平臺類似。

 

在命令行窗口(CMD),輸入lsnrctl,就可以進入監聽器控制窗口。

 

C:\Documents and Settings\Administrator>lsnrctl

 

LSNRCTL for 32-bit Windows: Version10.2.0.1.0 - Production on 26-12月-2010 21:5

3:04

 

Copyright (c) 1991, 2005, Oracle. All rights reserved.

 

歡迎來到LSNRCTL,請鍵入"help"以獲得信息。

 

LSNRCTL>

 

通過輸入命令help,可以查看支持的監聽器操作。下面僅介紹常用的幾個。

 

1、 查看當前監聽器狀態

敲入status,可以查看當前監聽器的狀態,對應操作日誌信息和服務註冊信息等內容。如下:

 

LSNRCTL> status

//連接監聽器的名稱和信息:主機名+監聽端口號

正在連接到(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=www-0e6111dff74)(PORT=1521)

))

LISTENER的STATUS

------------------------

別名                     LISTENER

版本                     TNSLSNR for 32-bit Windows: Version10.2.0.1.0 – Production//Listener版本信息,在一臺機器多實例的情況下,很重要!因爲版本對應向下兼容

啓動日期                 26-12月-2010 19:38:03//啓動服務時間

正常運行時間             天2小時23分51秒

跟蹤級別                 off //調試信息,可以設置針對監聽器的跟蹤

安全性                   ON: Local OS Authentication //表明啓動、關閉監聽器的操作權限是通過OS驗證實現的。也就意味着,可以對監聽器設置密碼項目,也是Oracle安全配置的一個重要方面;

SNMP                     OFF//SNMP協議開啓情況

監聽程序參數文件         D:\oracle\network\admin\listener.ora//使用的參數

監聽程序日誌文件         D:\oracle\network\log\listener.log//操作日誌位置

監聽端點概要...

 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=www-0e6111dff74)(PORT=1521)))

服務摘要..//當前已經註冊在監聽器中的服務列表

服務"PLSExtProc"包含1個例程。

 例程"PLSExtProc",狀態UNKNOWN,包含此服務的1個處理程序...

服務"orcl"包含1個例程。

 例程"orcl",狀態READY,包含此服務的1個處理程序...

服務"orclXDB"包含1個例程。

 例程"orcl",狀態READY,包含此服務的1個處理程序...

服務"orcl_XPT"包含1個例程。

 例程"orcl",狀態READY,包含此服務的1個處理程序...

命令執行成功

 

上面通過紅字,已經對結果進行一定程度說明。其中,需要額外注意的下面幾項內容。

 

監聽程序參數文件         D:\oracle\network\admin\listener.ora//使用的參數

 

監聽器啓動時依據參數文件的,當然沒有參數文件監聽器也是可以啓動,那時監聽器依據默認的行爲操作。這個參數指定了監聽器參數文件的位置,listener.ora。這個文件是一個文本類型參數文件,描述了監聽器監聽端口,主機名稱和靜態註冊信息。Listener.ora是隨着數據庫實例的建立之後,建立監聽器的過程中動態配置的。

 

監聽程序日誌文件         D:\oracle\network\log\listener.log//操作日誌位置

 

監聽器日誌,是一個記錄和描述監聽器工作和錯誤的信息庫。通過仔細研究日誌內容,可以幫助我們發現當前的監聽器的問題、解決連接故障和深入理解監聽器工作原理。

 

服務"orcl"包含1個例程。

 例程"orcl",狀態READY,包含此服務的1個處理程序...

 

上文中已經說明,監聽器有註冊功能,通過status命令(services命令同樣效果)。可以查看到當前有什麼服務被註冊上,用來檢查連接服務失敗,是常用的工具。

 

2、開啓/關閉監聽器

監聽器的行爲受到參數文件的控制,我們有時候需要調整監聽器的參數。調整監聽參數的方法,可以通過Oracle提供的GUI界面完成,還可以通過手工修改listener.ora來完成。

 

因爲參數文件listener.ora是一個文本文件。Oracle對於文本類型的參數文件,大多數情況下是不支持熱加載的。Pfile和listener.ora都是如此。

 

使用界面GUI,就是使用Net Configuration Assistant來配置。配置完成後,配置程序會自動重新啓動監聽器程序,來加載修改的參數文件。如果採用手工修改listener.ora,就必須要手工的進行監聽程序關閉和啓動。

 

LSNRCTL> stop

正在連接到(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=www-0e6111dff74)(PORT=1521)

))

命令執行成功

LSNRCTL> start

啓動tnslsnr:請稍候...

 

TNSLSNR for 32-bit Windows: Version10.2.0.1.0 - Production

系統參數文件爲D:\oracle\network\admin\listener.ora

寫入D:\oracle\network\log\listener.log的日誌信息

監聽: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=www-0e6111dff74)(PORT=1521)))

 

正在連接到(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=www-0e6111dff74)(PORT=1521)

))

LISTENER的STATUS

------------------------

別名                     LISTENER

版本                     TNSLSNR for 32-bit Windows: Version10.2.0.1.0 - Production

啓動日期                 26-12月-2010 22:32:34

正常運行時間             天小時分2秒

跟蹤級別                 off

安全性                   ON: Local OS Authentication

SNMP                     OFF

監聽程序參數文件         D:\oracle\network\admin\listener.ora

監聽程序日誌文件         D:\oracle\network\log\listener.log

監聽端點概要...

 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=www-0e6111dff74)(PORT=1521)))

服務摘要..

服務"PLSExtProc"包含1個例程。

 例程"PLSExtProc",狀態UNKNOWN,包含此服務的1個處理程序...

命令執行成功

 

這裏多說一句關於監聽器的參數配置。使用GUI可以滿足大部分的情況,而且可以避免拼寫錯誤引發的監聽器故障(監聽器不會檢查配置項目的正確與否)。但是,在一些比較複雜的情況下,比如一臺機器綁定多個IP的情況,或者RAC的複雜功能配置上,還是傾向於使用手工編寫listener.ora的方法。

 

此外,lsnrctl提示行還提供了reload命令,可以在listener啓動的情況下,重新加載文件和SID信息。但是筆者還是比較喜歡stop+start的組合。

 

如果是在windows平臺下,啓動關閉監聽器還可以在系統服務項目列表中操作,效果是一樣的。

 

轉載自:http://space.itpub.net/17203031/viewspace-682627

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章