db2diag的一些学习

1:位置


位于$INSTANCE_HOME/sqlib/db2dump
也可以用这种方法查看

get dbm cfg  show detail |grep di
或者
直接输入db2diag回车,最后一行

2:用途


db2diag.log是用来记录DB2数据库运行中的信息的文件。
可以通过此文件,查看记录的有关DB2数据库详细的错误信息。此文件也是不断增大的,需要定期进行清理。
当文件系统/home的使用率达到80%-90%左右时,应及时删除db2diag.log文件。 
请按以下正确步骤操作:

确认应用、DB2已经停止。
将原db2diag.log文件备份到其它文件系统下。 
删除db2diag.log文件。删除后,DB2会自动创建一个新的文件。


注意:如果你觉得以上操作不保险的话,Db2提供了自动归档db2diag.log的命令
db2diag -a 自动将该文件以日期时间命名


3:用法


1. 要显示 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 

2. 为显示 db2diag.log 文件中包含的时间戳“2004-11-02-11.00.907665-360”之后的所有信息,可用下述命令: 

db2diag -time 2004-11-02-11.00.907665-360 


3. 另外一个较有用的选项是“-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" 

获得关于这个错误的具体解释。


4. 为显示 db2diag.log 中所记录的严重错误,使用: 

db2diag -gi "level=severe" 

输出可参看例 4 中提供的。 

如果要得到有关该工具的更多选项的帮助信息,可使用: 

db2diag -h 

使用db2diag工具的高级选项过滤查找db2diag.log诊断日志记录 

4:再回首


db2diag.log是DB2中非常重要的诊断日志,一般出现问题后,首先就要查看db2diag.log文件。但是很多时候特别是在多分区数据库中,查看db2diag.log变得非常费时。因为所有分区所有应用程序的诊断日志都会写到DB2的诊断日志中。从DB2版本8.2开始,DB2提供了db2diag工具可以用来过滤查找特定的日志,
有时候我们需要做一些更高级的过滤查询,以便帮助我们进一步诊断问题,该文章通过例子对于db2diag中的高级选项做了介绍。 
正文 首先简单介绍db2diag.log中的条目构成,如下所示为一条标准的db2diag.log日志条目:
2014-04-19-03.15.40.477000+480 E526375H396        LEVEL: Error (OS)
PID     : 3052                 TID  : 3120        PROC : db2fmp.exe
INSTANCE: DB2                  NODE : 000
FUNCTION: DB2 UDB, oper system services, sqloSSemClose, probe:20
CALLED  : OS, -, unspecified_system_function      OSERR: 6
RETCODE : ECF=0x9000000C=-1879048180=ECF_INVALID_PARAMETER
          Invalid parameter

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"


下面是查看该文件时经常会碰到的一个片段(蓝色部分是为了便于讲解而加上去的编号): 
----------------------------------------------- 
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的相关问题。

--
1. 表示记这条日志时的时间戳 
2. 实例名. 该例子中的实例名是db2mpp 
3. 分区号. 在单分区的数据库中该值总为0 
4. 应用或代理的进程ID. 
5. 应用或代理的线程ID. 该值只有在windows平台上有效. 
6. 应用ID. 该值对应于LIST APPLICATIONS命令的输出.每一个应用都有唯一的应用ID. 
7. 组件名称(component). 
8. 报错或信息的功能模块名, 该功能模块从属于上面的组件. 
9. 功能模块的probe point. 对应于返回错误和信息的功能模块的源代码的位置. 
10. 诊断信息. 该例子中的db2diag.log文件来源于Windows平台, 所以dump的信息是反字节顺序的.为了把该信息转化为sqlcode, 您需要把2cfc ffff转化成为 ffff fc2c同时从十六进制转化为十进制.请注意该值并不是都能转化为有效的sqlcode的.


其中上面的黑体字部分是我们的每条诊断日志的不同列标识。其中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. 

5:级别

Diaglevel refers to the Diagnostic error capture level configuration parameter.

There are 5 levels:
0 - No diagnostic data captured
1 - Severe errors only
2 - All errors
3 - All errors and warnings
4 - All errors, warnings and informational messages
The default is at   3.

Change the diagnostic level with the command:
db2 update dbm cfg using DIAGLEVEL 4.

view the currrent level

[db2inst2@cognoswithdb2 db2dump]$ db2 get dbm cfg |grep Di
 Diagnostic error capture level              (DIAGLEVEL) = 3
 Diagnostic data directory path               (DIAGPATH) = /home/db2inst2/sqllib/db2dump/
 Directory cache support                     (DIR_CACHE) = YES
 Discovery mode                               (DISCOVER) = SEARCH
 Discover server instance                (DISCOVER_INST) = ENABLE
[db2inst2@cognoswithdb2 db2dump]$ 

Only change it to 4 if debugging , otherwise keep it at 3 , otherwise the db2diag.log file size will grow
When I had the DB2 instance level DIAGLEVEL set at 3 the db2diag.log message  at an instance crash was :
ADM0503C  An unexpected internal processing error has occurred.  ALL
DB2 PROCESSES ASSOCIATED WITH THIS INSTANCE HAVE BEEN SHUTDOWN.
Looking earlier on db2diag,log :
ZRC=0x870F0009=-2029060087=SQLO_EOF "the data does not exist"
DIA8506C Unexpected end of file was reached.

I turned on DIAGLEVEL =4  , and received increased information level information. Assisting in diagnosing the the problem


6:补充


db2diag 工具用于对 db2diag 日志文件中提供的大量信息进行过滤和格式化。过滤 db2diag 日志文件记录可缩短对问题进行故障诊断时查找所需记录的时间。

示例 1:按数据库名称过滤 db2diag 日志文件

如果实例中有若干数据库,并且您只希望显示与数据库“SAMPLE”有关的消息,那么可以按如下所示过滤 db2diag 日志文件:

db2diag -g db=SAMPLE
因此,将仅显示包含“DB: SAMPLE”的  db2diag 日志文件记录,如:
2006-02-15-19.31.36.114000-300 E21432H406         级别:错误
PID:940                  TID:660         PROC:db2syscs.exe
实例:DB2                      节点:000          数据库:SAMPLE
APPHDL:0-1056                 APPID:*LOCAL.DB2.060216003103
函数:DB2 UDB,基本系统实用程序,sqleDatabaseQuiesce,探测点:2
消息:ADM7507W  数据库停顿请求成功完成。


示例 4:过滤来自不同工具的消息

下列示例显示如何仅查看来自数据库管理器中的特定工具(或所有工具)的消息。受支持的工具包括:
  • ALL,这将返回来自所有工具的记录
  • MAIN,这将返回来自 DB2 常规诊断日志的记录,如 db2diag 日志文件和管理通知日志
  • OPTSTATS,这会返回与优化器统计信息有关的记录
要读取来自 MAIN 工具的消息,请使用以下命令:
db2diag -facility MAIN
要显示来自 OPTSTATS 工具的消息并滤出级别为 Severe 的记录,请使用以下命令:
db2diag -fac OPTSTATS -level Severe
要显示来自所有可用工具的消息并滤出实例为 harmistr 级别为 Error 的记录,请使用以下命令:
db2diag -fac all -g instance=harmistr,level=Error
要显示 OPTSTATS 工具中级别为 Error 并且以特定格式输出时间戳记和 PID 字段的所有消息,请使用以下命令:
db2diag -fac optstats -level Error -fmt " Time :%{ts} Pid :%{pid}"


示例 5:根据时间戳记合并文件和对记录进行排序

此示例说明如何合并两个或多个 db2diag 日志文件并按时间戳记排序。

以下是两个要合并的  db2diag 日志文件:
  • db2diag.0.log;包含具有如下时间戳记的 Level:Error 记录:
    • 2009-02-26-05.28.49.822637
    • 2009-02-26-05.28.49.835733
    • 2009-02-26-05.28.50.258887
    • 2009-02-26-05.28.50.259685
  • db2diag.1.log;包含具有如下时间戳记的 Level:Error 记录:
    • 2009-02-26-05.28.11.480542
    • 2009-02-26-05.28.49.764762
    • 2009-02-26-05.29.11.872184
    • 2009-02-26-05.29.11.872968
要合并这两个诊断日志文件并按时间戳记对记录进行排序,执行以下命令:
db2diag -merge db2diag.0.log db2diag.1.log -fmt %{ts} -level error
以下为合并及对记录进行排序的结果:
  • 2009-02-26-05.28.11.480542
  • 2009-02-26-05.28.49.764762
  • 2009-02-26-05.28.49.822637
  • 2009-02-26-05.28.49.835733
  • 2009-02-26-05.28.50.258887
  • 2009-02-26-05.28.50.259685
  • 2009-02-26-05.29.11.872184
  • 2009-02-26-05.29.11.872968
时间戳计被合并,并且按时间顺序排序。

示例 6:按时间戳记合并单台主机中的分割诊断目录路径文件以及对记录进行排序

此示例显示如何合并来自当前主机上三个数据库分区中的文件。要获取分割诊断目录路径,请按以下方式设置  diagpath 数据库管理器配置参数:
db2 update dbm cfg using diagpath '"$n"'
以下列示的是要合并的三个  db2diag 日志文件:
  • ~/sqllib/db2dump/NODE0000/db2diag.log
  • ~/sqllib/db2dump/NODE0001/db2diag.log
  • ~/sqllib/db2dump/NODE0002/db2diag.log
要合并这三个诊断日志文件并按时间戳记对记录进行排序,执行以下命令:
db2diag -merge

示例 7:合并多台主机和多个数据库分区中的分割诊断目录路径文件

在此示例中,通过使用以下命令设置  diagpath 数据库管理器配置参数,以按照物理主机和数据库分区来分割缺省诊断数据目录路径:
db2 update dbm cfg using diagpath '"$h$n"'
此示例说明了如何获得所有诊断日志中所有记录的输出,以及如何合并  bower 和  horton 这两个主机中每个主机上的三个数据库分区中的诊断日志文件。以下是六个  db2diag 日志文件的列表:
  • ~/sqllib/db2dump/HOST_bower/NODE0000/db2diag.log
  • ~/sqllib/db2dump/HOST_bower/NODE0001/db2diag.log
  • ~/sqllib/db2dump/HOST_bower/NODE0002/db2diag.log
  • ~/sqllib/db2dump/HOST_horton/NODE0003/db2diag.log
  • ~/sqllib/db2dump/HOST_horton/NODE0004/db2diag.log
  • ~/sqllib/db2dump/HOST_horton/NODE0005/db2diag.log
要输出所有这六个  db2diag 日志文件中的记录,请运行以下命令:
db2diag -global
bower 和  horton 这两个主机中每个主机上有三个数据库分区,要合并这些数据库分区中的诊断数据目录路径中的所有六个  db2diag 日志文件,并且根据时间戳记设置输出的格式,请执行以下命令:
db2diag –global –merge –sdir /temp/keon –fmt %{ts}
其中  /temp/keon 是  bower 和  horton 这两个主机共享的共享目录,在处理期间用来存储每个主机的临时合并文件。





http://www.dba-db2.com/2011/11/diaglevel-db2.html
http://publib.boulder.ibm.com/infocenter/db2luw/v9r5/index.jsp?topic=%2Fcom.ibm.db2.luw.admin.trb.doc%2Fdoc%2Fc0020701.html&lang%3Dzh_CN
















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值