2014-01-27 40 views
0

我有一个严重的问题..我有更新的存储过程,几百万条记录。这一切都发生在游标中。 我遇到了问题,无论我迄今为止做了什么,它都会因事务日志满错误而失败 SQL0964C数据库的事务日志已满。 SQLSTATE = 57011db2无法停止获取事务日志是填充错误

在过去几天我有,一个接一个,形成如下,希望该日志文件将停止获取充满 我已经设置了以下

LOGRETAIN = NO 
LOGARCHMETH1 = OFF 
LOGILESIZE=20000 
LOGPRIMARY=50 
LOGSECONDARY=200 

最多更改数据库配置今天早上(刚刚更改了LOGARCHMETH1 = OFF并且sp正在运行)我没有运气。现在我只是不想看到这个错误,我希望这个停止,以便我可以继续我的测试。我可以稍后处理这些性能问题。 能否让某种灵魂流露出一些光亮如何在强迫db2不使用除已经尝试过的日志之外的日志? DB2版本是8.2.4

+0

应该有你的更新问题。尝试部分更新(条件) – AngocA

+0

我想知道update语句是否有任何问题,因为它已经在ms sql server上运行了 这里是查询 UPDATE table_name SET col2 = @ nextColId WHERE col1 = @ col1 AND col3 = @ col3 AND col4 = @ col4; 在上面的语句之后有一个提交,在每个500 recs – user1063108

+0

之后提交的方式问题是为什么使用我所有的设置,事务日志仍在写入? – user1063108

回答

1

好的找到了答案,因为我不熟悉DB2语法,很明显我使用游标的方式导致了“无限循环”(?) 反正我把我的代码改为按照这个格式

FOR v AS cur1 CURSOR FOR 
      SELECT firstnme, midinit, lastname FROM employee 
DO 
    SET fullname = v.lastname || ',' || v.firstnme 
       ||' ' || v.midinit; 
    INSERT INTO tnames VALUES (fullname); 
END FOR; 

和所有工作完全.. :-)

希望这将有助于其他一些新手和我一样用DB2语法

+0

我不知道这是否会帮助任何人,因为这是插入“_几百万个记录_”的非常低效的方式。有人可能会考虑从游标使用LOAD,这实际上可以最大限度地减少日志记录。 – mustaccio