DB2 delete大数据表中的部分数据经常会产生很大日志,造成数据库日志空间满的情况。
现总结几种解决方法如下:
1、细分delete区间
增加where条件,确保每次delete事务只删除少量数据,以执行次数换执行安全;
2、delete期间不记日志
commit
alter table tabname activate not logged intially
delete tabname where id >1000
commit
两个commit之间的delete 动作是不记日志的,操作完后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读方式进行访问。