[环境]
DB2 v8.2,9.1/9.5
UNIX/Linux平台
[问题描述]
在DB2 UDB
8.2发布之后,一个很有价值的工具被加入了DB2中,它就是db2pd。在监控数据库,或者进行问题诊断的时候,由于db2pd可以直接从DB2的内存
中读取信息,所以它比起snapshot来说开销更小,速度也更快。它可以收集DB2信息包括:锁,缓冲池,内存,事务等等。在问题诊断的时候,我们可以
利用db2pd中的一个很有特点的功能,帮助我们在第一时间内收集重要的诊断数据。这个功能就是callout script/db2cos。
本文将介绍如何利用这一有用的功能在UNIX/Linux平台上收集数据,和如何简单的定制db2cos脚本。
[解答]
1. db2pd/db2pdcfg -catch和db2cos介绍
在DB2 v8.2/9.1和9.5中,我们可以使用db2pd -catch命令(在DB2 9.1和9.5中的等价命令为db2pdcfg -catch),捕捉指定的SQL code/ZRC/ECF等错误代码,并且收集数据。命令的格式为:
db2pd -catch [clear|status|<errorCode>] [<action>] [count=<count>]
例如,如果要在一个锁超时错误发生时,调用db2cos脚本:
db2pd -catch locktimeout db2cos
在DB2实例中的$HOME/sqllib目录下有一个名为db2cos的脚本,这个路径是db2cos存放的缺省路径。执行了上面的命令之后,当锁超时发生时,这个db2cos脚本就会被执行。缺省的db2cos脚本会把一些重要的信息输出到一个外部文本文件中。
2. db2cos脚本介绍
DB2
安装后自带的缺省db2cos脚本有着简单的流程。DB2调用它的时候会同时传递给它一些参数。db2cos脚本通过这些参数得知调用自己的实例,进程,
时间点和函数等等信息。还有一个传入的参数叫做typeReason,它告诉db2cos被调用的原因是什么,例如数据损坏(DATA_COR),锁超时
(LOCKTIMEOUT),死锁(DEADLOCK)或者其他错误代码(SQLCODE)。
常见的传入参数有下面几个:
# instance : instance name
# database : database name
# dbpart : database partition number
# pid : process ID
# tid : thread ID
# function : function name of function that called the panic script
# component : component of the function
# probe : probe point
# timestamp : timestamp of when the script was called
# appid : application ID
# apphld : application handle
db2cos会遍历上面的参数,记录下他们的值,然后根据typeReason参数的定义,执行对应的动作。每次db2cos被调用,db2diag.log中都会有相应的记录。例如:
2008-03-13-23.47.21.893529+480 I54402G409 LEVEL: Event
PID : 18875 TID : 3086210752 PROC : db2agent (SAMPLE) 0
INSTANCE : tj04 NODE : 000 DB : SAMPLE
APPHDL : 0-11 APPID: *LOCAL.tj04.080330153000
FUNCTION : DB2 UDB, trace services, pdInvokeCalloutScript, probe:10
START : Invoking sqllib/db2cos script from global services sqlzRcToSqlca
2008-03-13-23.47.22.283571+480 I54812G384 LEVEL: Event
PID : 18875 TID : 3086210752 PROC : db2agent (SAMPLE) 0
INSTANCE : tj04 NODE : 000 DB : SAMPLE
APPHDL : 0-11 APPID: *LOCAL.tj04.080330153000
FUNCTION : DB2 UDB, trace services, pdInvokeCalloutScript, probe:20
STOP : Completed invoking sqllib/db2cos script
3. 用db2cos分析锁超时
使用默认的db2cos脚本就可以方便的分析锁超时问题。首先赋予db2cos脚本执行权限:
chmod u+x $HOME/sqllib/db2cos
然后使用db2pd -catch命令打开捕获开关。这个命令会告诉DB2在发生锁超时(lock timeout)的时候执行脚本db2cos。
db2pd -catch locktimeout
于是,这个缺省的db2cos脚本会在锁超时发生后,生成一个名为db2cos.rpt的文件在$HOME/sqllib/db2dump/下,其中的信息会对分析锁超时很有帮助。
4. db2cos和db2 trace一起使用
使用db2cos配合db2的trace命令,可以有效捕捉那些没有出现规律的问题。
在
实际工作中,有些问题并不是有规律的发生。它们并不能被轻易的重现。当它们再次发生的时候,如何收集到尽量完整的诊断数据,有时会困扰分析人员。db2
trace是一个强有力的跟踪工具,db2trc -l命令以循环的方式收集DB2 trace信息,它在缓存中只保留最新的trace信息。
简单的修改缺省的db2cos脚本,就可以让db2pd -catch配合db2trc -l使得问题发生时的关键跟踪数据被及时的保存起来。请看下面的示例。
如果有一个SQL30082的错误无规律的发生,我们需要分析当时到底发生了什么。首先修改缺省的db2cos脚本,在“SQLCODE”段后面增加两行保存和关闭trace的命令:
"SQLCODE")
db2trc dmp /tmp/db2trc.dmp
db2trc off
... ...
然后打开捕获SQL30082错误的开关,同时打开trace,等待问题发生。
db2pd -catch -30082
db2trc on -l 64M
当问题发生后,db2trc.dmp文件会被立即生成在/tmp/目录下面,同时db2trc off命令将trace关闭。这保证了在db2trc的缓存中保留的诊断数据可以在第一时间内被保存下来,而不会被后续的信息所覆盖。
5. 定制和改进db2cos脚本
有些问题,我们可能需要捕捉不只一次数据,例如锁超时和死锁。db2pd -catch有一个参数count可以控制db2cos最多被调用几次。例如,如何我们需要连续捕捉十次锁超时:
db2pd -catch locktimeout count=10
缺省的db2cos脚本会将所有信息写入到同一个db2cos.rpt文件中,不方便分析。我们可以为每一次锁超时指定不同的文件名。在db2cos脚本的开头,定义输出文件名:
COSOUT=$HOME/sqllib/db2dump/db2cos.rpt.`date +%Y%m%d.%H%M%S`
然后将"LOCKTIMEOUT")下面的每个输出文件名指向这个文件:
echo "Lock Timeout Caught" > $COSOUT
date >> $COSOUT
echo "Instance " $instance >> $COSOUT
... ...
每次生成的文件会形如 db2cos.rpt.20080314.172409。
6. DB2 9.5中,db2cos的缺省路径更改为$HOME/sqllib/adm/,如果这里找不到,那么$HOME/sqllib/bin/目录下面的db2cos会被执行。
db2cos是一个很有用的工具,它给分析人员和用户提供了更加自主的空间,为灵活诊断问题带来了便利。
分享到:
相关推荐
在描述中提到的"db2jcc4" jar文件,是专门为DB2 11.5设计的JDBC类型4驱动,它是一个纯Java实现,无需本地库即可运行,适用于跨平台的应用环境。 这个压缩包文件包含了以下关键组件: 1. **db2jcc4.jar**:这是核心...
总之,DB2数据库是一个强大而全面的数据库解决方案,其安装过程涉及到多个步骤和组件,如DB2OLEDB驱动,这些都是确保系统正常运行和与其他系统集成的基础。正确安装和配置DB2,可以为企业的数据管理提供稳定、高效的...
`db2cmd`是DB2提供的一种命令行接口,它创建了一个环境,使得用户可以在Windows操作系统上执行DB2相关的命令。通过启动`db2cmd`,我们可以访问与DB2相关的各种工具和命令,包括连接、查询、管理数据库等。 步骤1:...
这个版本的驱动提供了更好的性能、更丰富的功能以及对新JDBC特性的支持。例如,它可能包含了对Java SE 6及更高版本的支持,包括改进的连接池管理和新的数据库元数据查询等特性。 使用这些驱动,开发者需要在Java...
db2jcc4.jar适用于Java 6及更高版本,并且提供了更好的性能和功能特性。 2. **db2jcc.jar**: 虽然db2jcc4.jar是更现代的驱动,但db2jcc.jar是其较早的版本。这个驱动也属于JDBC Type 4,同样提供了纯Java实现的...
在您提供的标题和描述中,提到了三个重要的JAR文件:“db2jcc.jar”,“db2jcc_javax.jar”和“db2jcc_license_cu.jar”,它们是DB2 Java JDBC驱动的一部分。 1. **db2jcc.jar**:这是DB2的JDBC网络通信类库,包含...
3. **db2jcc4.jar**:这是DB2的一个更新版本,相对于db2jcc.jar,db2jcc4.jar提供了更现代的API支持和性能改进。它同样是一个Type 4 JDBC驱动,但可能包含新的特性、修复了已知问题以及对新版本DB2数据库的兼容性...
在这个部分,我们将深入探讨DB2的帮助系统以及DB2ir的功能和用法。 DB2的帮助系统为用户提供了一种方便的方式来查找和理解DB2的各种命令、函数、语法和特性。它包含了详尽的文档,涵盖了安装、配置、数据库管理和...
在Java应用程序中,为了连接到DB2数据库,我们需要使用特定的驱动程序,这就是db2jcc4.jar和db2jcc_license_cu.jar这两个文件的作用。下面将详细介绍这两个驱动文件以及与它们相关的知识点。 首先,db2jcc4.jar是...
描述中提到了三个关键的jar文件:"db2jcc_license_cu.jar", "db2java.jar", 和 "db2jcc.jar"。这些都是在Java应用程序中连接到DB2数据库所必需的组件。 1. **db2jcc_license_cu.jar**:这个文件包含了DB2 JDBC驱动...
本压缩包包含两个关键的Java数据库连接(JDBC)驱动文件:`db2jcc.jar`和`db2jcc_license_cu.jar`,它们是Java应用程序连接到DB2数据库所必需的组件。 `db2jcc.jar`是DB2 JDBC类型的4驱动程序,它实现了Java.sql和...
Java连接IBM DB2数据库通常需要两个关键的JAR文件,即`db2jcc.jar`和`db2jcc_license_cu.jar`。这两个文件在Java应用程序中起着至关重要的作用,因为它们提供了Java连接DB2数据库所需的驱动程序。以下是关于这些文件...
**IBM DB2 驱动详解** IBM DB2 驱动是用于连接到IBM DB2数据库的关键组件,尤其在32位...安装和配置好驱动后,可以通过多种编程语言实现与DB2的高效交互。对于更详细的使用和配置指导,可以参考提供的链接或官方文档。
在这个场景中,我们讨论的是一个基于Java编写的客户端工具,它为用户提供了方便的图形用户界面(GUI)来管理和操作DB2数据库。"squirrel-sql-3.3.0"是这个工具的一个版本,SQuirreL SQL Client是一个流行的开源SQL...
db2驱动包 db2jcc4.jar db2jcc4.jar db2java.jar db2jcc_javax.jar db2jcc_license_cisuz.jar db2jcc_license_cu.jar db2policy.jar,压缩包无加密,可以放心下载,良心资源。
"db2java" 指代的是与DB2数据库相关的Java接口和类库,而"db2jcc"(DB2 Java Connect Client)是IBM提供的一个纯Java实现的数据库驱动,适用于跨平台连接,无需安装特定于操作系统的客户端软件。 在压缩包内的文件...
在CentOS中,通过`groupadd`命令创建三个用户组`db2iadm1`、`db2fadm1`和`db2dadm1`,分别用于DB2实例管理员、DB2服务管理员和DB2数据库管理员。然后,通过`useradd`命令创建对应的用户,并指定家目录。 2. **解压...
DB2 是一个 relation database management system(关系数据库管理系统),广泛应用于企业级的数据存储和管理中。在 Linux 环境下,DB2 提供了丰富的命令行工具,用于管理和维护数据库。下面是常用的 DB2 命令。 1....
作为一款强大的数据库解决方案,DB2提供了高效、安全且可扩展的特性,适用于各种规模的企业,包括金融、电信、医疗等多个行业。本文将深入探讨DB2的核心功能、特性以及使用场景。 一、DB2核心功能 1. 数据存储与...
这个压缩包文件包含了关于DB2 V9.5版本的各种技术文档,涵盖了性能调整、管理指南、数据迁移、备份与恢复、服务器快速指南、连接服务器、连接快速入门、系统监控以及安全等方面的知识。 首先,"DB2V9.5性能调整.pdf...