分析DB2活动日志满的原因及解决DB2日志满方法与避免方案

来源:脚本之家  责任编辑:小易  

我查了相同的问题,不得而解,后来牛博士的书知道了,需要把logarchmeth1的值改为OFF(也是默认值),然后重启服务,就可以了。写在这里希望大家都能看到

日志使用

下图显示了并发事务条件下,日志使用的示意

DB2 10.5的数据库有一个参数叫 LOGARCHMETH1,用于归档日志的设置,可以设置的值为: OFF [LOGRETAIN, USEREXIT, DISK, TSM, VENDOR] 如果LOGARCHMETH1和LOGARCHMETH2均为OFF,表示使用循环日志。 比较常用的值: LOGRETAIN表示启用归档日志,并

有3个并发的程序Process 1、Process 2、Process 3。每一个程序都有两个事务。蓝块代表SQL语句,红块代表commit操作,绿块代表rollback操作。每一个向下的箭头都代表日志缓冲区的数据被刷新到日志磁盘上(默认是每一次提交操作都会导致日志缓冲被刷新到磁盘上)。

在windows系统下的话,默认是在C:\Program Files\IBM\SQLLIB\ 在日常DB2的维护中,transaction log full是比较常见的问题,日志空间使用情况也是我们比较重视的问题,查看日志空间使用情况的方法: DB2 在DATABASE级别有几个参数,如下决定了事

在T1时刻,事务A commit,日志缓冲区被刷新到磁盘上。

模拟事务,测试是否会归档 [db2inst1@seagull archive]$ ls /db2home/db2inst1/db2inst1/NODE0000/SQL00001/SQLOGDIR/ S0000000.LOG S0000001.LOG S0000002.LOG [db2inst1@seagull archive]$ db2 "insert into staff select * from staff" DB200

在T2时刻,事务B commit,日志缓冲区被刷新到磁盘上,此时日志X使用完,但由于X中的事务C还没有提交,所以X此时还是活动日志。

load命令有个参数 MESSAGES XXX.MSG,以下语句供参考 LOAD FROM xx.DEL OF DEL COMMITCOUNT 500000 MESSAGES xx.MSG INSERT INTO tabname NONRECOVERABLE;

在上图中,如果事务C一直没有提交操作,那么日志X将永远是首个活动日志(oldest transaction log),后续的日志也是活动日志,其他应用最终会导致日志满。

我不明白你说的是考驾照,还是你有了驾照,上路慢。我正在学科三。如果你是第一种,你只管听好教练的,考证的方法都是死东西,所谓上有政策,下就有对策。当然学车这里面道道就多了去了,最重要的是你有个好教练,好教练胜于一切,这里的好,不单单指的是不搞潜规则,不收贿赂,不骂人,不打人,除了这些,他还应该有比其他教练更先进,更简洁的应付考试的方法。你不要想在驾校学那套在路上使用,驾校学的东西只适合考试。拿了证之后,如果你有天赋,可以自己一个人上路慢慢练,如果没天赋,就得有个老司机带带你才行了。如果你说的是第二种,那么就没办法,多练,只有不断的实际操作你才能越来越熟练,只有遇见的情况多了,你猜能在一次遇到相同

活动日志

如果一个日志中包含有未提交的事务,那么这个日志就是活动日志(也有其他情况,比如虽然所有事务已经提交,但对应的更改还没有持久化到磁盘上)。

缅甸除了在仰光公盘标的料,其他都属于走私翡翠。由于各种原因,缅甸走私翡翠越来越多,被查的走私料,有的归缅甸政府再上公盘标,另外如果刚被查,货主得知消息了,检查站还没上报,就可以找关系花钱赎回来,这个钱的最后归宿就呵呵了。热水塘检查站刚回复的时候,为了站点的功绩,查了不少啊,要是查不出来,就没必要存在了。现在各方面关系到位了,呵呵,没走私了,或者少了,只能呵呵了。

首个活动日志(First Active Log)

