【IT168技术文档】
db2diag.log是DB2中非常重要的诊断日志,一般出现问题后,首先就要查看db2diag.log文件。但是很多时候特别是在多分区数据库中,查看db2diag.log变得非常费时。因为所有分区所有应用程序的诊断日志都会写到DB2的诊断日志中。从DB2版本8.2开始,DB2提供了db2diag工具可以用来过滤查找特定的日志,您可以参见下面的文档获得使用db2diag的基本方法: http://www-900.ibm.com/cn/support/v...d=1807545B21000
有时候我们需要做一些更高级的过滤查询,以便帮助我们进一步诊断问题,该文章通过例子对于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.
db2diag工具非常强大,您可以查看DB2信息中心获得db2diag的进一步使用帮助:
http://publib.boulder.ibm.com/infocenter/db2luw/v8/ index.jsp?topic=/com.ibm.db2.udb.doc/core/r0011728.htm
参考资料:
1、DB2 Information Center: http://publib.boulder.ibm.com/infoc...uw/v8/index.jsp