jinhua!@# 发表于 2008-12-17 10:12

避免长事务报错,怎么办?高手指教

IBM Informix Dynamic Server Version 10.00.FC6   -- On-Line -- Up

       我有一张1000w的表,其中的重复记录大约有300w,我想去重复,但总是报:Long transaction detected.
除了增加逻辑日志外(没有多余的空间),请问有没有其他的办法?

liaosnet 发表于 2008-12-17 10:22

回复 #1 jinhua!@# 的帖子

导出来~~用awk处理~~再导入..

jinhua!@# 发表于 2008-12-17 10:59

回复 #2 liaosnet 的帖子

我试一下,能实现,不过效率估计不会太好! 先谢过了!

jinhua!@# 发表于 2008-12-17 11:06

回复 #2 liaosnet 的帖子

我查了一下,awk 只能读最大10kb 的文件,这个办法可能行不通!

xxyyy 发表于 2008-12-17 11:57

新建一个表,结构和这个表相同,然后把重复数据导入新表,然后根据新表删除旧表内的重复数据,因为重复数据有300w,所以日志不够用。你可以把新表的数据分类,一部分一部分的删除重复数据,删除一部分,提交一次,这样多次之后,就完成了。

liaosnet 发表于 2008-12-17 12:42

原帖由 jinhua!@# 于 2008-12-17 11:06 发表 http://bbs.chinaunix.net/images/common/back.gif
我查了一下,awk 只能读最大10kb 的文件,这个办法可能行不通!

谁说的只能读10K~???:em14: :em14:

实际上也可以用select 把唯一值都取出来~~然后删除表,再导入~

zhan_yl 发表于 2008-12-17 17:14

建同结构的新表-》将源表中的唯一记录插入新表-》rename或drop源表-》rename新表为源表

wuicpp 发表于 2008-12-17 17:20

你可以创建一个 列结构相同的一个表,然后主键创建为你认为可以区分唯一的几个列
然后用ec游标插入,当遇到主键重复的时候就跳过本次循环。

jinhua!@# 发表于 2008-12-17 18:20

回复 #8 wuicpp 的帖子

主键要用八个字段,以上去重的办法都是在原有逻辑日志不变的情况下执行,现有的逻辑日志无法满足。ec游标的用法有吗? 多谢!

ivhb 发表于 2008-12-17 18:50

原帖由 jinhua!@# 于 2008-12-17 10:12 发表 http://bbs.chinaunix.net/images/common/back.gif
IBM Informix Dynamic Server Version 10.00.FC6   -- On-Line -- Up

       我有一张1000w的表,其中的重复记录大约有300w,我想去重复,但总是报:Long transaction detected.
除了增加逻辑日志外(没有 ...

我觉得最简单的办法莫过于建立一个表,其结构一样,按照你所谓的重复条件建立主键。
然后写一个非常简单的存储过程,从源表读取一条记录后,插入该表,(可以每N条记录提交一次,视你实际情况设定。1000条一次就很不错)
忽略所有主键重复错误,结果就是你要的。再把源表drop掉
rename目标表为源表。
页: [1] 2
查看完整版本: 避免长事务报错,怎么办?高手指教