db2diag.log文件内容分析
- 格式:doc
- 大小:44.50 KB
- 文档页数:6
1前言 (8)2DB2专有名词解释 (8)2.1I NSTANCE(实例) (8)2.2DB2A DMINISTRA TION S ERVER(管理服务器) (8)2.3C ONTAINER(容器) (8)2.4DRDA (8)2.5DARI (8)2.6SPM (8)2.7FCM (8)2.8ADSM (8)2.9DCE (8)3DB2编程 (9)3.1建存储过程时C REATE 后一定不要用TAB键 (9)3.2使用临时表 (9)3.3从数据表中取指定前几条记录 (9)3.4游标的使用 (9)3.5类似DECODE的转码操作 (10)3.6类似CHARINDEX查找字符在字串中的位置 (10)3.7类似DATEDIF计算两个日期的相差天数 (11)3.8写UDF的例子 (11)3.9创建含IDENTITY值(即自动生成的ID)的表 (11)3.10预防字段空值的处理 (11)3.11取得处理的记录数 (11)3.12从存储过程返回结果集(游标)的用法 (11)3.13类型转换函数 (12)3.14存储过程的互相调用 (12)3.15C存储过程参数注意 (13)3.16存储过程FENCE及UNFENCE (13)3.17SP错误处理用法 (13)3.18V ALUES的使用 (13)3.19给SELECT 语句指定隔离级别 (14)3.20A TOMIC及NOT A TOMIC区别 (14)3.21C及SQL存储过程名称都要注意长度 (14)3.22怎样获得自己的数据库连接句柄 (14)3.23类似于ORACLE的N AME PIPE (14)3.24类似于ORACLE的TRUNCATE清表但不记日志的做法 (14)3.25用CLI编程批量的INSERT (14)4DB2一些不好的限制 (18)4.1临时表不能建索引 (18)4.2CURSOR不能定义为WITH UR(可以但...).. (18)4.3CURSOR ORDER BY以后不能FOR UPDATE (18)4.4程序中间不能自由改变隔离级别 (18)4.5UPDATE 不能用一个表中的记录为条件修改另一个表中的记录。
10.1 日常运维工具概述Runstats是run statistics的缩写,意思是收集统计信息,目的是为DB2优化器提供最佳路径选择;Reorg是重组的意思,目的是减少表和索引在物理存储上的碎片,提供性能;Reorgchk是重组前的检查Rebind是对一些包、存储过程或静态程序进行重新绑定。
几个工具的执行流程:首先通过Runstats收集表和索引的统计信息,然后执行Reorg重组,如果有必要则执行,然后再次收集统计信息。
最后,对于静态语句、存储过程等,执行Rebind绑定.10.2 Runstats在系统运行一个查询的时候,优化器需要决定用某种方式来访问数据。
只有当DB2对表中的数据有一个大概的了解,才能知道每一步操作大约需要处理多少数据,返回多少行。
当优化器了解了这些信息后,就会根据一系列的运算,判定出各种访问途径所需要消耗的资源,然后从中选择一个消耗资源最少的方法.最普通的Runstats就是统计表和索引中有多少行数据,有多少不同的数值.Runstats命令使用DISTRIBUTION参数手机数据分布.数据分布分为两种,一种叫做频率采样(Frequency),一种叫做百分比采样(Quantile)。
当收集数据分布时,两种采样方式都会被收集.其中频率采样是手机表中拥有相同数量最多的几行,比如10000行数据中9000行为10,然后500行为9,然后100行为8,剩下的部分平均分布.如果我们制定Frequency为3的话,那么系统就会记录下来有9000行10,500行9,然后100行8,剩下的部分在估算时则假定平均分布。
而百分比采样则是将整个10000行数据分成相等大小的若干段,然后记录每一段的段首和段尾的数值,当需要查询一个数据段时(比如C1〉10 AND C1<15),就可以根据每一个数据段的启始数值加上段落的大小,估算出符合查询条件的记录数量。
理论上,数据分布收集的越细致越好.但是经过细致的数据分布信息可能会导致DB2在优化SQL时需要处理更多的信息,并占用更多的系统存储空间,可能会导致性能的下降。
db2日志说明db2日志记录1. 日志的意义:主要在于数据恢复。
Db2实施了提前写日志存档模式,当发出删除、插入或更新数据库中某一数据的SQL调用时,所作出的数据变更首先要写到日志中去。
当发出一条SQL提交确认命令时,DB2首先要把redo所需要的日志写入磁盘。
如果断电的话,所有被提交的事务都会重新做一遍,而未提交的则会rollback。
事务:为了保证数据的可恢复性和一致性引入的概念。
比如执行了两条sql语句,但是他们是为了完成同一件事,因此他们会被当做一个整体。
当发生意外情况时,如果已经commit,但是未写到磁盘,就要执行redo重新执行一遍。
如果还没有commit,就要全部回滚。
日志作用:比如昨天晚上进行了数据库备份,但是今天中午数据库出现了问题(如存储介质损坏)需要恢复,那么只能恢复到昨天晚上的状态,今天上午的数据都没法恢复,这时如果数据库日志没有损坏,就可以通过日记把这段时间的操作重新执行一遍。
2. 日志分为循环日志和归档日志:日志中只记录DML操作(insert,update和delete操作),当我们前台执行了一条insert,update或delete语句,日志中就会相应的记录这条SQL语句的redo操作和undo操作几种操作类型:DDL(Data Definition Language 数据定义语言),用于操作对象和对象的属性(数据库,表,视图等)。
具体表现在Create,Drop 和Alter操作上。
不会对具体的数据进行操作,而是对对象进行操作。
像主键约束、唯一约束、非空约束、外键约束、核查约束和缺省约束这些操作都是使表具有某些特性,所以在这里我认为他们都是表的属性,也属于DDL操作。
DML(Data Manipulation Language 数据操控语言)用于操作数据库对象中包含的数据,也就是说操作的单位是记录。
主要表现在Insert,Delete和Update等操作上。
DB2数据库命名规范篇一:DB2日常操作规范DB2数据库日常操作规范(2007年5月第一稿)1 目的本规范的主要目的是为DB2数据库管理员的日常操作提供标准,保障DB2数据库的日常稳定运行。
2 适用范围本规范的适用人员范围为我司所有应用DB2数据库的管理员。
本规范的适用操作范围为我司DB2数据库管理员的日常操作,并不涵盖DB2故障处理内容,故障处理见所附的各技术操作手册。
3 日常操作内容标准的DB2数据库日常操作分为四类:每日、每周、每月、每年。
3.1 每日数据库instance状态检查和database活动性和一致性检查数据库日志文件的检查数据库每日备份检查和数据库日志归档检查数据库HADR状态检查数据库表空间分配情况和使用情况检查数据库用户数检查数据库总体性能检查数据库服务器的 CPU 使用监控数据库服务器的 I/O 使用监控数据库的每日备份数据库的统计优化3.2 每周数据库系统信息的备份数据库临时文件的清理数据库日志文件的归档和清理数据库每周增长空间的统计数据库关键大表空间和记录数的周增长统计记录读写最活跃的10张表数据库的统计优化3.3 每月数据库表空间的维护数据库的定期健康检查数据库恢复的定期演练3.4 每年数据库的安全检查数据库的容量增长预测4 日常操作详述4.1 每日操作4.1.1 数据库instance状态检查和database活动性和一致性检查4.1.1.1 每日必须检查数据库instance和database运行状态是否正常,用户是否可以正常连接database。
如果状态不正常,按照运维流程报4008进行处理。
4.1.2 数据库日志文件检查4.1.2.1 数据库日志文件notification log(<instance_ID>.nfy)和DB2DIAG.LOG、内存自动调优的日志(stmmlog目录下的stmm.#.log文件中)的检查(转载于: 小龙文档网:db2,数据库命名规范)4.1.3 数据库每日备份包括日志备份检查4.1.3.1 每日必须检查数据库的备份是否成功,如成功则将备份磁带按照相关管理要求出库并异地保存;如果备份不成功,重新发起备份,如果处理后还不能备份成功,按照运维流程报4008进行处理。
db2diag.log文件中的标记都表示什么含义?环境:产品: db2 udb平台: Cross Platform软件版本: v6, v7, v8问题描述:db2diag.log文件中的标记都表示什么含义?解答:对db2diag.log文件的正确分析往往是排除错误的第一步, 该文件位于数据库管理器的配置参数DIAGPATH指定的目录下.下面是db2diag.log的部分摘取, 我们来分析一下它们的含义.(1) 2002-05-17-17.30.32.140000 (2) Instance:DB2MPP (3) Node:000(4) PID:2204(db2bp.exe) (5) TID:2224 (6) Appid:*LOCAL.DB2MPP.020*********(7) database_utilities (8) sqlubckp (9) Probe:26DiagData(10) 2cfc ffff2002-05-17-20.17.20.793000 Instance:DB2MPP Node:000PID:596(db2syscs.exe) TID:2176 Appid:base_sys_utilities sqleMergeSqlca Probe:20 Database:SAMPLEReceived sqlcode 1496 for request 8000001e from node number 1(11) Data Title:SQLCA PID:596 TID:2176 Node:000sqlcaid : SQLCA sqlcabc: 136 sqlcode: 1496 sqlerrml: 0sqlerrmc:sqlerrp : SQLESRSUsqlerrd : (1) 0x00000000 (2) 0x00000000 (3) 0x00000000(4) 0x00000000 (5) 0x00000000 (6) 0x00000001sqlwarn : (1) (2) (3) (4) (5) (6)(7) (8) (9) (10) (11)sqlstate:1. 表示记这条日志时的时间戳2. 实例名. 该例子中的实例名是db2mpp3. 分区号. 在单分区的数据库中该值总为04. 应用或代理的进程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的.如何使用DB2 v8.2 新提供的db2diag 执行程序对db2diag.log 文件进行过滤和查找?环境产品:DB2 UDB平台:跨平台版本:v8.2问题对在DB2 v8.2 产品中提供的新的诊断辅助工具db2diag 所常用的几个功能进行简单的举例说明。
解答为了方便用户对DB2 诊断日志文件db2diag.log 提供的信息的理解,在DB2 v8.2 中增加了db2diag 这一辅助诊断工具,这里结合几个具体举例,对其常用的一些功能加以介绍。
该可执行程序:db2diag 位于以下路径:Unix 平台- $HOME/sqllib/binWindows 平台- SQLLIB\BIN1. 在多分区实例下,可查看db2diag.log 文件中指定分区的所有信息。
如:用户因第四个分区上的数据库出现问题而仅希望查看该分区信息时,可使用以下命令:db2diag -n 4输出的所有信息都将包含在“NODE: 004”中,参看下面的部分输出。
2004-10-11-19.01.57.744218-300 E7115837C971 LEVEL: EventPID : 119664 TID : 1 PROC : db2star2INSTANCE: dimi NODE : 004FUNCTION: DB2 UDB, base sys utilities, DB2StartMain, probe:911MESSAGE : ADM7513W Database manager has started.START : DB2 DBMDA TA #1 : Build Level, 124 bytes....2. 要显示db2diag.log 文件中所有关于119664 进程的信息,可利用以下命令:db2diag -pid 1196642004-10-11-19.01.56.555034-300 I7109918C313 LEVEL: EventPID : 119664 TID : 1 PROC : db2star2INSTANCE: dimi NODE : 000FUNCTION: DB2 UDB, config/install, sqlfLogUpdateCfgParam, probe:30CHANGE : CFG DBM: "Instance_Memory" <automatic> From: "11126" To: "11126"....结合上述两种用法,以下命令将抽取db2diag.log 文件中分区0 和 4 上所有119664 进程的相关信息:db2diag -pid 119664 -n 0,43. 为显示db2diag.log 文件中包含的时间戳“2004-11-02-11.00.907665-360”之后的所有信息,可用下述命令:db2diag -time 2004-11-02-11.00.907665-3604. 另外一个较有用的选项是“-rc”。
对于以前的DB2 版本,用户经常希望了解的db2diag.log 中的常出现十六进制返回码所提示的信息,在v8.2 上,如果使用该选项便可得到关于这些十六进制返回码的解释。
如对于以下一段信息:2004-10-19-12.19.46.033037-300 I7202340C354 LEVEL: SeverePID : 139048 TID : 1 PROC : db2hmon 4INSTANCE: dimi NODE : 000FUNCTION: DB2 UDB, routine_infrastructure, sqlerFmpOneTimeInit, probe:100MESSAGE : DiagDataDA TA #1 : Hexdump, 4 bytes0x2FF225B0 : 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"获得关于这个错误的具体解释。
5. 为显示db2diag.log 中所记录的严重错误,使用:db2diag -gi "level=severe"输出可参看例4 中提供的。
如果要得到有关该工具的更多选项的帮助信息,可使用:db2diag -h使用db2diag工具的高级选项过滤查找db2diag.log诊断日志记录内容提要db2diag.log是DB2中非常重要的诊断日志,一般出现问题后,首先就要查看db2diag.log 文件。
但是很多时候特别是在多分区数据库中,查看db2diag.log变得非常费时。
因为所有分区所有应用程序的诊断日志都会写到DB2的诊断日志中。
从DB2版本8.2开始,DB2提供了db2diag工具可以用来过滤查找特定的日志,您可以参见下面的文档获得使用db2diag 的基本方法:/cn/suppor ... DocId=1807545B21000有时候我们需要做一些更高级的过滤查询,以便帮助我们进一步诊断问题,该文章通过例子对于db2diag中的高级选项做了介绍。
正文首先简单介绍db2diag.log中的条目构成,如下所示为一条标准的db2diag.log日志条目:2005-12-26-19.09.14.702039+480 I84831569A398 LEVEL: SeverePID : 1060946 TID : 1 PROC : db2agent (XXXX) 0INSTANCE: db2inst1 NODE : 000 DB : XXXXAPPHDL : 0-222 APPID: C0A86402.OD11.03F806110349FUNCTION: DB2 UDB, relation data serv, sqlrr_fetch, probe:20RETCODE : 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" 获得。