監聽器控制程式lsnrctl跟蹤trace file

flywiththewind發表於2016-07-07

 

Oracle監聽器是一個獨立的資料庫元件,在整個體系中扮演非常重要的作用。即使在windows平臺上,監聽器listener也被實現成為一個獨立的程式程式。

 

在一些與網路相關的故障中,監聽器相關故障佔了很大部分。瞭解監聽器的工作過程,分析每個環節出現問題的機率,是監聽器發生故障時我們常常需要做的事情。這個過程我們就需要使用監聽器trace功能。

 

本篇主要介紹如何使用lsnrctl工具獲取到監聽器跟蹤檔案(trace file),以及獲取的跟蹤級別。

 

1、環境介紹

 

本次我們選擇10g監聽器進行試驗。

 

 

Microsoft Windows XP [版本 5.1.2600]

(C) 版權所有 1985-2001 Microsoft Corp.

 

C:\Documents and Settings\Administrator>lsnrctl

 

LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 19-12-2011 20:31:59

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

 

歡迎來到LSNRCTL, 請鍵入"help"以獲得資訊。

 

 

注意,lsnrctl並不是監聽器程式本身,而是監聽器控制的一個小工具。藉助這個工具,我們可以操縱監聽器行為、設定監聽器引數。Lsnrctl命令列使用的命令很簡單。

 

 

LSNRCTL> help

以下操作可用

星號 (*) 表示修改符或擴充套件命令:

start               stop                status

services            version             reload

save_config         trace               change_password

quit                exit                set*

show*

 

 

此時,資料庫尚未啟動。監聽器處於執行狀態。

 

 

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

啟動日期                  19-12-2011 20:28:53

正常執行時間              0 0 小時 3 32

跟蹤級別                  off

安全性                    ON: Local OS Authentication

SNMP                      OFF

監聽程式引數檔案          D:\oracle\network\admin\listener.ora

監聽程式日誌檔案          D:\oracle\network\log\listener.log

(篇幅原因,有省略……

LSNRCTL>

 

 

此時,沒有進行跟蹤檔案輸出。

 

2、簡單跟蹤檔案生成

 

我們先介紹如何使用一般監聽跟蹤方法。該配置從lsnrctl設定。在lsnrctl配置中,有一些與trace相關的內容。

 

 

LSNRCTL> show

 show之後提供了以下操作

星號 (*) 表示修改符或擴充套件命令:

rawmode                     displaymode

rules                       trc_file

trc_directory               trc_level

log_file                    log_directory

(篇幅原因,有省略……

 

 

其中,以trc開頭的幾個引數顯然是與trace檔案操作生成有關。我們可以使用show命令加以顯示。

 

--跟蹤檔名稱

LSNRCTL> show trc_file

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

LISTENER 引數 "trc_file" 設為 listener.trc

命令執行成功

 

--跟蹤檔案目錄

LSNRCTL> show trc_directory

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

))

LISTENER 引數 "trc_directory" 設為 D:\oracle\network\trace

命令執行成功

 

--跟蹤程度

LSNRCTL> show trc_level

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

))

LISTENER 引數 "trc_level" 設為 off

命令執行成功

 

 

透過上面引數,我們可以配置跟蹤檔案的位置、名稱和跟蹤級別。

 

開啟跟蹤,我們可以使用trace命令。具體格式如下:

 

 

LSNRCTL> help trace

trace OFF | USER | ADMIN | SUPPORT [<listener_name>] : set tracing to the specif

ied level

 

 

注意,我們開啟跟蹤是有三個級別的,分別為useradminsupport級別。具體含義如下:

 

ü        Off或者數值0:表示對當前的監聽器不開啟跟蹤;

ü        User或者數值4user trace information;

ü        Admin或者數值10administration trace information

ü        Support或者數值16Oracle support Services trace information

 

通常,我們使用support級別作為跟蹤。

 

 

LSNRCTL> trace 12

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

))

開啟的跟蹤檔案: D:\oracle\network\trace\listener.trc

 

LSNRCTL> show trc_level

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

))

LISTENER 引數 "trc_level" 設為 admin

命令執行成功

 

 

從返回資訊和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

啟動日期                  19-12-2011 20:28:53

正常執行時間              0 0 小時 15 5

跟蹤級別                  admin

安全性                    ON: Local OS Authentication

SNMP                      OFF

監聽程式引數檔案          D:\oracle\network\admin\listener.ora

監聽程式日誌檔案          D:\oracle\network\log\listener.log

監聽程式跟蹤檔案          D:\oracle\network\trace\listener.trc

監聽端點概要...

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

(篇幅原因,有省略……

LSNRCTL>

 

 

我們可以在這個過程中,嘗試進行動態註冊或者新連線連入等操作。最後關閉監聽。

 

 

LSNRCTL> trace off

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

命令執行成功

 

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

啟動日期                  19-12-2011 20:28:53

正常執行時間              0 0 小時 17 16

跟蹤級別                  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)))

 

 

