避免长事务报错,怎么办?高手指教
IBM Informix Dynamic Server Version 10.00.FC6 -- On-Line -- Up我有一张1000w的表,其中的重复记录大约有300w,我想去重复,但总是报:Long transaction detected.
除了增加逻辑日志外(没有多余的空间),请问有没有其他的办法?
回复 #1 jinhua!@# 的帖子
导出来~~用awk处理~~再导入..回复 #2 liaosnet 的帖子
我试一下,能实现,不过效率估计不会太好! 先谢过了!回复 #2 liaosnet 的帖子
我查了一下,awk 只能读最大10kb 的文件,这个办法可能行不通! 新建一个表,结构和这个表相同,然后把重复数据导入新表,然后根据新表删除旧表内的重复数据,因为重复数据有300w,所以日志不够用。你可以把新表的数据分类,一部分一部分的删除重复数据,删除一部分,提交一次,这样多次之后,就完成了。 原帖由 jinhua!@# 于 2008-12-17 11:06 发表 http://bbs.chinaunix.net/images/common/back.gif我查了一下,awk 只能读最大10kb 的文件,这个办法可能行不通!
谁说的只能读10K~???:em14: :em14:
实际上也可以用select 把唯一值都取出来~~然后删除表,再导入~ 建同结构的新表-》将源表中的唯一记录插入新表-》rename或drop源表-》rename新表为源表 你可以创建一个 列结构相同的一个表,然后主键创建为你认为可以区分唯一的几个列
然后用ec游标插入,当遇到主键重复的时候就跳过本次循环。
回复 #8 wuicpp 的帖子
主键要用八个字段,以上去重的办法都是在原有逻辑日志不变的情况下执行,现有的逻辑日志无法满足。ec游标的用法有吗? 多谢! 原帖由 jinhua!@# 于 2008-12-17 10:12 发表 http://bbs.chinaunix.net/images/common/back.gifIBM Informix Dynamic Server Version 10.00.FC6 -- On-Line -- Up
我有一张1000w的表,其中的重复记录大约有300w,我想去重复,但总是报:Long transaction detected.
除了增加逻辑日志外(没有 ...
我觉得最简单的办法莫过于建立一个表,其结构一样,按照你所谓的重复条件建立主键。
然后写一个非常简单的存储过程,从源表读取一条记录后,插入该表,(可以每N条记录提交一次,视你实际情况设定。1000条一次就很不错)
忽略所有主键重复错误,结果就是你要的。再把源表drop掉
rename目标表为源表。
页:
[1]
2