1:位置
位于$INSTANCE_HOME/sqlib/db2dump
也可以用这种方法查看
get dbm cfg show detail |grep di
或者
直接输入db2diag回车,最后一行
2:用途
db2diag.log是用来记录DB2数据库运行中的信息的文件。
可以通过此文件,查看记录的有关DB2数据库详细的错误信息。此文件也是不断增大的,需要定期进行清理。
当文件系统/home的使用率达到80%-90%左右时,应及时删除db2diag.log文件。
请按以下正确步骤操作:
可以通过此文件,查看记录的有关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
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日志条目:
有时候我们需要做一些更高级的过滤查询,以便帮助我们进一步诊断问题,该文章通过例子对于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"
其中上面的黑体字部分是我们的每条诊断日志的不同列标识。其中FUNCTION包含:PRODUCT,COMPONENT,FUNCNAME,PROBE, 这几个也是可以单独搜索的列标志。
利用db2diag工具的-g选项可以对每一个列标志进行搜索,下面是-g选项的说明:
-g: 搜索符合搜索一系列“<列标志>=<列值>”条件的诊断日志记录,条件中间使用逗号分开。搜索区分大小写。
-gi: 功能等同于-g,搜索不区分大小写。
-gv: 搜索不符合一系列“<列标志>=<列值>”条件的诊断日志记录,条件中间使用逗号分开。搜索区分大小写。
-gvi:功能等同于-gv,搜索不区分大小写。
另外我们的条件表达式支持如下几种:
= 全字精确匹配查询
:= 部分匹配模糊查询
!= 查找不符合全字精确匹配查询条件的记录
!:= 查找不符合部分匹配模糊查询条件的记录
^= 选择查找列中以后面的查找条件开头的记录
!^= 选择查找列中不以后面的查找条件开头的记录
= 全字精确匹配查询
:= 部分匹配模糊查询
!= 查找不符合全字精确匹配查询条件的记录
!:= 查找不符合部分匹配模糊查询条件的记录
^= 选择查找列中以后面的查找条件开头的记录
!^= 选择查找列中不以后面的查找条件开头的记录
关于高级查找功能的帮助,您可以随时通过"db2diag -h filter" 获得。
另外db2diag还对于特定的列标志提供了快捷选项,如LEVEL,可以使用-l选项指定,NODE可以使用-n选项指定。下面我们就以几个例子演示一下如何使用高级查找功能:
另外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 -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:
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.
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