热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

怎么实现DB2数据库事务日志已满的分析

这篇文章给大家介绍怎么实现DB2数据库事务日志已满的分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。某日下午,开发报告

这篇文章给大家介绍怎么实现DB2数据库事务日志已满的分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

某日下午,开发报告说在执行DML操作时,数据库报事务日志已满的错误。

db2diag.log数据库日志中的报错信息:

2013-04-01-16.43.30.736907+480 E2147482982C502    LEVEL: Error

PID     : 126660               TID  : 1           PROC : db2agent (SSO) 0

INSTANCE: db2inst1             NODE : 000         DB   : SSO

APPHDL  : 0-1103               APPID: GA0429B5.F627.130401082711

FUNCTION: DB2 UDB, data protection, sqlpgResSpace, probe:2860

MESSAGE : ADM1823E  The active log is full and is held by application handle

         "1103".  Terminate this application by COMMIT, ROLLBACK or FORCE

         APPLICATION.

客户端具体信息如下:

$db2 delete from tzsdb01
DB21034E  该命令被当作 SQL 语句来处理,因为它不是有效的“命令行处理器”命令。
在 SQL 处理期间,它返回:
SQL0964C  数据库的事务日志已满。  SQLSTATE=57011

这个问题的原因是:表中数据量过大,delete 时,会写入日志,但日志容量过小。

解决方法:  增大日志容量、数据量 或 减少一次的删除数据量,分多次删除。

生产环境为避免白天停库,提示开发分多次删除,这样就不出错了。但是要彻底解决这个问题,还需申请停库修改数据库参数。

我们先看一下,数据库的关于日志的配置参数

$ db2 get db cfg for tzsdb01

      Database Configuration for Database zssqdb01

Database configuration release level                    = 0x0d00
Database release level                                  = 0x0d00

Database territory                                      = cn
Database code page                                      = 1208
Database code set                                       = UTF-8
Database country/region code                            = 86
Database collating sequence                             = IDENTITY

Multi-page file allocation enabled                      = YES

Log retain for recovery status                          = RECOVERY
User exit for logging status                            = YES

Self tuning memory                    (SELF_TUNING_MEM) = ON
Size of database shared memory (4KB)  (DATABASE_MEMORY) = AUTOMATIC(1662183)
Database memory threshold               (DB_MEM_THRESH) = 10
Max storage for lock list (4KB)              (LOCKLIST) = AUTOMATIC(130720)
Percent. of lock lists per application       (MAXLOCKS) = AUTOMATIC(97)
Package cache size (4KB)                   (PCKCACHESZ) = AUTOMATIC(421273)
Sort heap thres for shared sorts (4KB) (SHEAPTHRES_SHR) = AUTOMATIC(46809)
Sort list heap (4KB)                         (SORTHEAP) = AUTOMATIC(9361)

Database heap (4KB)                            (DBHEAP) = AUTOMATIC(2626)
Catalog cache size (4KB)              (CATALOGCACHE_SZ) = 300
Log buffer size (4KB)                        (LOGBUFSZ) = 4096

Log file size (4KB)                         (LOGFILSIZ) = 1024
Number of primary log files                (LOGPRIMARY) = 10
Number of secondary log files               (LOGSECOND) = 4
Changed path to log files                  (NEWLOGPATH) =
Path to log files                                       = /home/db2inst1/db2inst1/NODE0000/SQL00001/SQLOGDIR/

先看增大日志的容量,注意红色的值为1024

$db2 update db cfg for zssqdb01 using logfilsiz 8192           将其增大到8192

然后停止应用,停库再启库就生效了

$db2 force applications all

$db2stop

$db2start

如果需要增大日志的数据量则需要进行计算和这样设置,这时日志容量已变为8192

Log file size (4KB)                         (LOGFILSIZ) = 8192
Number of primary log files                (LOGPRIMARY) = 10
Number of secondary log files               (LOGSECOND) = 4

现在的日志数据量为

计算公式如下:

数据库事务日志的数据量大小 = ( LOGPRIMARY + LOGSECOND )* LOGFILSIZ * 4KB

即:

( 10 + 4)* 8192 * 4KB = 458752 K = 458 M  (大约数)

下面断开此数据库的所有连接

修改主日志文件个数:    db2 update db cfg for using LOGPRIMARY 15

修改辅助日志文件个数:db2 update db cfg for using LOGSECOND 10

这时的大小=(15+10)*8192*4KB=819200K=819M (大约数)

然后停库再启库,问题得到解决。

注:LOGPRIMARY+LOGSECOND不能超过255,日志空间大小不能超过256G。对于LOGPRIMARY和LOGFILSIZ参数的修改需要断开连接,重连数据库才能生效。LOGSECOND参数的修改则立即生效,对于生产系统比较快的应急解决办法,可以直接先修改此参数。

补充知识:

1,主日志文件的数目 LOGPRIMARY

此数据库配置参数用来指定要预分配的主日志文件个数。主日志文件建立分配给恢复日志文件的固定存储器数量。在循环日志管理模式下,数据库事务将按顺序重复使用主日志,也就是当一个主日志已满时,顺序使用下一个主日志,如果主日志已满,则按需一次分配一个辅助日志,辅助日志在使用完后,将被释放。如果你发现数据库会经常分配辅助日志文件,则可能需要通过增大日志文件大小或增大主日志文件的数目来提高系统性能。

2,辅助日志文件的数目 LOGSECOND

此数据库配置参数用来指定按需分配的辅助日志文件个数。尽量不要把此参数的值设置成“ -1 ” ,“ -1 ”代表你在请求一个无限的活动日志空间,数据库也不会报数据库事务日志已满错误,如果空间不足则会报日志磁盘已满错误。

3,日志文件大小 LOGFILSIZ

此数据库配置参数用来指定日志文件的大小。

4,数据库事务日志已满错误

数据库事务日志已满错误是指当前事务无法写入到活动日志中(此时主日志文件和辅助日志文件已经全部用完或者没有足够当前事务写入的空间),需要注意的是,这个错误和日志磁盘空间已满是两个概念。数据库事务日志已满不是由于磁盘空间满引起的,而是由于没有落实的事务总体过大,超过了数据库事务日志所能容纳的最大大小所造成的。

当出现这样的错误时,不要尝试使用 DB2STOP FORCE 命令来强制停掉数据库,建议大家使用 FORCE APPLICATION 命令停掉引起这个错误的应用程序或者停掉所有的应用程序。也不建议大家使用 KILL 命令来杀掉任何 DB2 相关的进程。如果 使用DB2STOP FORCE命令hang住了,最后再尝试杀掉进程,重新DB2START或重启服务器。

关于怎么实现DB2数据库事务日志已满的分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


推荐阅读
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • mysql-cluster集群sql节点高可用keepalived的故障处理过程
    本文描述了mysql-cluster集群sql节点高可用keepalived的故障处理过程,包括故障发生时间、故障描述、故障分析等内容。根据keepalived的日志分析,发现bogus VRRP packet received on eth0 !!!等错误信息,进而导致vip地址失效,使得mysql-cluster的api无法访问。针对这个问题,本文提供了相应的解决方案。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
author-avatar
终渐疯分_501
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有