[DB2]删除大数据量数据及57011错误处理
平常删除数据库中表数据都用delete语句,但是在DB2中删除大数据量会报Error Code: -964, SQL State: 57011的错误,这是由于在用delete删除数据时会产生数据库事务日志,但是数据库配置的日志文件空间太小造成的。
解决方法可以增加日志空间或者在删除表内容的时候让其不产生事务日志。
可以用如下命令修改日志文件大小:
update db cfg for sample using LOGFILSIZ 555555 必须在所有应用程序都与此数据库断开连接之后,更改才会生效。
可以使用如下命令在删除表中内容时不产生事务日志
ALTER TABLE TABLE_NAME ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE;
不产生日志详细步骤:
-- db2 delete 大表不写日志操作
1.update command options using c off -- //关闭自动提交
2.alter table MARPT.RPT_DIM_U_ORG_INX_M_CURR_CUS_PRO_TBK activate not logged initially //设置不记日志
3.delete from MARPT.RPT_DIM_U_ORG_INX_M_CURR_CUS_PRO_TBK -- 删除数据
4.commit//手动提交
5.update command options using c on//打开自动提交
相关操作说明;
1.alter table testdeletetab ACTIVATE NOT LOGGED INITIALLY,设置表操作不记日志,这条命令只在一个事务里有效,遇到commit之后就失效了,这个很需要关注,因为有的时候我们的连接都是设置的自动提交,所以虽然设置了不记日志,但是并没有起到作用。
2.可以通过相关的命令查看当前命令参数
db2 list command options
参考文章:
1.db2 delete 大表不写日志方法
http://www.linuxidc.com/Linux/2011-06/37849.htm
http://jum.iteye.com/blog/960899
DB2-57011错误处理
DB2 报 SQLSTATE=57011错误的解决办法
SQLSTATE=57011 为数据库中表空间已满的异常(错误)
可以用命令查看表空间
db2 => list tablespaces show detail
有两种类型表空间:
第一种类型表空间为:SYSCATSPACE,类型为系统管理表空间(SMS)
第二种类型表空间为:用户自己的表空间(比如xjhspaces11),类型为数据库管理表空间(DMS)
查看表空间中总的表空间(Total pages)和 剩余表空间(Free pages)
如果是系统管理表空间(SMS)不够,则是由于磁盘空间不够,需要增加磁盘空间
如果是数据库管理表空间(DMS)不够,则需要扩展表空间
扩展表空间的命令为:
db2 alter tablespace extend (all <num_pages> )
例如:db2 => alter tabblespace xjhspces11 extend(all 2560M)
扩展了数据库表空间2.5G
注意:对数据库管理表空间的扩展前,必须检查磁盘裸设备的空间,如果空间不够,需要增加磁盘裸设备的空间,再扩展数据库管理表空间,并且在扩展表空间之前,最好备份数据库,以免带来不必要的损失
备份数据库命令:$ db2move databaseName export
参考资料: