SQL0946N错误及DB2事务日志
在对DB2数据库进行批量增删的时候, 如果数据量比较大会导致SQL0964N错误, DB2 Knowledge center(http://pic.dhe.ibm.com/infocenter/db2luw/v10r5/topic/com.ibm.db2.luw.messages.sql.doc/doc/msql00964c.html)对该错误的解释为"The transaction log for the database is full", 即事务日志满. 由于在进行增删操作的时候数据库需要记录事务日志以便在发生异常时能够回滚, 当批处理的数据量比较大超过了事务日志空间的容量就会发生这样的错误.
解决这个问题主要有两个方法
1, 对执行的操作取消事务日志
首先取消数据库的自动提交功能, 在命令行可以通过+C参数取消, 然后需要修改导致事务日志满的表tbl.
ALTER TABLE tbl ACTIVATE NOT LOGGED INITIALLY;
现在可以执行之前导致事务日志满的SQL语句了, 例如
DELETE FROM tbl
现在可以发现没有事务日志满的错误了, 最后再提交. 这是最为简单快速的方式.
ATTENTION: 但是必须要慎重使用这个方法, 因为当操作失败的时候将导致改表无法恢复.
有一次我需要从一个有1.4亿行的表里面删除大概3000W的数据, 执行完NOT LOGGED INITIALLY后开始删除数据, 由于删除时间太长我就强制取消了删除操作, 删除操作取消后DB2返回如下信息:
DB21034E 该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在
SQL 处理期间,它返回:
SQL1476N 当前事务因错误 "-952" 而回滚。 SQLSTATE=40506
悲剧的是当我准备再次对这张表进行操作的时候DB2报如下信息:
DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command. During SQL processing it returned:
SQL1477N For table "DB2INST1.IBASE_RAW2" an object "28" in table space "2"
cannot be accessed. SQLSTATE=55019
经查询DB2 Info Center, 得到的结果是...
The table had NOT LOGGED INITIALLY activated when the unit of work was rolled back.
解决办法是...
If the object is a table and it had NOT LOGGED INITIALLY activated, drop the table. If this table is required, re-create it
只能删除表, 哭瞎...
2, 增大日志空间
日志空间的大小=(LOGPRIIMARY + LOGSECOND) * LOGFILSIZ * 4K, 因此可以通过修改数据库的配置文件LOGPRIIMARY, LOGSECOND和LOGFILSIZ来增大事务日志空间. 其中更改LOGSECOND不需要断开DB连接, 是最为简单的方法是
SQL0946N错误及DB2事务日志的更多相关文章
- db2 事务日志
曾经因为对DB2 的 NOT LOGGED INITIALLY 属性认识不足而吃了亏.当时需要往表中插入大量的数据,最初也没有考虑太多就使用了传统的insert 命令,由于数据量实在过于巨大,而且系统 ...
- DB2事务日志
1.DB2数据库的日志原理 事务日志记录数据库中所有对象和数据的改变,在早前版本中最大可达256G,其大小为( logprimary + logsecond ) * logfilsiz,其中logpr ...
- db2事务日志已满解决办法
查看事务日志配置(MICRO_11为数据库名称): db2 get db cfg for MICRO_11 运行结果: 日志文件大小(4KB) (LOG ...
- DB2事务日志已满的解决方法
DB2命令终端输入: db2 update db cfg for <dbname> using LOGPRIMARY 50 db2 update db cfg for <dbname ...
- DB2 的事务日志
1. DB2事务日志:DB2的日志分主日志和次日志,主日志是在数据库第一次被连接和激活时创建的,而次日志是当写满所有的主日志后,才动态分配次日志,主日志和次日志受设置个数的制约,当配置的所有主 ...
- 【DB2】数据库的事务日志已满。SQLSTATE=57011
问题描述 在使用数据库的时候报错如上图,我们先使用db2 get db cfg for sample查看相关配置参数,其中sample为数据库名称 C:\Users\Thinkpad>db2 g ...
- DB2不记录事务日志
1. DB2大数据处理不记录事务日志步骤: 建表需要添加属性“NOT LOGGED INITIALLY” 在大批量更改操作的同一个事务开始时执行:“ALTER TABLE tabname ACTI ...
- mysql之 日志体系(错误日志、查询日志、二进制日志、事务日志、中继日志)
一. mysql错误日志:错误日志记录的事件:a).服务器启动关闭过程中的信息b).服务器运行过程中的错误信息c).事件调试器运行一个事件时间生的信息d).在从服务器上启动从服务器进程时产生的信息lo ...
- mysql基础之日志管理(查询日志、慢查询日志、错误日志、二进制日志、中继日志、事务日志)
日志文件记录了MySQL数据库的各种类型的活动,MySQL数据库中常见的日志文件有 查询日志,慢查询日志,错误日志,二进制日志,中继日志 ,事务日志. 修改配置或者想要使配置永久生效需将内容写入配置文 ...
随机推荐
- 会话技术( Cookie ,Session)
会话技术: 会话:浏览器访问服务器端,发送多次请求,接受多次响应.直到有一方断开连接.会话结束. 解决问题:可以使用会话技术,在一次会话的多次请求之间共享数据. ...
- SSIS,参数坑
首先我有一个这样的饿存储过程, @procGuid 这个是 存放 guId的字符串 当如传入 0 的时候, @procGuid 会赋值,并且返回. ) ,@procGuid output print ...
- [转载]了解Linux的进程与线程
本文转自Tim Yang的博客http://timyang.net/linux/linux-process/ .对于理解Linux的进程与线程非常有帮助.支持原创.尊重原创,分享知识! 上周碰到部署在 ...
- MS SQL Could not obtain information about Windows NT group/user 'domain\login', error code 0x5. [SQLSTATE 42000] (Error 15404)
最近碰到一个有趣的错误:海外的一台数据库服务器上某些作业偶尔会报错,报错信息如下所示: -------------------------------------------------------- ...
- Linux From Scratch(从零开始构建Linux系统,简称LFS)- Version 7.7(一)
一. 准备工作 1. 需要一个Linux宿主系统,例如早先版本的 LFS,Ubuntu/Fedora,SuSE 或者是在你的架构上可以运行的其它发行版 如果想实现Win7与Linux双系统,可参考我的 ...
- webhdfs 使用shell下载文件
echo "test web hdfs how to use" >> foo.txt hdfs dfs -put foo.txt / HDFS启用webhdfs之后,可 ...
- h3c防火墙的设置过程
公司采购了一款h3c的防火墙,型号为F100-E-G,以前也设置过H3C的防火墙,不过这次还是设置还是有各种问题,所以把设置过程记录下来,方便以后查阅. 一.防火墙一般在0口都设置一个默认的IP地址1 ...
- Nim游戏
目前有3堆石子,每堆石子个数也是任意的,双方轮流从中取出石子,规则如下:1)每一步应取走至少一枚石子:每一步只能从某一堆中取走部分或全部石子:2)如果谁不能取谁就失败. Bouton定理: 必败状态当 ...
- Struts2 JQuery UI常用插件
一.什么是插件 ①是遵循一定接口规范编写的程序 ②是原有系统平台功能的扩展和补充 ③只能运行在规定的系统平台下,而不能单独运行 注:由于jQuery插件是基于jQuery脚本库的扩展,所以所有jQue ...
- etl实现字段值相加
数据库USERS表: etl步骤: (2) (3) 其中java代码为: import test.Test; public boolean processRow(StepMetaIn ...