曾经因为对DB2 的 NOT LOGGED INITIALLY 属性认识不足而吃了亏。当时需要往表中插入大量的数据,最初也没有考虑太多就使用了传统的insert 命令,由于数据量实在过于巨大,而且系统中还运行着其他事务,报"SQL0964C  数据库的事务日志已满" 的错误,便查找DB2 中是否也有类似Oracle 中的Not logging 的特性。

     DB2 中的表的not logged initially 特性,可以避免insert、delete、update 数据产生的日志。以为在建表的时候指定该属性就可以避免insert 产生的日志(只要将自动提交的功能闭关,使用not logged initially 特性建表以后马上接下去执行事务,not logged initially特性是有效的),结果还是因为日志量太大报数据库日志满的错误。求助DBA得知需要在每次事务执行前激活not logge initially 特性(ALTER TABLE <tableName> ACTIVATE NOT LOGGED INITIALLY;)如果一张表在创建的时候没有指定表的not logged initially 特性,使用该alter tabele ... activate not logged initially 语句也是可以激活not logged initially 特性的。激活表的not logged initially 特性以后,接下来的DML操作在事务结束前不记日志。使用方式如下:
commit;--提交前一个事务。
ALTER TABLE <tableName> ACTIVATE NOT LOGGED INITIALLY;--激活表的not logged initially 特性。
insert/delete/update --DML操作不及日志,可以减少系统的日志量和提高DML语句的操作性能。
commit;--关闭表的not logged initially 特性。
为了控制事务需要将QC或者Toad 等开发和运行环境中的自动提交(autocommit)的功能关闭。使用not logged initially 特性建好表以后,如果DDL语句提交了那么才需要激活表的not logged initially 特性。
   使用Not logged initially 特性最重要的是要控制好事务。

DB2如何开启不记日志模式?开启之后,会有哪些后果?

有些DB2操作,比如insert/update/delete/import,若数据量较大,则会占用大量日志,甚至导致日志满。如果需要的话,可以开启不记日志模式

我这里也举个例子,下面事务中的insert语句是不记日志的:

  1. $ db2 +c "alter table t1 activate not logged initially"
  2. DB20000I  The SQL command completed successfully.
  3. $ db2 +c "insert into t1 select * from t1"
  4. DB20000I  The SQL command completed successfully.
  5. $ db2 "commit"
  6. DB20000I  The SQL command completed successfully.

注意,这里的不记日志操作,仅仅在同一个事务内有效,也就是说,这个事务结束(发出了commit命令)之后,后续操作会重新记录日志。

------分割线--------

开启不记日志操作可能的严重后果如下:
  1.1 如果在这个事务中显式地发出了rollback命令,或者SQL因为意外情况失败(比如锁超时、内存不足等)导致回滚,则该表将不能访问,必须被删除:

  1. $ db2 +c "alter table t1 activate not logged initially"
  2. DB20000I  The SQL command completed successfully.
  3. $ db2 +c "insert into t1 select * from t1"
  4. DB20000I  The SQL command completed successfully.
  5. $ db2 "rollback"
  6. DB20000I  The SQL command completed successfully.
  7. $ db2 "select * from t1"
  8. BIRTHDATE
  9. ----------
  10. SQL1477N  For table "MIAOQINGSONG.T1" an object "5" in table space "2" cannot
  11. be accessed.  SQLSTATE=55019

1.2 如果数据库出问题,使用rollforward命令(rollforward到上面操作时间点之后)将无法恢复该表,rollforward完成之后,该表将被置于不可访问状态。

