首页 > 代码库 > SQL0946N错误及DB2事务日志

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

现在可以发现没有事务日志满的错误了, 最后再提交. 这是最为简单快速的方式. 但是缺点也很明显, 那就是当事务失败时将无法回滚.

2, 增大日志空间

日志空间的大小=(LOGPRIIMARY + LOGSECOND) * LOGFILSIZ * 4K, 因此可以通过修改数据库的配置文件LOGPRIIMARY, LOGSECOND和LOGFILSIZ来增大事务日志空间. 其中更改LOGSECOND不需要断开DB连接, 是最为简单的方法是