一、db2cklog
使用db2cklog工具来检查归档日志文件。
检查归档日志文件可确保需要前滚恢复时已知正常的日志文件可用,并且恢复操作不会因为日志文件存在问题而失败。
db2cklog工具读取单个日志文件或一定范围的编号的日志文件并检查文件的内部有效性。如果归档日志文件未通过验证并带有错误消息或返回了警报,那么不能在前滚恢复期间使用该日志文件。未通过验证的归档日志文件无法修复。
需要对归档日志文件具有读许可权,以便db2cklog工具可读取日志文件并执行检查。只有已关闭的日志文件(如归档日志文件)才能通过验证。对于仍处于活动状态的日志文件运行此工具,此工具无法准确检查该文件,并且将受到一条警报,以便知道此文件仍处于活动状态。
使用db2cklog命令时不应指定完整日志文件名,而应仅指定包含在日志文件名中的数字标识。如,S0000001.LOG日志文件的数字标识为1,检查该日志文件,应指定db2cklog 1。如果这些归档日志文件不在当前目录中,要使用ARCHLOGPATH参数添加这些日志文件的相对或绝对路径。
要检查单个归档日志文件:如:
db2cklog 1 ARCHLOGPATH /home/amytang/tests.
要检查一定范围的归档日志文件:如:
db2cklog 0 to 5 ARCHILOGPATH /home/nrichers/tests。
db2cklog对通过验证的任何文件的返回码为0,如果指定了一定范围的编号归档日志文件,那么db2cklog将按顺序读取每个文件,对每个文件执行检查并发出返回码。当遇到第一个错误时停止,即使指定了一定范围的日志文件并且还有其他文件未检查也会停止。发现错误时返回的DBT消息可提供有关归档日志文件未通过验证的原因的更多消息,但无法修正无效日志文件。
二、db2dart
db2dart命令验证数据库及其对象的体系结构是否正确。还可以使用它来显示数据库控制文件的内容,以便从其他情况下可能无法访问的表中抽取数据。
使用不带任何参数的db2dart命令查看所有可能的选项。
缺省情况下,db2dart实用程序将创建名为databaseName.RPT的报告文件。对于单一分区数据库分区环境,将在当前目录中创建该文件。对于多分区数据库分区环境,将在诊断目录的子目录中创建该文件。该子目录称为DART####,其中####是数据库分区号。
使用db2dart必须确保没有用户连接数据库。db2dart实用程序通过直接从磁盘中读取数据库中的数据和元数据来对其进行访问。因此,决不能对仍具有活动连接的数据库运行该工具。如果存在活动连接,那么该工具将不知道缓冲池中的页面或内存中的控制结构,可能会报告假的错误结果。同样,如果对需要进行崩溃恢复或尚未完成前滚恢复的数据库运行db2dart,由于磁盘上的数据性质不一致,可能会导致类似的不一致情况。
>>-db2dart--database-name--+---------------------+-------------><
'-action--+---------+-'
'-options-'
1、ACTIONS:
(1)、Inspection actions:
/DB:默认选项,检查整个数据库。
/T:检查一个或多个表。需要两个输入参数:table space ID(/TSI)和table object ID(/OI)或a list of table object IDs或table name(/TN)。
/TSF:检查table space files和containers。
/TSC:检查一个或多个表空间的table space constructs,但是不检查表。需要一个输入参数:table space ID(/TSI)或a list of table space IDs。
/TS:检查一个或多个表空间和其中的表。需要一个输入参数:table space ID(/TSI)或a list of table space IDs。
/ATSC:检查所有表空间的constructs,但是不检查表。
(2)、Date formatting actions:
/DD: Dumps formatted table date。需要五个输入参数:table object ID(/OI)或table name(/TN)、table space ID(/TSI)、page number to start with(/PS)、number of pages(/NP)、verbose choice(/V Y/N 其中:Y:Verbose,N:No verbose)。
/DI: Dumps formatted index date。需要五个输入参数:table object ID(/OI)或table name(/TN)、table space ID(/TSI)、page number to start with(/PS) 、number of pages(/NP)、verbose choice(/V Y/N)。
对于分区表上的非分区索引,/DI使用SYSCAT.INDEXES的INDEX_OBJECTID和TBSPACEID作为前两个输入参数(/OI和/TSI)。这种情况下不支持table name(/TN)选项。
对于分区表上的分区索引,/DI使用SYSCAT.DATAPTITIONS的PARTITIONOBJECTID和TBSPACEID。这种情况同样不支持table name(/TN)选项。
/DM:Dumps formatted block map data。需要五个输入参数:table object ID(/OI)或table name(/TN)、table space ID(/TSI)、page number to start with(/PS)、number of pages(/NP)、verbose choice(/V Y/N)。The data shows whether a block has been reclaimed for use by the table space after a reorganization to reclaim multidimensional clustering(MDC)table blocks that were empty.
/DP:以十六进制形式Dumps pages。
对于DMS表空间,需要三个输入参数:table space ID(/TSI)、page number to start with(/PS)、number of pages(/NP)。
对于SMS表空间,需要五个输入参数:table space ID、object ID、page number to start with、number of pages、object type。
/DTSF:Dumps formatted table space file information。
/DDEL:Dumps formatted table data in delimited ASCII format。需要四个输入参数:table object ID(/OI)或table name(/TN)、table space ID(/TSI)、page number to start with(/PS)、number of pages(/NP)。
Dump的delimited ASCII文件使用数据库代码页进行编码,db2dart命令不执行代码页转换。
/DDEL参数只支持下面几种列类型,如果表中包含其他类型的列,这些列将会跳过,不被包含在delimited ASCII文件中:
SMALLINT、FLOAT、REAL、INTEGER、TIME、DECIMAL、CHAR()、VARCHAR()、DATE、TIMESTAMP、BIGINT。
如果CHAR和VARCHAR类型的列包含二进制数据,或者使用FOR BIT DATA定义,/DDEL参数生成的DEL文件中将包含二进制数据。当使用LOAD将DEL文件进行装入时,要确保使用delprioritychar选项进行修改。当使用IMPORT将DEL文件进行导入表时,确保指定delprioritychar codepage=x(x是输入数据集的代码页)选项进行修改。
/DHWM:Dumps high water mark information。需要一个输入参数:table space ID(/TSI).
/DXA:以十六进制形式Dumps formatted XML column data。需要五个输入参数:table object ID(/OI)或table name(/TN)、table space ID(/TSI)、page number to start with(/PS)、number of pages(/NP)、verbose choice(/V Y/N)。
/LHWM:降低高水位的建议。需要两个输入参数:table space ID(/TSI)、number of pages(wanted high water mark)(/NP)。/LHWM选项不支持系统编目表空间。
(3)、Repair actions
/ETS:扩展表限制(only 4KB 的DMS表空间)。需要一个输入参数:table space ID(/TSI)。
/MI:标记索引无效。指定这一参数时数据库必须offline。需要两个输入参数:table space ID(/TSI)、index object ID(/OI)。对于分区索引,这些值可以从SYSCAT.INDEXPARTITIONS的INPARTITIONOBJECTID和INDPARTITIONTBSPACEID获得。
/RHWM:降低高水位through empty SMP extents。指定这一参数时数据库必须offline。需要一个输入参数:table space ID(/TSI)。不支持系统编目表空间。
(4)、Change state actions
/CHST:改变数据库状态。指定这一参数时,数据库必须offline。需要一个输入参数:database backup pending state(/WHAT DBBP OFF/ON)。
示例:
1、检查T表
[db2inst@localhost ~]$ db2dart sample /T /TSI 3 /TN T
The requested DB2DART processing has completed successfully!
Complete DB2DART report found in:
/home/db2inst/sqllib/db2dump/DART0000/SAMPLE.RPT
2、dump格式化的表空间文件信息
[db2inst@localhost ~]$ db2dart sample /DTSF
The requested DB2DART processing has completed successfully!
Complete DB2DART report found in:
/home/db2inst/sqllib/db2dump/DART0000/SAMPLE.RPT
三、db2diag
db2diag工具用于对db2diag日志文件中的大量信息进行过滤和格式化。以缩短查找所需记录的时间。
示例1:按数据库名称过滤db2diag日志文件。
db2diag –g db=SAMPLE
示例2:按进程标识过滤db2diag日志文件。
以下命令用来显示进程标识(PID)为2200,并且在分区0、1、2、或3上运行的进程生成的所有严重错误消息:
db2diag –g level=Severe,pid=2200 –n 0,1,2,3
也可写作:db2diag –l severe –pid 2200 –n 0,1,2,3
注意:-g选项指定区分大小写的搜索,所以此处“Server”写作“server”会失败。
示例3:格式化db2diag工具输出
以下命令过滤2012年1月1日之后发生,并且包含分区0、1、2上记录的所有非严重错误和严重错误的所有记录。输出内容格式化为:时间戳记、分区号和级别出现在第一行,而PID、TID和实例名出现在第二行上,之后是错误消息:
db2diag -time 2012-01-01 –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”
示例4:过滤来自不同工具的消息
仅查看来自数据库管理器中的特定工具(或所有工具)的消息。受支持的工具包括:
l ALL:返回来自所有工具的记录。
l MAIN:返回来自DB2常规诊断日志的记录,例如db2diag日志文件和管理通知日志。
l 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 -merge db2diag.0.log db2diag.1.log -fmt %{ts} -level error
示例6:按时间戳记合并单台主机中的三个数据库分区中的文件。
以下是要合并的三个db2diag日志文件的列表:
l ~/sqllib/db2dump/NODE0000/db2diag.log
l ~/sqllib/db2dump/NODE0001/db2diag.log
l ~/sqllib/db2dump/NODE0002/db2diag.log
要根据时间戳记合并这三个诊断日志文件并对记录进行排序:
db2diag -merge
示例7:合并多台主机和多个数据库分区中的诊断日志文件
bower和horton两台主机中每个主机上有三个数据库分区的诊断日志文件:
l ~/sqllib/db2dump/HOST_bower/NODE0000/db2diag.log
l ~/sqllib/db2dump/HOST_bower/NODE0001/db2diag.log
l ~/sqllib/db2dump/HOST_bower/NODE0002/db2diag.log
l ~/sqllib/db2dump/HOST_horton/NODE0003/db2diag.log
l ~/sqllib/db2dump/HOST_horton/NODE0004/db2diag.log
l ~/sqllib/db2dump/HOST_horton/NODE0005/db2diag.log
要获得所有诊断日志中所有记录:
db2diag -global
要合并这些数据库分区中的所有db2diag日志文件,并根据时间戳记设置输出格式:
db2diag -global -merge -sdir /temp/keon -fmt %{ts}
其中/temp/keon是bower和horton这两个主机共享的共享目录,在处理期间用来存储每个主机的临时合并文件。
示例8:仅过滤和合并最新的诊断日志条目
过滤db2diag日志文件记录以仅显示特定数目的最新条目。显示分区数据库环境(共3个分区)中每个分区的5个最新格式化记录并按时间戳记进行合并和格式化:
db2diag -lastrecords 5 -global -merge -sdir /home/vbmithun -fmt %{ts}
仅返回最新的10个记录中具有严重消息级别的记录:
db2diag db2diag.log -lastrecords 10 -level Severe -fmt %{ts}
实例9:归档无实例客户机上的db2diag日志文件
从 V9.7 FP4 开始,IBM® Data Server Driver Package 和 IBM Data Server for ODBC and CLI 提供了 db2diag –archive(或 –A)选项。此选项使您能够归档无实例客户机上的诊断日志文件。如:
db2diag -A
db2diag:Moving “/home/usr1/clidriver/db2dump/db2diag.log”
to “/home/usr1/clidriver/db2dump/db2diag.log_2010-09-14-01.16.26”
如果指定除-archive或-A之外的选项,将返回错误消息。
四、db2greg
在UNIX和Linux平台上,可以使用db2greg命令来查看全局注册表。
在DB2 V9.7及更高版本中,DB2全局概要文件注册表并非在文本文件
全局注册表只存在于UNIX和Linux平台上:
对于root安装,全局注册表文件为/var/db2/global.reg。
对于非root安装,全局注册表文件为$HOME/sqllib/global.reg,其中$HOME是非root用户的主目录。
全局注册表由以下三种不同记录类型组成:
“服务”:服务记录包含产品级别的信息,如版本和安装路径;
“实例”:实例记录包含实例级别的信息,如实例名、实例路径、版本和“引导时启动”标志;
“变量”:变量记录包含变量级别的信息,如变量名和变量值;
注释。
可使用db2greg工具查看全局注册表。此工具位于sqllib/bin和bin下的install目录中。可使用db2greg工具编辑全局注册表。
示例:
1、查看“服务”信息:
[db2inst@localhost ~]$ db2greg -getservrec service=DB2
Retrieved record:
Service = |DB2|
Version = |9.7.0.7|
InstallPath = |/opt/ibm/db2/V9.7|
GCFModule = |N/A|
Comment = |N/A|
FixpackNum = 7
InstallerUID = 0
InterimFixLetter = N/A
Timestamp = 1354816731
SpecialInstallNumber = 0
2、查看“实例”信息:
[db2inst@localhost ~]$ db2greg -getinstrec instancename=db2inst
Retrieved record:
Service = |DB2|
Version = |9.7.0.7|
InstanceName = |db2inst|
InstancePath = |/home/db2inst/sqllib|
Usage = |N/A|
StartAtBoot = 1
Maintenance = 0
InstallPath = |/opt/ibm/db2/V9.7|
RemoteProf = |N/A|
Comment = |N/A|
五、db2level
db2level命令用来确定DB2实例的版本和修订包级别。
六、db2look
创建一个结构相同的数据库很多时候是非常有利的。例如,不用在生产环境下测试新的应用和恢复计划,而是创建一个与之结构和数据都相似的测试环境,在测试环境上进行测试。这样,生产环境就不会受到测试所带来的性能影响以及意外的数据破坏。此外,当调查一个故障(例如不合法的结果、性能问题等)时,在一个与生产环境相同的测试环境上进行调试都要相对容易一些。
可以使用db2look工具提取需要的DDL语句以在另外一个数据库中重新构建数据库对象。也可以使用db2look工具生成需要的SQL语句以复制统计信息、数据库配置信息、数据库管理器配置信息以及注册表变量。这是非常重要的,因为新的数据库可能不会非常精确的包含同样的数据集,但是仍然希望使用相同的访问计划。
示例:
1、生成test数据库中,user1用户创建的所有对象的DDL,并输出到db2look.sql文件中:
db2look –d test –u user1 –e –o db2look.sql
2、生成test数据库中,user1用户创建的,模式名为ianhe的所有对象的DDL,并输出到db2look.sql文件中:
db2look –d test –u user1 –z ianhe –e –o db2look.sql
3、生成UPDATE语句,以复制test数据库中,user1用户创建的数据库对象的统计信息,并输出到db2look.sql文件中:
db2look –d test –u user1 –m –o db2look.sql
4、生成test数据库中,user1用户创建的对象的DDL语句和复制统计信息的UPDATE语句,输出到db2look.sql文件中:
db2look –d test –u user1 –e –m –o db2look.sql
5、生成test数据库中所有用户对象的DDL语句,输出到db2look.sql文件中:
db2look –d test –a –e –o db2look.sql
-a选项生成所有creators的统计信息,如果同时指定了-u,则-u选项被忽略。
6、生成test数据库中所有用户定义的分区组、buffer pools和表空间的DDL语句,并输出到db2look.sql文件中:
db2look –d test –l –o db2look.sql
-l选项生成:数据库分区组、bufferpools和表空间信息。
7、生成test数据库的优化器相关的数据库和数据库管理器配置参数的UPDATE语句以及优化器相关的注册表变量的db2set语句,输出到db2look.sql文件:
db2look –d test –f –o db2look.sql
-f选项生成配置参数和环境变量
8、数据库为test,生成:所有对象的DDL语句、用于复制所有表和索引的统计信息的UPDATE语句、GRANT授权语句、优化器相关的数据库和数据库管理器配置参数的UPDATE语句、优化器相关的注册表变量的db2set语句、所有用户定义的数据库分区组和buffer pools以及表空间的DDL语句。输出到db2look.sql文件:
db2look –d test –a –e –m –l –x –f –o db2look.sql
-x选项generate authorization DDL for existing granted privileges, excluding the original definer of the object
9、生成test数据库中所有用户对象的DDL语句,并以%作为分界符(默认为“;”),输出到db2look.sql文件中:
db2look –d test –a –e –td % -o db2look.sql
10、生成test数据库中所有对象授权的DDL语句,包括original creator创建的对象(这种情况下,在对象创建时由SYSIBM授权)。输出到db2look.sql文件中:
db2look –d test –xd –o db2look.sql。
11、生成test数据库对象的DDL语句,不包括create view语句:
db2look –d test –e –noview –o db2look.sql
12、生成test数据库中与指定表相关的对象的DDL语句:
db2look –d test –e –t tabl –o db2loog.sql
13、生成federated数据库FEDDEPART中所有对象(federated和non-federated)的DDL语句。
db2look –d feddepart –e –wrapper fedwrap
14、生成test数据库中所有用户对象的DDL语句。同时导出XSR对象到目录/home/ofer/ofer/。
db2look –d test -a –e –xs –xdir /home/ofer/ofer。
15、生成test数据库中WLM详细的DDL语句:
db2look –d test –wlm
七、db2ls
在UNIX和Linux上,列出系统上安装的DB2数据库产品。
该命令可以列出DB2数据库产品在系统上安装的位置和DB2数据库产品的版本;可以列出特定安装路径上的所有或指定的DB2数据库产品和组件。
要列出DB2数据库产品在系统上安装的路径和版本:db2ls
要列出特定安装路径上的DB2数据库产品或组件:
db2ls –q –p –b baseInstallDirectory
-q:必须指定。指明正在查询DB2产品或组件。
-p:指定列出数据库产品而不是列出组件,如果不指定,则列出各个数据库组件。
-b:指定安装目录。如果不是在安装目录下执行命令,则此参数必须指定。
八、db2pd
db2pd命令用来诊断故障,因为它可以迅速的返回内存中的即时信息。
db2pd工具收集信息不需要任何latches(锁存器),也不需要使用任何引擎资源。因此,当db2pd收集信息时,它可能会检索正在更改的信息。这样,收集到的数据可能不完全准确。如果遇到正在更改的内存指针,可使用信号处理程序来防止db2pd异常结束。这可能会导致输出中出现如下消息“Changing data structure forced command termination”。尽管如此,该工具对于故障诊断非常有用。在不锁存的情况下收集信息有两个好处:检索速度更快并且不会争用引擎资源。
当特定的SQLCODE、ZRC code或ECF code发生时,可以使用db2pdcfg –catch命令捕获数据库管理器系统信息。当errors被捕获时,db2cos(callout script)被调用。
例如,如果要在一个锁超时错误发生时,调用db2cos脚本:
db2pdcfg –catch locktimeout db2cos
db2cos脚本可以被动态的修改以便运行任何db2pd命令、OS命令、或者任何其他需要用来解决问题的命令。在UNIX和Linux下,db2cos脚本文件在sqllib/bin目录下。在Windows下,db2cos在$DB2PATH\bin目录。
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中都会有相应的记录。
要获取当前处于活动状态或者曾处于活动状态但由于某种原因而被取消的事件监视器列表,运行db2pd –gfw命令。此命令返回关于每个快速写程序EDU的目标(事件监视器将数据写入这些目标)的统计信息和信息。
示例:
1、诊断lockwait
db2pd –db dbname –locks –transactions –applications -dynamic
返回结果类似如下:
Locks:
Address TranHdl Lockname Type Mode Sts Owner Dur HldCnt Att ReleaseFlg
0x07800000202E5238 3 00020002000000040000000052 Row ..X G 3 1 0 0x0000 0x40000000
0x07800000202E4668 2 00020002000000040000000052 Row ..X W* 2 1 0 0x0000 0x40000000
对于指定了-db选项的数据库,第一个结果显示数据库的locks。此处结果显示TranHdl 2正在等待TranHdl 3持有的锁。
Transactions:
Address AppHandl [nod-index] TranHdl Locks State Tflag Tflag2 Firstlsn Lastlsn LogSpace SpaceReserved TID AxRegCnt GXID
0x0780000020251B80 11 [000-00011] 2 4 READ 0x00000000 0x00000000 0x000000000000 0x000000000000 0 0 0x0000000000B7 1 0
0x0780000020252900 12 [000-00012] 3 4 WRITE 0x00000000 0x00000000 0x000000FA000C 0x000000FA000C 113 154 0x0000000000B8 1 0
可以看到TranHdl 2与AppHandl 11相关,TranHdl 3与AppHandl 12相关。
Applications:
Address AppHandl [nod-index] NumAgents CoorPid Status C-AnchID C-StmtUID L-AnchID L-StmtUID Appid
0x07800000006879E0 12 [000-00012] 1 1073336 UOW-Waiting 0 0 17 1 *LOCAL.burford.060303225602
0x0780000000685E80 11 [000-00011] 1 1040570 UOW-Executing 17 1 94 1 *LOCAL.burford.060303225601
可以看到AppHandl 12最后执行动态语句17,1.ApplHandl 11当前正在执行动态语句17,1,最后执行的时94,1.
Dynamic SQL Statements:
Address AnchID StmtUID NumEnv NumVar NumRef NumExe Text
0x07800000209FD800 17 1 1 1 2 2 update pdtest set c1 = 5
0x07800000209FCCC0 94 1 1 1 2 2 set lock mode to wait 1
可以看到与锁等待相关的SQL语句。
2、使用-wlocks参数捕获所有正处于等待状态的锁定
db2pd –wlocks –db pdtest
Database Partition 0 -- Database PDTEST -- Active -- Up 0 days 00:01:22
Locks being waited on :
AppHandl [nod-index] TranHdl Lockname Type Mode Conv Sts CoorEDU AppName AuthID AppID
47 [000-00047] 8 00020004000000000840000652 Row ..X G 5160 db2bp VENUS *LOCAL.venus.071207213730
46 [000-00046] 2 00020004000000000840000652 Row .NS W 5913 db2bp VENUS *LOCAL.venus.071207213658
3、使用-apinfo参数获取lock owner和lock waiter运行的详细信息。
与上例相同的条件下:
db2pd –apinfo 47 –db pdtest
输出结果如下:
Database Partition 0 -- Database PDTEST -- Active -- Up 0 days 00:01:30
Application :
Address : 0x0780000001676480
AppHandl [nod-index] : 47 [000-00047]
Application PID : 876558
Application Node Name : boson
IP Address: n/a
Connection Start Time : (1197063450)Fri Dec 7 16:37:30 2007
Client User ID : venus
System Auth ID : VENUS
Coordinator EDU ID : 5160
Coordinator Partition : 0
Number of Agents : 1
Locks timeout value : 4294967294 seconds
Locks Escalation : No
Workload ID : 1
Workload Occurrence ID : 2
Trusted Context : n/a
Connection Trust Type : non trusted
Role Inherited : n/a
Application Status : UOW-Waiting
Application Name : db2bp
Application ID : *LOCAL.venus.071207213730
ClientUserID : n/a
ClientWrkstnName : n/a
ClientApplName : n/a
ClientAccntng : n/a
List of inactive statements of current UOW :
UOW-ID : 2
Activity ID : 1
Package Schema : NULLID
Package Name : SQLC2G13
Package Version :
Section Number : 203
SQL Type : Dynamic
Isolation : CS
Statement Type : DML, Insert/Update/Delete
Statement : insert into pdtest values 99
db2pd –apinfo 46 –db pdtest
结果如下:
Database Partition 0 -- Database PDTEST -- Active -- Up 0 days 00:01:39
Application :
Address : 0x0780000000D77A60
AppHandl [nod-index] : 46 [000-00046]
Application PID : 881102
Application Node Name : boson
IP Address: n/a
Connection Start Time : (1197063418)Fri Dec 7 16:36:58 2007
Client User ID : venus
System Auth ID : VENUS
Coordinator EDU ID : 5913
Coordinator Partition : 0
Number of Agents : 1
Locks timeout value : 4294967294 seconds
Locks Escalation : No
Workload ID : 1
Workload Occurrence ID : 1
Trusted Context : n/a
Connection Trust Type : non trusted
Role Inherited : n/a
Application Status : Lock-wait
Application Name : db2bp
Application ID : *LOCAL.venus.071207213658
ClientUserID : n/a
ClientWrkstnName : n/a
ClientApplName : n/a
ClientAccntng : n/a
List of active statements :
*UOW-ID : 3
Activity ID : 1
Package Schema : NULLID
Package Name : SQLC2G13
Package Version :
Section Number : 201
SQL Type : Dynamic
Isolation : CS
Statement Type : DML, Select (blockable)
Statement : select * from pdtest
4、使用db2cos分析锁超时
要使用调出脚本,找到db2cos输出文件。该文件的位置由数据库管理器配置参数diagpath控制。输出文件的内容将根据在db2cos脚本文件中输入的命令而不同。在UNIX系统上,缺省db2cos脚本在bin目录中,此目录是只读目录,可将db2cos脚本文件复制到adm目录,必要时在该位置修改该文件。在adm目录中,db2cos目录同样可以运行。
使用默认的db2cos脚本就可以方便的分析锁超时问题。首先赋予db2cos脚本执行权限:chmod u+x $HOME/sqllib/bin/db2cos
然后使用db2dpcfg –catch命令打开捕获开关。这个命令会告诉DB2在发生锁超时(lock timeout)时执行db2cos脚本。
db2pdcfg –catch locktimeout
这个缺省的db2cos脚本会在锁超时发生后生成一个名为db2cos.rpt的文件在$HOME/sqllib/db2dump/下。
5、将应用程序映射至动态SQL语句
db2pd –applications –dynamic命令报告动态SQL语句的当前和最后一个锚点标识和语句唯一标识。这允许直接从应用程序映射至动态SQL语句。
Applications:
Address AppHandl [nod-index] NumAgents CoorPid Status
0x00000002006D2120 780 [000-00780] 1 10615 UOW-Executing
C-AnchID C-StmtUID L-AnchID L-StmtUID Appid
163 1 110 1 *LOCAL.burford.050202200412
Dynamic SQL Statements:
Address AnchID StmtUID NumEnv NumVar NumRef NumExe Text
0x0000000220A02760 163 1 2221CREATE VIEW MYVIEW
0x0000000220A0B460 110 1 2221CREATE VIEW YOURVIEW
6、监视内存使用情况
使用db2pd –memblock命令了解内存使用情况。
[db2inst@localhost ~]$ db2pd -memblock | more
All memory blocks in DBMS set.
Address DataAddress PoolID PoolName BlkAge Size(Bytes) I LOC File
0x10740068 0x10740080 77 fcmsess 3 849920 1 495 3002113363
0x10730048 0x10730060 77 fcmsess 2 6000 1 388 3002113363
0x106EFFC8 0x106EFFE0 77 fcmsess 1 262144 1 246 3315196337
0x10680068 0x10680080 79 fcmchan 3 93184 1 495 3002113363
0x10670048 0x10670060 79 fcmchan 2 768 1 388 3002113363
0x1065FFC8 0x1065FFE0 79 fcmchan 1 65536 1 246 3315196337
0x10580068 0x10580080 13 fcmbp 3 524288 1 495 3002113363
0x10570048 0x10570060 13 fcmbp 2 768 1 388 3002113363
0x1055FFC8 0x1055FFE0 13 fcmbp 1 65536 1 246 3315196337
0x10978C78 0x10978C90 73 fcmctl 11 160592 1 1650 2986298236
0x10948C78 0x10948C90 73 fcmctl 10 160592 1 1650 2986298236
0x1092C528 0x1092C540 73 fcmctl 5 80544 1 1476 2986298236
…
Total size for DBMS memory set: 10178767 bytes
接下来是已排序的“性能池”输出:
Memory blocks sorted by size for fcmsess pool:
PoolID PoolName TotalSize(Bytes) TotalCount LOC File
77 fcmsess 849920 1 495 3002113363
77 fcmsess 262144 1 246 3315196337
77 fcmsess 6000 1 388 3002113363
Total size for fcmsess pool: 1118064 bytes
Memory blocks sorted by size for fcmchan pool:
PoolID PoolName TotalSize(Bytes) TotalCount LOC File
79 fcmchan 93184 1 495 3002113363
79 fcmchan 65536 1 246 3315196337
79 fcmchan 768 1 388 3002113363
Total size for fcmchan pool: 159488 bytes
…
Memory blocks sorted by size for apmh pool:
PoolID PoolName TotalSize(Bytes) TotalCount LOC File
70 apmh 286464 12 1476 2986298236
70 apmh 260200 1 285 1586829889
70 apmh 130100 1 271 1586829889
70 apmh 16000 1 1650 2986298236
70 apmh 4404 2 195 2986298199
70 apmh 4208 2 815 1411768055
70 apmh 2380 7 1581 3342001786
70 apmh 840 2 3380 1953793439
70 apmh 840 1 1472 3878879032
…
…
最后一部分输出对整个内存集的内存使用者进行排序:
All memory consumers in DBMS memory set:
PoolID PoolName TotalSize(Bytes) %Bytes TotalCount %Count LOC File
72 eduah 2816016 27.67 1 0.06 189 4210081592
50 sqlch 1205268 11.84 1 0.06 193 2576467555
73 fcmctl 854872 8.40 6 0.33 1476 2986298236
77 fcmsess 849920 8.35 1 0.06 495 3002113363
62 resynch 604820 5.94 1 0.06 128 1599127346
13 fcmbp 524288 5.15 1 0.06 495 3002113363
50 sqlch 423228 4.16 1 0.06 250 2576467555
73 fcmctl 321184 3.16 2 0.11 1650 2986298236
70 apmh 286464 2.81 12 0.67 1476 2986298236
…
在UNIX和Linux上,还会在最后报告专用内存的内存块:
All memory blocks in FMP set.
Address DataAddress PoolID PoolName BlkAge Size(Bytes) I LOC File
0x126A1FB8 0x126A1FD0 59 undefh 3 122900 1 408 1937674139
0x12681FB8 0x12681FD0 59 undefh 2 122900 1 408 1937674139
0x12661FB8 0x12661FD0 59 undefh 1 122900 1 408 1937674139
Total size for FMP memory set: 368700 bytes
…
7、确定哪个应用程序耗尽表空间
使用db2pd –tcbstats可以确定对表执行的插入操作数。以下是sample数据库中T表的信息:(此处只说明过程,实际T表并没有耗尽表空间)
[db2inst@localhost ~]$ db2pd -db sample -tcbstats
TCB Table Information:
Address TbspaceID TableID PartID MasterTbs MasterTab TableName SchemaNm ObjClass DataSize LfSize LobSize XMLSize
0xA5904944 3 8 n/a 3 8 T DB2INST Perm 1 0 0 0
TCB Table Stats:
Address TableName SchemaNm Scans UDI RTSUDI PgReorgs NoChgUpdts Reads FscrUpdates Inserts Updates Deletes OvFlReads OvFlCrtes RowsComp RowsUncomp CCLogReads StoreBytes BytesSaved
0xA5904944 T DB2INST 3 0 0 0 0 5 0 2 0 0 0 0 0 0 0 - -
然后,通过使用db2pd –tablespaces命令获取表空间3的信息:
Tablespace Configuration:
Address Id Type Content PageSz ExtentSz Auto Prefetch BufID BufIDDisk FSC NumCntrs MaxStripe LastConsecPg Name
0xA4965D80 3 DMS Large 8192 32 Yes 32 1 1 Off 1 0 31 IBMDB2SAMPLEREL
Tablespace Statistics:
Address Id TotalPgs UsablePgs UsedPgs PndFreePgs FreePgs HWM Max HWM State MinRecTime NQuiescers PathsDropped
0xA4965D80 3 4096 4064 864 0 3200 864 864 0x00000000 0 0 No
Tablespace Autoresize Statistics:
Address Id AS AR InitSize IncSize IIP MaxSize LastResize LRF
0xA4965D80 3 Yes Yes 33554432 -1 No None None No
Containers:
Address TspId ContainNum Type TotalPgs UseablePgs PathID StripeSet Container
0xA4967230 3 0 File 4096 4064 0 0 /home/db2inst/db2inst/NODE0000/SAMPLE/T0000003/C0000000.LRG
FreePgs值加上UsedPgs值等于UsablePgs值。FreePgs列值下降表示可用空间减少。
然后通过运行db2pd –db sample –dyn来确定正在使用表T的动态SQL语句:
[db2inst@localhost ~]$ db2pd -db sample -dyn | more
Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 02:00:19 -- Date 2012-12-11-07.15.08.862395
Dynamic Cache:
Current Memory Used 1265017
Total Heap Size 1271398
Cache Overflow Flag 0
Number of References 741
Number of Statement Inserts 225
Number of Statement Deletes 179
Number of Variation Inserts 63
Number of Statements 46
Dynamic SQL Statements:
Address AnchID StmtUID NumEnv NumVar NumRef NumExe Text
0xA5ADFDF0 647 1 0 0 1 1 insert into t values (2,'b')
0xA5B13F00 106 1 1 1 3 3 insert into t values(4,'d')
最后,通过运行db2pd –db sample –app将以上输出中的信息映射到应用程序输出,以便确定应用程序:
Applications:
Address AppHandl [nod-index] NumAgents CoorEDUID Status C-AnchID C-StmtUID L-AnchID L-StmtUID Appid WorkloadID WorkloadOccID CollectActData CollectActPartition CollectSectionActuals
0x10A908C0 270 [000-00270] 1 36 UOW-Waiting 0 0 106 1 *LOCAL.db2inst.121210233431 1 2 N C N
可以使用用于标识动态SQL语句的锚点标识(AnchID)值来标识相关联的应用程序。
db2pd –agent的输出将指示应用程序读取的行数(Rowsread列)和写入的行数(Rowswrtn列)。这些值显示应用程序已完成的部分及未完成的部分:
[db2inst@localhost ~]$ db2pd -agent app=270
Address AppHandl [nod-index] AgentEDUID Priority Type State ClientPid Userid ClientNm Rowsread Rowswrtn LkTmOt DBName LastApplId LastPooled
0x10B00060 270 [000-00270] 36 0 Coord Inst-Active 7074 db2inst db2bp 1 8 NotSet SAMPLE *LOCAL.db2inst.121210233431 Tue Dec 11 07:30:45
可以将运行db2pd –agent命令时生成的AppHandl和AgentEDUID值映射到运行db2pd –app命令时生成的相应AppHandl和CoorEDUID值。
8、监视恢复
如果运行db2pd –recovery命令,输出将显示多个计数器,这些计数器可用于验证是否正在执行恢复。
9、确定事务正在使用的资源量
db2pd –transactions命令输出锁定数、第一个日志序号(LSN)、最后一个LSN、以用日志空间量和保留空间量。
[db2inst@localhost ~]$ db2pd -db sample -transactions
Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 04:00:20 -- Date 2012-12-11-09.15.09.876334
Transactions:
Address AppHandl [nod-index] TranHdl Locks State Tflag Tflag2 Firstlsn Lastlsn SpaceReserved LogSpace TID AxRegCnt GXID ClientUserID ClientWrkstnName ClientApplName ClientAccntng
0xA3034B00 445 [000-00445] 2 0 READ 0x00000000 0x00000000 0x0000000000000000 0x0000000000000000 0 0 0x000000001A56 1 0 n/a n/a n/a n/a
0xA3035800 8 [000-00008] 3 0 READ 0x00000000 0x00000000 0x0000000000000000 0x0000000000000000 0 0 0x0000000011B6 1 0 n/a n/a n/a n/a
0xA3036500 9 [000-00009] 4 0 READ 0x00000000 0x00000000 0x0000000000000000 0x0000000000000000 0 0 0x000000001A57 1 0 n/a n/a n/a n/a
10、监视日志使用情况
[db2inst@localhost ~]$ db2pd -db sample –logs
Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 04:02:49 -- Date 2012-12-11-09.17.38.279599
Logs:
Current Log Number 0
Pages Written 421
Cur Commit Disk Log Reads 0
Cur Commit Total Log Reads 0
Method 1 Archive Status n/a
Method 1 Next Log to Archive n/a
Method 1 First Failure n/a
Method 2 Archive Status n/a
Method 2 Next Log to Archive n/a
Method 2 First Failure n/a
Log Chain ID 0
Current LSN 0x0000000003C3D376
Address StartLSN State Size Pages Filename
0xA3032888 0000000003A98010 0x00000000 1000 1000 S0000000.LOG
0xA3032048 0000000003E80010 0x00000000 1000 1000 S0000001.LOG
0xA3011598 0000000004268010 0x00000000 1000 1000 S0000002.LOG
通过写入页数值,可以确定日志使用量是否正在增加。如果最近大多数的日志归档操作都失败,那么归档状态的值将被设置为失败。如果正在发生的归档失败导致完全无法对日志进行归档,那么归档状态值将被设置为首次失败。
11、生成堆栈跟踪
使用db2pd –stack all命令生成当前数据库分区中所有进程的堆栈跟踪。如果怀疑某个进程或线程正在循环或正被挂起,那么可能要反复使用此命令。
使用db2pd –stack eduid来获取特定引擎可分派单元(EDU)的当前调用堆栈。
可以使用dumpdir参数将db2pd –stacks命令的输出重定向至特定目录路径以及使用timeout参数仅重定向特定持续时间的输出:
[db2inst@localhost trapfiles]$ db2pd -stack all dumpdir=~/trapfiles timeout=30
12、查看数据库分区的内存统计信息
db2pd –dbptnmem命令显示DB2服务器当前消耗的内存量,并在较高级别显示使用这些内存的服务器区域。
[db2inst@localhost ~]$ db2pd –dbptnmem
Database Partition 0 -- Active -- Up 0 days 04:47:32 -- Date 2012-12-11-09.58.07.495126
Database Partition Memory Controller Statistics
Controller Automatic: Y
Memory Limit: 773492 KB
Current usage: 214848 KB
HWM usage: 230336 KB
Cached memory: 48064 KB
Individual Memory Consumers:
Name Mem Used (KB) HWM Used (KB) Cached (KB)
========================================================
APPL-SAMPLE 24768 40000 23488
DBMS-db2inst 39232 39232 5568
FMP_RESOURCES 22528 22528 0
PRIVATE 11456 11456 0
DB-SAMPLE 116608 116608 19008
LCL-p7074 128 128 0
LCL-p2109 128 128 0
说明:
Controller Automatic:指示内存控制器设置。如果instance_memory配置参数设置为AUTOMATIC,那么它将显示“Y”,意味着数据库管理器自动确定内存耗用量上限。
Memory Limit:如果强制施加了实例内存限制,那么instance_memory配置参数的值是可以耗用的DB2服务器内存的上限。
Memory Limit:服务器当前耗用的内存量。
HWM usage:自激活数据库分区(在db2start命令运行时)以来消耗的内存高水位标记(HWM)或峰值。
Cached memory:高速缓存的内存,当前使用量中未使用但为了提高将来内存请求的性能而高速缓存的内存量。
APPL-dbname:为数据库dbname耗用的应用程序内存
DBMS-name:全局数据库管理器内存需求
FMP_RESOURCES:与db2fmps进行通信所需的内存
PRIVATE:其他专用内存需求
DB-dbname:为数据库dbname耗用的数据库内存
LCL-pid:用于与本地应用程序进行通信的内存段
13、显示耗费处理器时间最多的几个EDU并显示EDU堆栈信息
使用db2pd –edus,输出将列示所有引擎可分派单元(EDU)。在Linux和UNIX上,可以指定interval参数,以便生成所有EDU的两个快照,这两个快照将相隔指定的时间间隔,这样输出会增加两列:USER DELTA列指示该时间间隔内处理器用户时间的增量,SYS DELTA列指示时间间隔内处理器系统时间的增量。
要仅查看有关耗费处理器时间最多的几个EDU的信息以减少返回的输出量,可以指定top参数。
[db2inst@localhost ~]$ db2pd -edus interval=5 top=5
Database Partition 0 -- Active -- Up 0 days 05:24:37 -- Date 2012-12-11-10.35.12.331994
List of all EDUs for database partition 0
db2sysc PID: 2037
db2wdog PID: 2035
db2acd PID: 2052
EDU ID TID Kernel TID EDU Name USR (s) SYS (s) USR DELTA SYS DELTA
=========================================================================================================
1 2911890288 2041 db2sysc 0 1.010000 12.190000 0.000000 0.010000
25 2928667504 2254 db2pfchr (SAMPLE) 0 0.030000 0.030000 0.000000 0.000000
11 2943347568 2042 db2alarm 0 0.160000 1.450000 0.000000 0.000000
12 2942298992 2043 db2thcln 0 0.000000 0.000000 0.000000 0.000000
14 2940201840 2046 db2ipccm 0 0.100000 0.450000 0.000000
九、db2support
使用db2support命令来收集环境信息,并将这些系统数据放到一个压缩文件中。db2support实用程序将自动收集所有可用的DB2诊断信息和系统诊断信息。它还有一个可选的交互式会话。该会话提出有关问题的详情。
使用db2support可以避免可能的用户错误,因为不必手动输入GET DATABASE CONFIGURATION FOR database-name或LIST TABLESPACES SHOW DETAIL之类的命令。而且,不需要有关要运行的命令或要收集的文件的指示信息,因此收集数据的速度会比较快。
十、db2val
db2val命令用于确保DB2副本在正常运行。它通过以下方法验证DB2副本的核心功能:验证安装文件、实例、数据库创建情况、与该数据库的连接以及分区数据库环境的状态。db2val命令可以快速确保已正确完成所有配置,并且确保DB2副本就是期望的副本。可以指定实例和数据库,也可以对所有实例运行db2val命令。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25744374/viewspace-750932/ ,如需转载,请注明出处,否则将追究法律责任。