db2 delete大表部分数据时经常会产生很大日志,造成数据库日志空间满的情况。
解决方法:
1、细分删除区间范围
增加where条件,确保每次删除事务只删除少量数据,以执行次数换执行安全
2、删除区间不记日志
commit
alter table tablename active not logged initially
delete tablename where id>1000
commit
两个commit之间的删除动作不记日志,操作完commit后恢复到记日志
3、增加日志文件大小
db2 update db cfg for dbname using LOGFILSIZ 262144
db2 update db cfg for dbname using LOGPRIMARY 20
4、小表设计--根本解决之道
在数据表设计时,就考虑到可能存放大数据的表根据时间或者其他字段拆分为很多小表,这样每次涉及数据删除都用/dev/null直接清空
注:
delete操作执行期间,相关表会加E锁,只允许其他应用以WITH UR读方式进行访问。