免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2205 | 回复: 3
打印 上一主题 下一主题

日志满的问题,高手急回,先谢了! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-04-08 11:31 |只看该作者 |倒序浏览
我在我的程序中需要使用下面的代码
    insert into a select * from b where ......
  每次插入到a表的记录有600多万条,每次执行该语句DB2都会返回SQLCODE值为-964的错误码,我用db2 ? sql0964命令查看错误原因,DB2的解释为SQL0964C The transaction log for the database is full. 然后我按照DB2的说明把日志文件的大小和日志文件的数量都扩充了,如下命令
db2 update db cfg for MY_DATABASE using LOGFILSIZ 7900
db2 update db cfg for MY_DATABASE using LOGPRIMARY 30
db2 update db cfg for MY_DATABASE using LOGSECOND 20
补充一下我用的是循环日志

我把总的日志文件扩大到了1.5G左右,然后执行下面的命令
db2 "force application all"
db2stop
db2start
db2 connect to MY_DATABASE user db2inst1 uing db2inst1

最后从新调用包含insert into ... select ...语句的存储过程,此次程序执行完毕,但效率太慢。

后来我想是否能使对某表进行的DML操作不进行日志操作,我就把a表和b表都删除了,从新建表,建表时我选择了not logged initially子句,建完表后我把数据从新导入到b表中,最后执行包含insert into ... select ...语句的SQL存储过程,DB2仍旧返回SQLCODE的值为-964的错误码。

请问有没有一个高效的方法(最好能让DB2执行此类方法时不进行日志操作)解决这个问题呢?

论坛徽章:
0
2 [报告]
发表于 2003-04-08 13:09 |只看该作者

日志满的问题,高手急回,先谢了!

如果你要用insert into a select * from b where ......  不行,
你可以用export 将数据导出,用load将数据导入,不使用日志,效率也会高。

论坛徽章:
0
3 [报告]
发表于 2003-04-08 14:31 |只看该作者

日志满的问题,高手急回,先谢了!

不会吧!建表时的not logged initially选项是什么意思呢?

论坛徽章:
0
4 [报告]
发表于 2003-04-09 17:52 |只看该作者

日志满的问题,高手急回,先谢了!

要想不计日志,建表时用not logged initially用还不够,
在使用这张表时必须用带 ACTIVATE NOT LOGGED INITIALLY 的
alter talbe 语句,且必须在通一个unit of work里,即中间不能有commit或rollback。具体用法请参考sql reference。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP