(轉)DB2 db2diag.log 日志分析


DB2 db2diag.log 日志分析

原文:http://blog.csdn.net/lyjiau/article/details/52129997

db2diag.log是用來記錄DB2數據庫運行中的信息的文件。
可以通過此文件,查看記錄的有關DB2數據庫詳細的錯誤信息。此文件也是不斷增大的,需要定期進行清理。 
可以通過查看實例的配置參數DIAGPATH,來確定db2diag.log文件是放在哪個目錄下:db2 get dbm cfg 
如果Diagnostic data directory path(DIAGPATH) = /home/db2inst1/sqllib/db2dump,
則此文件是放在/home/db2inst1/sqllib/db2dump目錄下。
當文件系統/home的使用率達到80%-90%左右時,應及時刪除db2diag.log文件。 
請按以下正確步驟操作:
確認應用、DB2已經停止。
將原db2diag.log文件備份到其它文件系統下。 
刪除db2diag.log文件。刪除后,DB2會自動創建一個新的文件。
 
注意:如果你覺得以上操作不保險的話,Db2提供了自動歸檔db2diag.log的命令
db2diag -a 自動將該文件以日期時間命名
 
下面是查看該文件時經常會碰到的一個片段(藍色部分是為了便於講解而加上去的編號): 
----------------------------------------------- 
2003-04-24-13.56.13.453290(1) Instance:svtdbm2(2)    Node:100(3) 
PID:672(db2agent (SUN102) 100)(4)    TID:1(5)    Appid:*N100.svtdbm2.0074F4174930(6) 
buffer pool services(7) sqlbCheckAllocation(8) Probe:800(9)    Database:SUN102(10) 
----------------------------------------------- 
 
上面的藍色部分分別如下含義: 
1) timestamp (時間戳) 
2) instance (數據庫實例) 
3) partition number (分區號) 
4) process and database (進程和數據庫) 
5) thread Id (線程ID) 
6) application ID (應用程序ID) 
7) component (組件) 
8) function (函數) 
9) internal error point (內部錯誤指針) 
10) database (數據庫) 
 
了解這些基本含義有助於分析和診斷DB2的相關問題。
 
2. 要顯示 db2diag.log 文件中所有關於 119664 進程的信息,可利用以下命令: 
 
db2diag -pid 119664 
 
2004-10-11-19.01.56.555034-300 I7109918C313 LEVEL: Event 
PID : 119664 TID : 1 PROC : db2star2 
INSTANCE: dimi NODE : 000 
FUNCTION: DB2 UDB, config/install, sqlfLogUpdateCfgParam, probe:30 
CHANGE : CFG DBM: "Instance_Memory" <automatic> From: "11126" To: "11126" 
.... 
 
結合上述兩種用法,以下命令將抽取 db2diag.log 文件中分區 0 和 4 上所有 119664 進程的相關信息: 
 
db2diag -pid 119664 -n 0,4 
 
3. 為顯示 db2diag.log 文件中包含的時間戳“2004-11-02-11.00.907665-360”之后的所有信息,可用下述命令: 
 
db2diag -time 2004-11-02-11.00.907665-360 
 
 
4. 另外一個較有用的選項是“-rc”。對於以前的 DB2 版本,用戶經常希望了解的 db2diag.log 中的常出現十六進制返回碼所提示的信息,在 v8.2 上,如果使用該選項便可得到關於這些十六進制返回碼的解釋。如對於以下一段信息: 
 
2004-10-19-12.19.46.033037-300 I7202340C354 LEVEL: Severe 
PID : 139048 TID : 1 PROC : db2hmon 4 
INSTANCE: dimi NODE : 000 
FUNCTION: DB2 UDB, routine_infrastructure, sqlerFmpOneTimeInit, probe:100 
MESSAGE : DiagData 
DATA #1 : Hexdump, 4 bytes 
0x2FF225B0 : FFFF FBEE .... 
...... 
 
為了解十六進制 0xFFFF FBEE 所提示的信息,可使用下面的命令: 
 
db2diag -rc FFFFFBEE 
 
其輸出為: 
 
Input ECF string 'FFFFFBEE' parsed as 0xFFFFFBEE (-1042). 
ERROR: ../sqz/sqlzwhatisrc.C: 
Input ZRC 0xFFFFFBEE (-1042) cannot be identified as a V7 or V6 ZRC value 
 
即該返回碼提示的錯誤碼為:SQL1042C,用戶可使用: 
 
db2 "? sql1042" 
 
獲得關於這個錯誤的具體解釋。 
 
 
5. 為顯示 db2diag.log 中所記錄的嚴重錯誤,使用: 
 
db2diag -gi "level=severe" 
 
輸出可參看例 4 中提供的。 
 
 
如果要得到有關該工具的更多選項的幫助信息,可使用: 
 
db2diag -h 
 
使用db2diag工具的高級選項過濾查找db2diag.log診斷日志記錄 
 
內容 
提要 db2diag.log是DB2中非常重要的診斷日志,一般出現問題后,首先就要查看db2diag.log文件。但是很多時候特別是在多分區數據庫中,查看db2diag.log變得非常費時。因為所有分區所有應用程序的診斷日志都會寫到DB2的診斷日志中。從DB2版本8.2開始,DB2提供了db2diag工具可以用來過濾查找特定的日志,
有時候我們需要做一些更高級的過濾查詢,以便幫助我們進一步診斷問題,該文章通過例子對於db2diag中的高級選項做了介紹。 
正文 首先簡單介紹db2diag.log中的條目構成,如下所示為一條標准的db2diag.log日志條目: 
2005-12-26-19.09.14.702039+480 I84831569A398 LEVEL: Severe 
PID : 1060946 TID : 1 PROC : db2agent (XXXX) 0 
INSTANCE: db2inst1 NODE : 000 DB : XXXX 
APPHDL : 0-222 APPID: C0A86402.OD11.03F806110349 
FUNCTION: DB2 UDB, relation data serv, sqlrr_fetch, probe:20 
RETCODE : ZRC=0x80120086=-2146303866=SQLR_PRTCLE "DRDA Protocol Error" 
 
其中上面的黑體字部分是我們的每條診斷日志的不同列標識。其中FUNCTION包含:PRODUCT,COMPONENT,FUNCNAME,PROBE, 這幾個也是可以單獨搜索的列標志。 
 
利用db2diag工具的-g選項可以對每一個列標志進行搜索,下面是-g選項的說明: 
 
-g: 搜索符合搜索一系列“<列標志>=<列值>”條件的診斷日志記錄,條件中間使用逗號分開。搜索區分大小寫。 
-gi: 功能等同於-g,搜索不區分大小寫。 
-gv: 搜索不符合一系列“<列標志>=<列值>”條件的診斷日志記錄,條件中間使用逗號分開。搜索區分大小寫。 
-gvi:功能等同於-gv,搜索不區分大小寫。 
 
另外我們的條件表達式支持如下幾種: 
 
= 全字精確匹配查詢 
:= 部分匹配模糊查詢 
!= 查找不符合全字精確匹配查詢條件的記錄 
!:= 查找不符合部分匹配模糊查詢條件的記錄 
^= 選擇查找列中以后面的查找條件開頭的記錄 
!^= 選擇查找列中不以后面的查找條件開頭的記錄 
 
關於高級查找功能的幫助,您可以隨時通過"db2diag -h filter" 獲得。 
 
另外db2diag還對於特定的列標志提供了快捷選項,如LEVEL,可以使用-l選項指定,NODE可以使用-n選項指定。下面我們就以幾個例子演示一下如何使用高級查找功能: 
 
1、查找應用程序句柄APPHDL為0-222的所有診斷日志條目: 
 
db2diag -g APPHDL="0-222" 
 
2、查找應用程序句柄APPHDL為0-222在分區0上的所有診斷日志條目: 
 
db2diag -g APPHDL="0-222",NODE=000 
 
3、查找進程1060946的所有嚴重錯誤(Severe): 
 
db2diag -g PID=1060946,LEVEL=Severe 
 
4、查找所有FUNCTION名稱中包飯fetch的診斷日志條目: 
 
db2diag -g FUNCTION:=fetch 
 
5、查找所有component名稱以"base sys"開頭的診斷日志條目: 
 
db2diag -g "COMPONENT^=base sys" 
 
6、查找所有返回碼為"ZRC=0x80120086"的記錄: 
 
db2diag -g RETCODE:=0x80120086 
 
除了過濾查找之外,db2diag還可以格式化輸出。您可以指定查找結果的輸出格式。關於格式化輸出的詳細幫助,請使用"db2diag -h fmt"命令查看。下面簡單介紹一個例子: 
 
db2diag -time 2005-12-22 -node "0,1,2" -level "Severe, Error" |db2diag -fmt "Time: %{ts} Partition: %node Message Level:%{level} \nPid: %{pid} Tid: %{tid} Instance:%{instance}\nMessage: @{msg}\n" 
 
該命令將查找2005年12月22日以來在分區0,1,2上錯誤級別為Severe和Error的錯誤,並按照下面的格式輸出: 
 
Time: 2005-12-28-14.32.01.067843 Partition: 000 Message Level:Error 
Pid: 1871948 Tid: 1 Instance:db2inst1 
Message: ZRC=0x860F000A=-2045837302=SQLO_FNEX "File not found." 
DIA8411C A file "" could not be found. 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM