你可以缩小你的事务嘛!
例如你可以将你的“db2 insert into z select g。a,g。b from g,h”语句分成几次提交。(不知道你的h表是做什么用)
做法可以这样:
1.db2 insert into z select a.col1,a.col2 from (select row_number() over (order by g.a,g.b) as row_num,g.a as col1,g.b as col2 from g,h) as a where a.row_num between 1 and 1000;commit;
2.........................between 1001 and 2000;commit ;
...
当然你可以用一个循环来完成。

解决方案 »

  1.   

    DB2数据库在一般事务操作中,都要写日志,在Create Table 时指定no logged是针对大对象(LOB)可以允许不写日志。对于你的情况我有以下建议:1.不要一次插入,可以使用游标分批插入,分批提交。
    2.可否将表拆开,使用视图分割也可以。
    3.数据库设计是否得当?像上述情况关联,没有一点条件这也太夸张了吧
      

  2.   

    我在想你的数据库设计是不是有问题。
    既然z是g,h生成的,还要他作什么呢,倒是带来了一致性的问题,
    完全可以使用视图。
    你不要日志,带事务的数据库都需要记录日志呀,当然在数据表数据被更新时必须
    要记录他,
    你可以使用EXPORT在不使用日志记录使用IMPORT进去
    db2 insert into z select g.a,g.b from g,h
      

  3.   

    to db2_seeker(小顺):太谢谢你的帮助了,谢谢,谢谢!!!不过还有一点疑问,就是“row_number() over (order by g.a,g.b)”具体是什么意思?能解释一下吗?row_number()这个函数我在联机帮助的SQL  REFRENCE里没有找到啊,它在什么地方?还有我用的是db27。1ee中文版的,它该不会是7。2版中的函数吧?(我这样问是因为原来我一直在找一个函数或变量能返回当前记录的记录号,可是问了好多朋友都没有办法,得到的结果是让我将7。1升级到7。2,所以很奇怪)。你如果感兴趣的话,强烈希望你能看看这个帖子:http://www.csdn.net/expert/topic/834/834855.xml?temp=.458111to xl1(xl1):也谢谢你!原来我以为create table时指定了not logged就不写日志了,原来是大对象才不写日志,呵呵又学到了好东东。至于游标,我现在还不会用,只是知道,能指点指点吗???还有,上面的关联,我只是举个例子,只是用来测试我们现在的一个软件的,不好意思,没有说清楚!!!
    to tanghuan():我的数据库可能和一般的不太一样,数据库的原始数据是在一段时间内集中导入的,导入以后就不再修改了,平时使用就是通过前端的一个软件,对原始数据查询产生一些中间的数据,并保存下来,下次再在中间数据的基础上又查询,如此反复。所以不用担心一致性的问题。不过还是谢谢你的热心!!!
      

  4.   

    如果你一定要使用INSERT来追加数据,而不是LOAD 方式,
    你就没有办法避开事务日志,即使你问任何大型数据库都是一样的不过你使用的是DB2,你可以把日志设置为归档方式,再在一段时间
    截断日志,详细查看命令 PRUNE HISTORY。
      

  5.   

    靠,建表的时候用 not logged initially 选项不就完了。
      

  6.   

    : jinnee(Jinnee) not logged 指的是不记录表中BLOB,CLOB字段的变化情况,并不是对表的数据的变化都不记录。
      

  7.   

    1。create table时用:not logged initially 
    2。在insert之前用:active not logged initially
    3。然后insert就不记日志了。(在commit或断开数据库连接后,active自动失效,下次还需显示active)
      

  8.   

    row_number() 是一个olap函数,7.1支持的,在信息中心查一下!
      

  9.   

    我不清楚你的应用环境,但是在db2 for os390 中当发生insert或update一定会记log的,具体的步骤如下:
    1.当sql执行时会在log pool 中记载log记录其包含为该条记录修改前后的值,用于sql出错时roolback.
    2.当commit时或log pool的空间使用超过系统默认值时会将 log写入active log中此时的active log应在辅助存储器中如磁盘
    3.当active log 满时系统人员会做archive log,将active log备份到磁带中或其他存储器中,释放active log的空间.
    另外想请教有人做大型机吗????