說說Oracle監聽器(一)

forrest_itpub發表於2016-12-03

一直想寫寫監聽器。

 

Oracle監聽器listener是一個重要的資料庫伺服器元件,在整個Oracle體系結構中,扮演著重要的作用。

 

監聽器Lisener功能

 

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

 

1、  監聽客戶端請求。監聽器執行在資料庫伺服器之上,與Oracle例項(可為多個)相關關聯,是一個專門的程式process,在windows的服務專案或者Linux的執行程式列表中,都會看到對應的執行程式。Windows上名為TNSLSNRLinux/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、  錯誤轉移failoverFailoverRAC容錯的一個重要方面功能,其功能是在資料庫例項崩潰的時候,可以自動將請求轉移到其他可用例項上的一種功能。可以提供很大程度上的可用性(Availability)功能。這個過程中,發現例項已經崩潰,並且將請求轉移到其他例項上,就屬於是listener的功能。

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

 

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

 

監聽器操作

 

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

 

在命令列視窗(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: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: Version 10.2.0.1.0 – Production //Listener版本資訊,在一臺機器多例項的情況下,很重要!因為版本對應向下相容

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

正常執行時間              0 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對於文字型別的引數檔案,大多數情況下是不支援熱載入的。Pfilelistener.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: Version 10.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: Version 10.2.0.1.0 - Production

啟動日期                  26-12-2010 22:32:34

正常執行時間              0 0 小時 0 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平臺下,啟動關閉監聽器還可以在系統服務專案列表中操作,效果是一樣的。

 

 

瞭解了監聽器工具,下期讓我們看看監聽器是怎麼工作的。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25097694/viewspace-2129623/,如需轉載,請註明出處,否則將追究法律責任。

相關文章