db2 事务日志的更多相关文章

  1. SQL0946N错误及DB2事务日志

    在对DB2数据库进行批量增删的时候, 如果数据量比较大会导致SQL0964N错误, DB2 Knowledge center(http://pic.dhe.ibm.com/infocenter/db2 ...

  2. DB2事务日志

    1.DB2数据库的日志原理 事务日志记录数据库中所有对象和数据的改变,在早前版本中最大可达256G,其大小为( logprimary + logsecond ) * logfilsiz,其中logpr ...

  3. db2事务日志已满解决办法

    查看事务日志配置(MICRO_11为数据库名称): db2 get db cfg for MICRO_11 运行结果: 日志文件大小(4KB)                         (LOG ...

  4. DB2事务日志已满的解决方法

    DB2命令终端输入: db2 update db cfg for <dbname> using LOGPRIMARY 50 db2 update db cfg for <dbname ...

  5. DB2 的事务日志

    1.     DB2事务日志:DB2的日志分主日志和次日志,主日志是在数据库第一次被连接和激活时创建的,而次日志是当写满所有的主日志后,才动态分配次日志,主日志和次日志受设置个数的制约,当配置的所有主 ...

  6. DB2不记录事务日志

    1. DB2大数据处理不记录事务日志步骤:  建表需要添加属性“NOT LOGGED INITIALLY”  在大批量更改操作的同一个事务开始时执行:“ALTER TABLE tabname ACTI ...

  7. 【DB2】数据库的事务日志已满。SQLSTATE=57011

    问题描述 在使用数据库的时候报错如上图,我们先使用db2 get db cfg for sample查看相关配置参数,其中sample为数据库名称 C:\Users\Thinkpad>db2 g ...

  8. db2 活动日志激增的原因分析处理

    本文简单地介绍了DB2中日志的使用.活动日志以及首个活动日志的概念.日志满的原因.日志满的诊断.临时处理以及避免办法 日志使用 下图显示了并发事务条件下,日志使用的示意 有3个并发的程序Process ...

  9. 浅谈SQL Server中的事务日志(二)----事务日志在修改数据时的角色

    简介 每一个SQL Server的数据库都会按照其修改数据(insert,update,delete)的顺序将对应的日志记录到日志文件.SQL Server使用了Write-Ahead logging ...

随机推荐

  1. eclipse自动生成变量名声明(按方法返回值为本地变量赋值)

    eclipse自动生成变量名声明(按方法返回值为本地变量赋值) ctrl+2+L 这个快捷键可自动补全代码,极大提升编码效率! 注:ctrl和2同时按完以后释放,再快速按L.不能同时按! 比如写这句代 ...

  2. 源码编译安装mysql5.5.33

    源码编译安装mysql5.5.33 一.安装cmake编译工具 跨平台编译器 # yum install -y gcc* # yum install -y cmake 解决依赖关系 # yum ins ...

  3. RunLoop的应用场景---关于滑动tableView的时候NSTimer 暂停的问题

    1.我们经常会在应用中看到tableView 的header 上是一个横向ScrollView,一般我们使用NSTimer,每隔几秒切换一张图片.可是当我们滑动tableView的时候,顶部的scol ...

  4. CSS伪元素before、after妙用

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. Myeclipse启动不了的解决方法

    Myeclipse启动不了的解决方法    我们在开发过程中经常在加载大工程时由于项目很大,导致编译时间很长.或是其他原因导致进度条有时候一直在不停地跑,占用了大量内存,在无奈之下直接将进程kill掉 ...

  6. 【Algorithm | 链表】单链表“环”、“环的起点”、“环的长度”问题

    参考资料 • Floyd判圈算法 { 链接 } • 单链表“环”.“环的起点”.环的长度”问题 { 链接 } 链表环的问题 一.判断链表有换 使用两个指针slow和fast.两个指针开始时均在头节点处 ...

  7. 浅析微信支付:公众平台卡券功能开通、HTML5线上发券(JS-SDK接口)、查看卡券详情

    本文是[浅析微信支付]系列文章的第十六篇,主要讲解如何使用微信公众平台的卡券功能.如何使用HTML5在网页展示用户领券以及微信卡券和商户平台代金券的关系. 浅析微信支付系列已经更新十六篇了哟-,没有看 ...

  8. Using jconsole to connect to JMX on AS7

    Using jconsole to connect to JMX on AS7 https://developer.jboss.org/wiki/UsingJconsoleToConnectToJMX ...

  9. python错误、调试、测试

    1.错误, Python内置的try...except...finally用来处理错误十分方便.出错时,会分析错误信息并定位错误发生的代码位置才是最关键的. 程序也可以主动抛出错误,让调用者来处理相应 ...

  10. BZOJ1040 [ZJOI2008]骑士 基环树林(环套树) 树形动态规划

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题意概括 有n个人,每一个人有一个最恨的人. 并且,每一个人有一个权值. 一个人不可以和他最恨的人同时被选中. 现在请你求出在 ...