Oracle 監聽器日誌解析
Oracle監聽器是駐留在Oracle例項所在伺服器上的獨立程式。作為客戶端程式連線例項的重要溝通元件,Oracle監聽器扮演著重要的地位。本篇將從監聽器日誌入手,分析閱讀監聽器日誌和日常監聽器常見行為。
1、Oracle監聽器功能
在筆者《說說Oracle監聽器》(http://space.itpub.net/17203031/viewspace-682627)系列中,已經比較清楚的介紹過Oracle監聽器的工作方式和體系地位。這裡簡要加以累述。
ü Oracle監聽器是一個獨立的作業系統程式,執行在作業系統程式列表中。擁有獨立於資料庫例項的啟動、終止命令控制檯(lsnrctl);
ü Oracle監聽器程式伺候在伺服器一個特定埠上(預設為1521),等待透過Oracle Net Service連入到伺服器的客戶端請求;
ü 另一方面,Oracle監聽器根據系統設定情況(各種環境變數)接受資料庫例項的服務列表。服務Service是對外提供的服務名稱,供本地命名服務依據Service名稱連入到其中。Service是對應資料庫SID,也就是指定的Oracle例項資料庫位置。建立和維護服務列表的過程叫做註冊register;
ü 註冊register過程分為兩種,靜態註冊和動態註冊。靜態註冊就是透過直接將服務名寫死在listener.ora檔案中。動態註冊是透過pmon後臺程式週期性的到監聽器來註冊;
ü 當一個client請求透過TCP協議訪問到特定埠的監聽程式,Oracle監聽器會對比請求中的Service名稱和掌握的註冊Service列表。如果不匹配,就拒絕。如果匹配,就定位到了特定的例項,包括Oracle_home地址;
ü 監聽程式不負責進行使用者名稱密碼的驗證,此時會向Oracle例項請求一個Server Process與client Process進行你個互動;
2、Oracle監聽器狀態資訊
在大部分平臺下,我們可以透過lsnrctl監聽器控制程式與監聽器進行互動和控制操作。其中,使用status命令,可以獲取到當前監聽器狀態資訊。
C:\Documents and Settings\Administrator>lsnrctl status
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 29-6月 -2011 13:41:27
Copyright (c) 1991, 2005, Oracle. All rights reserved.
正在連線到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=acca-119hs63yxc)(PORT=1521)
))
LISTENER 的 STATUS
------------------------
別名 LISTENER
版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ
ction
啟動日期 29-6月 -2011 10:51:26
正常執行時間 0 天 2 小時 50 分 3 秒
跟蹤級別 off
安全性 ON: Local OS Authentication
SNMP OFF
監聽程式引數檔案 C:\tool\oracle\oracle\product\10.2.0\db_1\network\admi
n\listener.ora
監聽程式日誌檔案 C:\tool\oracle\oracle\product\10.2.0\db_1\network\log\listener.log
監聽端點概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=acca-119hs63yxc)(PORT=1521)))
服務摘要..
服務 "OTSXDB" 包含 1 個例程。
例程 "ots", 狀態 READY, 包含此服務的 1 個處理程式...
服務 "OTS_XPT" 包含 1 個例程。
例程 "ots", 狀態 READY, 包含此服務的 1 個處理程式...
服務 "ots" 包含 1 個例程。
例程 "ots", 狀態 READY, 包含此服務的 1 個處理程式...
命令執行成功
命令status可以檢視當前監聽器的所有資訊。當前監聽器對應的服務包括三個,分別為otsxdb、otx_xpt和ots。三個服務名是對外使用的,本質上對應的Oracle例項都是ots。
監聽器程式工作都有對應的日誌資訊,在狀態顯示中,我們也可以看到日誌檔案位置(C:\tool\oracle\oracle\product\10.2.0\db_1\network\log\listener.log)。下面我們從一個新的日誌檔案,看監聽器工作。
3、Oracle監聽器日誌解析
下面是我們擷取的監聽器片段,篇幅原因,有省略。
以 pid=2736 開始
監聽: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=acca-119hs63yxc)(PORT=1521)))
Listener completed notification to CRS on start
TIMESTAMP * CONNECT DATA [* PROTOCOL INFO] * EVENT [* SID] * RETURN CODE
29-6月 -2011 10:51:27 * (CONNECT_DATA=(CID=(PROGRAM=)(HOST=)(USER=Administrator))(COMMAND=status)(ARGUMENTS=64)(SERVICE=LISTENER)(VERSION=169869568)) * status * 0
29-6月 -2011 10:51:39 * (CONNECT_DATA=(CID=(PROGRAM=)(HOST=)(USER=Administrator))(COMMAND=status)(ARGUMENTS=64)(SERVICE=LISTENER)(VERSION=169869568)) * status * 0
29-6月 -2011 10:52:00 * (CONNECT_DATA=(SID=OTS)(CID=(PROGRAM=C:\tool\oracle\oracle\product\10.2.0\db_1\perl\5.8.3\bin\MSWin32-x86-multi-thread\perl.exe)(HOST=ACCA-119HS63YXC)(USER=SYSTEM))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.1.39.93)(PORT=3126)) * establish * OTS * 12505
TNS-12505: TNS: 監聽程式當前無法識別連線描述符中所給出的 SID
29-6月 -2011 10:52:00 * service_register * ots * 0
29-6月 -2011 10:52:11 * (CONNECT_DATA=(CID=(PROGRAM=)(HOST=)(USER=Administrator))(COMMAND=status)(ARGUMENTS=64)(SERVICE=LISTENER)(VERSION=169869568)) * status * 0
29-6月 -2011 10:52:48 * service_update * ots * 0
29-6月 -2011 10:53:00 * service_update * ots * 0
(有省略。。。)
29-6月 -2011 10:53:17 * ping * 0
29-6月 -2011 10:53:18 * (CONNECT_DATA=(CID=(PROGRAM=)(HOST=)(USER=SYSTEM))(COMMAND=status)(ARGUMENTS=64)(SERVICE=(ADDRESS=(PROTOCOL=TCP)(HOST=acca-119hs63yxc)(PORT=1521)))(VERSION=169869568)) * status * 0
29-6月 -2011 10:53:29 * (CONNECT_DATA=(SID=OTS)(CID=(PROGRAM=C:\tool\oracle\oracle\product\10.2.0\db_1\perl\5.8.3\bin\MSWin32-x86-multi-thread\perl.exe)(HOST=ACCA-119HS63YXC)(USER=SYSTEM))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.1.39.93)(PORT=3141)) * establish * OTS * 0
29-6月 -2011 10:53:57 * (CONNECT_DATA=(SERVICE_NAME=ots)(CID=(PROGRAM=D:\PLSQL Developer\plsqldev.exe)(HOST=LIUZIYU-PC)(USER=Liuziyu))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.1.39.40)(PORT=1760)) * establish * ots * 0
29-6月 -2011 10:54:00 * (CONNECT_DATA=(SERVICE_NAME=ots)(CID=(PROGRAM=D:\PLSQL Developer\plsqldev.exe)(HOST=LIUZIYU-PC)(USER=Liuziyu))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.1.39.40)(PORT=1761)) * establish * ots * 0
29-6月 -2011 10:54:00 * (CONNECT_DATA=(SERVICE_NAME=ots)(CID=(PROGRAM=D:\PLSQL Developer\plsqldev.exe)(HOST=LIUZIYU-PC)(USER=Liuziyu))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.1.39.40)(PORT=1762)) * establish * ots * 0
29-6月 -2011 10:54:03 * service_update * ots * 0
29-6月 -2011 10:54:09 * service_update * ots * 0
日誌內容很多,我們分為重點的幾個部分。
在日誌頭,Oracle告知了我們日誌格式,使用*進行內容分割。
TIMESTAMP * CONNECT DATA [* PROTOCOL INFO] * EVENT [* SID] * RETURN CODE
其中包括連線時間時間,請求資料Data和其他相關事件資訊。這些可以幫助我們分析日誌內容。
ü 監聽器無法找到指定服務
對應片段:
29-6月 -2011 10:52:00 * (CONNECT_DATA=(SID=OTS)(CID=(PROGRAM=C:\tool\oracle\oracle\product\10.2.0\db_1\perl\5.8.3\bin\MSWin32-x86-multi-thread\perl.exe)(HOST=ACCA-119HS63YXC)(USER=SYSTEM))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.1.39.93)(PORT=3126)) * establish * OTS * 12505
TNS-12505: TNS: 監聽程式當前無法識別連線描述符中所給出的 SID
分析日誌格式後,可以發現在這個時間(10:52),Oracle監聽器接受到程式的訪問,程式來自主機(ACCA-119HS63YXC),使用system使用者登入,程式名稱是perl.exe。由於當前系統沒有註冊Service資訊,也沒有註冊SID資訊,所以不能夠連線識別對SID=OTS請求。
報錯無法識別SID。
ü 例項主動進行動態註冊
此時,資料庫伺服器先於監聽程式啟動,預設要等待很長的時間才會發生動態註冊。我們使用alter system register;命令手動啟動動態註冊過程。監聽程式上發現pmon程式的註冊程式,並且記錄在日誌中。
29-6月 -2011 10:52:00 * service_register * ots * 0
將資料庫sid=ots對應的三個例項進行註冊。
ü 使用者Client連線程式
當出現連線請求的時候,日誌記錄。
29-6月 -2011 10:55:19 * (CONNECT_DATA=(SERVICE_NAME=ots)(CID=(PROGRAM=D:\PLSQL Developer\plsqldev.exe)(HOST=LIUZIYU-PC)(USER=Liuziyu))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.1.39.40)(PORT=1782)) * establish * ots * 0
根據日誌格式,可以理解為從遠端(HOST=LIUZIYU-PC,IP=10.1.39.40)主機透過TCP協議訪問到監聽程式,要求連線到ots服務上。使用的程式是pl/sql developer。
ü 週期性pmon註冊
動態註冊是一種經常性的註冊行為,pmon每隔幾分鐘的時間就會向監聽器進行一次註冊動作。
29-6月 -2011 10:55:33 * service_update * ots * 0
4、結論
監聽器是我們經常打交道的資料庫元件之一。同資料庫的alert_log一樣,監聽器日誌能夠幫助我們解決很多日常故障問題。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31397003/viewspace-2134302/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 監聽器日誌解析(續)Oracle
- Oracle 監聽器日誌配置與管理Oracle
- oracle清理監聽日誌Oracle
- Oracle之外部表監聽日誌Oracle
- ORACLE停止監聽日誌檔案Oracle
- oracle監聽器日誌過大-處理辦法Oracle
- Oracle監聽日誌2g-監聽啟動報錯Oracle
- 管理監聽器日誌listener.log
- Oracle 11g 檢視監聽日誌Oracle
- rac scan listener log 清理監聽日誌 oracleOracle
- 如何更改監聽器日誌檔名稱
- 刪除oracle 11g的警告日誌和監聽日誌Oracle
- Oracle之備份和清理監聽日誌、告警日誌指令碼Oracle指令碼
- 【LISTENER】禁止產生監聽器日誌的方法
- 關閉監聽的日誌。
- Oracle 跟蹤/告警/監聽日誌的清理指令碼Oracle指令碼
- Oracle監聽日誌過大導致的問題Oracle
- oracle 監聽日誌停止寫入的解決方法Oracle
- 監聽日誌檔案的管理
- online清理oracle 監聽日誌推薦的做法Oracle
- oracle 監聽器配置Oracle
- 使用外部表訪問監聽日誌
- 定時清理監聽日誌的指令碼 。指令碼
- 清理資料庫監聽日誌最好方法資料庫
- oracle 監聽器學習Oracle
- 11G Oracle 關閉監聽XML日誌產生的方法OracleXML
- 【聽海日誌】之SCN與OracleOracle
- oracle 資料庫lsnrctl監聽的日誌路徑和trace檔案Oracle資料庫
- 監聽MySQL的binlog日誌工具分析:CanalMySql
- 如何線上操作監聽日誌listener.log
- Flume監聽Nginx日誌流向HDFS安裝配置Nginx
- 監聽器日誌檔案(listener.log)到底記錄了些啥
- 【聽海日誌】之Oracle SQL*LOADEROracleSQL
- 【聽海日誌】之ORACLE恢復案例Oracle
- 說說Oracle監聽器(一)Oracle
- 說說Oracle監聽器(二)Oracle
- oracle例項和監聽器Oracle
- ORACLE RAC 日誌結構解析Oracle