db2数据库_百万级数据插入表报错,sqlcode=-964

问题描述:

在项目中编写了存储过程,向某张表插入数据,某个表现有200万+的数据量,在执行存储过程中报错,sqlcode=-964

存储过程大体结构如下:

insert 
into A
select *
from B

原因分析:

百度了一下发现是数据库日志表满了,我就查询了日志表,查看使用率

select 
    DB_NAME, 
    LOG_UTILIZATION_PERCENT
from 
    SYSIBMADM.LOG_UTILIZATION

查询结果:database  99.7    

问题解决:

1.增加日志文件大小,增大主/副日志文件数量,执行如下命令:

db2 update db cfg for databaseusing LOGFILSIZ 40960
db2 update db cfg for databaseusingusing LOGPRIMARY 40
db2 update db cfg for databaseusingusing LOGSECOND 100
The UPDATE DATABASE CONFIGURATION command completed successfully.
The UPDATE DATABASE CONFIGURATION command completed successfully.
The UPDATE DATABASE CONFIGURATION command completed successfully.

执行成功后,再次执行存储过程,发现日志使用率还是飙升

2.通过日志表发现当对表进行操作如:插入,删除,更新的时候会生成日志记录,而有sql语句可以设置当前表不生成日志表记录

sql语句如下:

ALTER TABLE tablename ACTIVATE NOT LOGGED INITIALLY

在执行了该语句的时候,再次执行存储过程,发现日志使用率再次是飙升

3.仔细研究了【ALTER TABLE tablename ACTIVATE NOT LOGGED INITIALLY】语句发现,该语句是在当前事务下会生效,所以在存储过程中执行插入语句前执行该语句,存储过程sql语句如下

str_log = 'ALTER TABLE tablename ACTIVATE NOT LOGGED INITIALLY';
execute immediate str_log;

再次存储过程,这次成功插入数据。

你可能感兴趣的:(数据库,db2,错误整理)