本次小编带大家一起来聊聊三星S8比较受人关注的一个特点-解锁。孔乙己说过:回字有四种写法。而三星S8的解锁玩法,数一数居然也是四种(数字/图案我都算触控一类)。  1.数字/图案解锁:这个无需多言,绝大部分的Android手机上这个功能都是标配。  2.指纹解锁:指纹解锁虽然不是什么新的亮点,但三星S8在这上面还是引发了很大争议。究其原因,首次调整到背面的指纹键并没有安安分分的设置在正中,而是设置在了摄像头的右侧。在实际使用时,笔者在几天时间里才略适应了这种变化,而不少身边的体验者也都表示,每次用指纹解锁都会用手指摸一下摄像头,着实不爽。考虑到炫酷的屏内解锁没赶上这次的档期,我们也只能忍忍了。

第一个活动日志,首个活动日志之后的日志(也就是编号比首个活动日志大的日志)都是活动日志,可以通过数据库的snapshot查看first active log, current active log, 以及 last active log.

我们先模拟一个场景:你是排斥没“意义”工作的新人,今天你有10个任务要做,其中3个任务对自我提升有帮助(主观上),4个常规事务性工作,3个领导临时布置的工作。因为没意义工作过多,烦躁的你花了60%时间左翻右翻。突然发现时间不多了,你用20%的时间纠结着要不要完成?答案是:要。最后用20%的时间笑(哭)着交任务。如果你忽然发现这个场景似曾相识,发现竟有一丝丝痛苦,看下去吧。工作无所谓有无意义,与其想着要不要完成,我们何不想:这些可能对你的专业没有帮助的工作,我们怎么高效完成!1、取消一种“允许”。或许你是个追求完美的人,但企业是追求利益而不是完美,高效才是王道。你也许不会这么觉得,但你做的每件事

$ db2 get snapshot for db on sample | grep -i "File number" File number of first active log = 0 File number of last active log = 2 File number of current active log = 0 File number of log being archived = Not applicable

日志满原因

DB2总的可用活动日志的最大空间是有限制的,当达到限制之后,就会发生日志满的问题,限制为(LOGPRIMARY + LOGSECOND) * LOGFILSIZ * 4KB

日志满的原因无非两种:

1.) 一个小事务hold住了首个活动日志,一直没有提交,导致首个活动日志一直是活动状态,不被释放。这个跟堵车类似,一辆车因发动机故障(事务没有提交)堵住路口(占用首个活动日志),即使后面的车都没有问题(后续事务正常提交),也无法通过路口,且会越积越多,最终导致整个路都堵满车(日志满)。

2.) 有个事务非常大,迅速用尽了所有的日志。

日志满的表现:

首先应用会报出SQL0964C错误:

$ db2 "insert into test select * from test" DB21034E The command was processed as an SQL statement because it was not a valid Command Line Processor command. During SQL processing it returned: SQL0964C The transaction log for the database is full. SQLSTATE=57011

其次,db2diag.log中会有以下报错

2017-03-09-17.24.50.315000+480 E3234873F644 LEVEL: Error PID : 8532 TID : 13028 PROC : db2syscs.exe INSTANCE: DB2INST1 NODE : 000 DB : SAMPLE APPHDL : 0-453 APPID: *LOCAL.DB2INST1.170309092321 AUTHID : MIAOQINGSONG HOSTNAME: ADMINIB-PR7US3I EDUID : 13028 EDUNAME: db2agent (SAMPLE) FUNCTION: DB2 UDB, data protection services, sqlpgResSpace, probe:2860 MESSAGE : ADM1823E The active log is full and is held by application handle "0-441". Terminate this application by COMMIT, ROLLBACK or FORCE APPLICATION.

日志满的临时处理:

1. 可以通过增加LOGSECOND来临时增加可用的日志大小(修改时需要加上immediate选项使之立即生效);增加LOGPRIMARY并没有用,因为需要重启数据库才能生效。

2. force掉hold住首个活动日志的的应用,在force之前,可以抓取snapshot,看一下这个应用的状态:

$ db2 get snapshot for database on sample | grep -i oldest Appl id holding the oldest transaction = 441 $ db2 get snapshot for application agentid 441 Application Snapshot Application handle = 441 Application status = UOW Waiting <<--应用状态为UOW Waiting Status change time = 2017-03-09 17:23:15.068895 Application code page = 1386 Application country/region code = 86 DUOW correlation token = *LOCAL.DB2INST1.170309092244 Application name = db2bp.exe Application ID = *LOCAL.DB2INST1.170309092244 .. Connection request start timestamp = 2017-03-09 17:22:44.963163 <<--应用连库时间 Connect request completion timestamp = 2017-03-09 17:22:45.961157 Application idle time = 4 minutes 7 seconds .. UOW log space used (Bytes) = 664 Previous UOW completion timestamp = 2017-03-09 17:22:45.961157 Elapsed time of last completed uow (sec.ms)= 0.000000 UOW start timestamp = 2017-03-09 17:23:02.770477 <<--当前事务开始时间 UOW stop timestamp = <<--当前事务结束时间为空,说明还没有commit UOW completion status = .. Statement type = Dynamic SQL Statement Statement = Close Section number = 201 Application creator = NULLID Package name = SQLC2K26 Consistency Token = Package Version ID = Cursor name = SQLCUR201 Statement member number = 0 Statement start timestamp = 2017-03-09 17:23:15.067789 Statement stop timestamp = 2017-03-09 17:23:15.068893 Elapsed time of last completed stmt(sec.ms)= 0.000024 Total Statement user CPU time = 0.000000 Total Statement system CPU time = 0.000000 .. Dynamic SQL statement text: select * from t1

<<--一个事务中可能有多条SQL,这个只表示当前正在执行或者最后执行过的SQL,并不能表示就是这条SQL导致了日志满,这里抓取到的是一条SELECT语句,SELECT语句不占用日志。

$ db2 "force application (441)" DB20000I The FORCE APPLICATION command completed successfully. DB21024I This command is asynchronous and may not be effective immediately.

日志满的避免:

1.)根据抓取到的应用的snapshot,找应用开发人员查看为何不肯提交,这才是避免问题再次出现的根本办法。

2.)从DB2管理层面,可以设置数据库配置参数max_log和num_log_span

3.)可以写脚本,以固定的间隔抓取database snapshot中的Appl id holding the oldest transaction, 如果长时间不发生变化(比如2天),就Force掉。

补充说明:

查看每个应用使用的日志大小:

$ db2 "select application_handle,UOW_LOG_SPACE_USED,UOW_START_TIME FROM TABLE(MON_GET_UNIT_OF_WORK(NULL,-1)) order by UOW_LOG_SPACE_USED"

也可以通过db2pd -db <dbname> -transactions 查看每个正在使用的日志的情况

重点关注的参数有:

ApplHandl

The application handle of the transaction.

SpaceReserved

The amount of log space that is reserved for the transaction.

LogSpace

The total log space that is required for the transaction, including the used space and the reserved space for compensation log records.

通过对DB2活动日志满原因的分析我们就可以找到解决此问题的方法同时避免此问题的再次出现

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

db2如何关闭日志,db2数据库日志满了,如何是哪个数据库进程

在db2diag.log里面有进程号,然后get snapshot~

希望我的回答对你有帮助,如果有疑问,请继续“追问”

答题不易,互相理解,您的采纳是我前进的动力。

db2归档日志和活动日志的区别?

  1. 没有提交的事务属于活动日志中的内容,另外还有一种情况是提交的但是数据变动并没有刷入磁盘中,记录着这种事务的日志也是属于活动日志。

  2. rollforward中指定的目录是前滚日志所在的路径,也就是说rollrorward的时候首先会去这个目录里面找日志。恢复到删除点,只需把归档日志路径下的日志copy就可以。因为活动日志在归档路径下也会有备份。

  3. include logs包含的日志是在整个备份期间产生的日志。

  4.  rollforward首先在overflow路径下寻找日志,其次还会在归档路径和活动日志下寻找需要前滚的日志。如果这三个路径下找不到,rollforward就会失败,报错找不到日志。

关于DB2活动日志目录下存在已经归档日志的疑惑,求解答

关于DB2活动日志目录下存在已经归档日志的疑惑

CVS 是Concurrent Versions System 的缩写,它是开放源代码软件世界的一个伟大杰作,由于其简单易用、功能强大,跨平台,支持并发版本控制,而且免费,它在全球中小型软件企业中得到了广泛使用。

其最大的遗憾就是缺少相应的技术支持,许多问题的解决需要自已寻找资料,甚至是读源代码。

Merant PVCS:

MERANT 公司的PVCS 能够提供对软件配置管理的基本支持,通过使用其图形界面或类似SCCS 的命令,能够基本满足小型项目开发的配置管理需求。PVCS 虽然功能上也基本能够满足需求,但是其性能表现一直较差,逐渐地被市场所冷落。

那在db2中如何手动发起归档日志或切换日志

在数据库中,日志的重要性那是大大的大,所以日志一定是要先了解的.

日志类型:

主日志(Primary logs)

预分配,可用数目由db cfg的LOGPRIMARY参数规定

辅助日志(Secondary logs)

依需要再动态分配,最大数目由db cfg的LOGSECOND参数来定.辅助日志同时会在数据库

所有连接全部关闭后被删除.

如果LOGSECOND为-1,则不*记录日志的大小.

日志记录类型:

有两类循环日志和归档日志,可以通过"配置数据库日志记录"向导来修改数据库的日志记录类型。

(1)循环日志:

默认的日志记录策略,循环日志按顺序使用。当日志中所包含的工作已提交或回滚时,可以重用。

主日志预先分配。 而辅助日志则在需要时才分配。

循环日志有两类日志,主日志和辅助日志.

主日志预先就要配好了,辅助日志在需要时再分分配.

DB2管理程序按顺序请求 -> 查找主日志 -> 需要的主日志不可用 -> 分配一个辅助日志.

-> 辅助日志也满了 -> 再去检查下主日志能用不 -> 还不可用就又分配一个新的辅助日志

-> 然后就一直重复上述检查 

-> 一直到有主日志文件变为可重用为止.然后就把辅助日志释放掉.

循环日志在备份恢复中的作用:

不能进行前滚恢复,但可进行崩溃恢复和版本恢复

仅支持脱机备份.

(2)归档日志

归档日志是一种日志文件的管理技术,将那些处理非活动状态的日志文件进行归档.

归档日志是非默认的.

归档日志有几个要类

1.活动日志

包含发那些尚未提交(或回滚)的事务相关信息.还包含已提交但改动还没与的的事务相关信息

restart database;

rollforward

2.联机归档日志

当活动日志关闭时,将成为一个归档日志。称它们为"联机" 是因为它们和活动

日志存放在相同的子目录下。

3.脱机归档日志

这些日志文件已经从活动日志所在的目录中移开了。可以手动,也可以

通过 userexit这样的过程调用来自动进行。归档的日志文件可以

存储到磁带或其它介质上。如tsm上。

正在用的日志(活动日志) -> 如果日志用完了(联机归档日志) -> 再把这些不用的日志给备份或移开(脱机归档日志)

循环日志在备份恢复中的作用:

唯一支持前滚恢复和实现可恢复数据库的日志方法.

支持脱机备份和联机备份

在DB2数据库中查看与日志有关的主要参数:

userexit  是否启用用户出口  

logretain 是否启用归档日志  

trackmod 是否启用增量备份功能 

这些默认是off,即循环日志模式,如为"Yes"或"Recovery",则表明为归档日志模式.

Unix/Linux下的查看命令:

DB2 v9及以前版本:

db2 get db cfg for sample|grep "USEREXIT"

db2 get db cfg for sample|grep "LOGRETAIN"

db2 get db cfg for sample|grep "TRACKMOD"

DB2 v10:

db2 get db cfg for sample |grep "LOGARCHMETH1"

Windows下的查看命令:

DB2 v9及以前版本:

db2 get db cfg for sample |find /I "userexit"

db2 get db cfg for sample |find /I "logretain"

db2 get db cfg for sample |find /I "trackmod"

DB2 v10:

db2 get db cfg for sample |find /I "LOGARCHMETH1"

可更改这些参数使DB2数据库处于归档日志模式,以便支持联机备份.

