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

2 篇文章 0 订阅
2 篇文章 0 订阅

问题描述:

在项目中编写了存储过程,向某张表插入数据,某个表现有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;

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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值