此時,我們到監聽目錄下,就可以找到監聽檔案。下面是片段:

 

 

nsglrespond: entry

nsdo: cid=3, pcode=67, *bl=97, *what=1, uflgs=0x0, cflgs=0x3

nsdo: rank=64, nsctxrnk=0

nsdo: nsctx: state=8, flg=0x100400c, mvd=0

nsdo: gtn=206, gtc=206, ptn=10, ptc=2011

nsdo: 97 bytes to NS buffer

nsdo: nsctxrnk=0

nsglrespond: exit

nsgldissolve: entry

nstimarmed: no timer allocated

nsdo: cid=3, pcode=66, *bl=0, *what=0, uflgs=0x0, cflgs=0x2

nsdo: rank=64, nsctxrnk=0

nsdo: nsctx: state=8, flg=0x1004008, mvd=0

nsevunreg: cid=3, sgt=0, rdm=2

 

 

上面每一行記錄,都對應監聽器程式的動作資訊。當然,直觀上是不容易讀懂的。我們以後再討論如何讀懂監聽跟蹤檔案內容。

 

3、帶時間資訊的監聽跟蹤檔案

 

上面部分中,我們已經獲得了簡單的跟蹤檔案。但是我們診斷問題的時候,通常是希望得到每個階段操作執行時間的長短,從而發現問題瓶頸。

 

例如:我們發現透過監聽器連線速度很慢,但是繞過監聽器直接連線的速度很快。說明連線操作中,一個或者幾個環節存在效能問題。具體是哪個?還是需要進一步時間間隔判斷。

 

我們想要獲得時間資訊,需要配置兩個引數在listener.ora檔案中。

 

 

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =     

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

    )

  )

 

TRACE_TIMESTAMP_LISTENER=true

TRACE_LEVEL_LISTENER=16

 

 

首先,需要在引數檔案listener.ora中,加入兩個引數取值。其中trace_timestamp_<listener_name>表示是否開啟跟蹤時間功能。如果設定為true/on,表示記錄跟蹤事件的時候,同時會記錄上具體的時間。

 

另一個引數trace_level_<listener_name>表示啟動監聽程式時的跟蹤級別。要讓這兩個引數生效,需要reload或者重新啟動監聽器。

 

 

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的日誌資訊

寫入D:\oracle\network\trace\listener.trc的跟蹤資訊

監聽: (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 - Produ

ction

啟動日期                  19-12-2011 21:47:12

正常執行時間              0 0 小時 0 1

跟蹤級別                  support

安全性                    ON: Local OS Authentication

SNMP                      OFF

監聽程式引數檔案          D:\oracle\network\admin\listener.ora

監聽程式日誌檔案          D:\oracle\network\log\listener.log

監聽程式跟蹤檔案          D:\oracle\network\trace\listener.trc

(篇幅原因,省略部分……

 

LSNRCTL> trace 0

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

))

命令執行成功

LSNRCTL> trace 16

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

))

開啟的跟蹤檔案: D:\oracle\network\trace\listener.trc

命令執行成功

 

 

此時生成的trace檔案中,有如下內容:

 

 

[19-12-2011 21:53:40:281] nsglrespond: entry

[19-12-2011 21:53:40:281] nsdo: entry

[19-12-2011 21:53:40:281] nsdo: cid=5, pcode=67, *bl=97, *what=1, uflgs=0x0, cflgs=0x3

[19-12-2011 21:53:40:281] nsdo: rank=64, nsctxrnk=0

[19-12-2011 21:53:40:281] nsdo: nsctx: state=8, flg=0x100400c, mvd=0

[19-12-2011 21:53:40:281] nsdo: gtn=206, gtc=206, ptn=10, ptc=2011

[19-12-2011 21:53:40:281] nsdo: 97 bytes to NS buffer

[19-12-2011 21:53:40:281] nsdo: nsctxrnk=0

[19-12-2011 21:53:40:281] nsiooverflow: entry

[19-12-2011 21:53:40:281] nsdo: normal exit

[19-12-2011 21:53:40:281] nsglrespond: exit

[19-12-2011 21:53:40:281] nsgldissolve: entry

[19-12-2011 21:53:40:281] nsdisc: entry

[19-12-2011 21:53:40:281] nsclose: entry

 

 

記錄在毫秒級別的跟蹤資訊。

 

4、結論

 

監聽器是一個涉及網路、Oracle例項、連線、客戶端和Oracle Net複雜元件。我們遇到的很多問題,根源其實都與監聽器有或多或少的關係。掌握跟蹤檔案,對於監聽器診斷至關重要。

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

相關文章