更改命令:

DB2 v9及以前版本:

db2 update db cfg for sample using userexit on//启用用户出口  

db2 update db cfg for sample using logretain on//启用归档日志  

db2 update db cfg for sample using trackmod on//启用增量备份功能 

DB2 v10:

-- DISK : 本地磁盘

-- TSM : Tivoli Storage Manger

-- VENDOR : 第三方存储设备

db2 update db cfg for sample using LOGARCHMETH1 disk:/db2/db/log_archive

注意事项:

变更这些归档模式参数后,会提示SQL1116N错误,DB2数据库处于backup pending状态,是不能马上连接上数据库的,必须要做脱机备份一次才行.

脱机备份命令例子:

db2 backup db sample to c:\xclbkcold

可手工归档下,检查下生成的日志(前提是没数据库连接):

db2 archive log for db xcldb

db2 list history archive log all for xcldb

关于日志的管理:

查看首活动日志:

db2 connect to xcldb2

--中文环境使用这个

db2 get db cfg|find "首个活动日志文件"

--英文环境使用这个

db2 get db cfg|grep -i "First active log file"

db2 connect reset

db2 terminate

清理日志:

db2 connect to xcldb2

db2 prune logfile prior to S0000033.LOG

其中S0000011.LOG就是刚刚的首活动日志

手工归档命令:

db2 archive log for db xcldb2 //会手工产生日志

如何查看db2的数据库的日志文件

查看db2的数据库的日志文件:

实例日志在sqllib/db2dump/db2diag.log,记录起停、出错警告信息。

数据库的事务日志通过db2 get db cfg for <dbname>,看NEWLOGPATH下面一行。

扩展资料:

在日常DB2的维护中,transaction log full是比较常见的问题,日志空间使用情况也是我们比较重视的问题,如果日志是单独的文件系统分区,在操作系统上即可看到日志空间使用情况,对日志使用情况进行监控,可以看到如下信息:

$ df -g

Filesystem GB blocks Free %Used Iused %Iused Mounted on

/dev/db2inst1_log01 60.00 54.50 10% 1458 1% /db2inst1_log01

参考资料来源:百度百科-DB2


  • 本文相关:
  • 解决db2事务日志已满及日志磁盘空间已满问题办法详解
  • db2 常用命令小结
  • 比较sql server与oracle、db2
  • db2数据库的备份和恢复
  • db2优化(简易版)
  • ibm db2 日常维护汇总(一)
  • db2数据库的安装
  • db2常用傻瓜问题1000问(一)
  • db2数据同步方面的经验
  • db2常用傻瓜问题1000问(四)
  • db2个人版(linux)安装
  • db2编程序技巧 (十)
  • ibm db2 日常维护汇总(二)
  • db2常用傻瓜问题1000问(二)
  • db2常用傻瓜问题1000问(五)
  • ibm db2 日常维护汇总(六)
  • db2 udb v8.1管理学习笔记(二)
  • ibm db2 日常维护汇总(三)
  • db2编程序技巧 (八)
  • db2 udb v8.1管理学习笔记(一)
  • mysql数据库结构和数据的导出和导入
  • 如何访问大型机、小型机上的db2 9数据服务器
  • db2常用傻瓜问题1000问(三)
  • ibm db2 日常维护汇总(四)
  • db2 udb v8.1管理学习笔记(三)
  • db2数据库的备份和恢复
  • 使用xquery查询db2 xml数据
  • db2编程序技巧 (一)
  • db2 数据库创建、表的ixf文件导出导入示例
  • db2如何关闭日志,db2数据库日志满了,如何是哪个...
  • db2归档日志和活动日志的区别?
  • 关于DB2活动日志目录下存在已经归档日志的疑惑,求...
  • 那在db2中如何手动发起归档日志或切换日志
  • 如何查看db2的数据库的日志文件
  • db2如何从归档日志改回循环日志
  • db2 10.5 怎样开启归档日志。 老的方法报discontin...
  • db2日志文件在哪里
  • db2如何查看是归档模式
  • DB2数据库LOAD时候怎么输出日志到文件
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved