免费注册 查看新帖 |

Chinaunix

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

避免长事务报错,怎么办?高手指教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-17 10:12 |只看该作者 |倒序浏览
IBM Informix Dynamic Server Version 10.00.FC6     -- On-Line -- Up

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

论坛徽章:
11
金牛座
日期:2015-03-19 16:56:22数据库技术版块每日发帖之星
日期:2016-08-02 06:20:00数据库技术版块每日发帖之星
日期:2016-04-24 06:20:00数据库技术版块每日发帖之星
日期:2016-04-13 06:20:00IT运维版块每日发帖之星
日期:2016-04-13 06:20:00数据库技术版块每日发帖之星
日期:2016-02-03 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00季节之章:春
日期:2015-03-27 15:54:57羊年新春福章
日期:2015-03-27 15:54:37戌狗
日期:2015-03-19 16:56:41数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
2 [报告]
发表于 2008-12-17 10:22 |只看该作者

回复 #1 jinhua!@# 的帖子

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

论坛徽章:
0
3 [报告]
发表于 2008-12-17 10:59 |只看该作者

回复 #2 liaosnet 的帖子

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

论坛徽章:
0
4 [报告]
发表于 2008-12-17 11:06 |只看该作者

回复 #2 liaosnet 的帖子

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

论坛徽章:
0
5 [报告]
发表于 2008-12-17 11:57 |只看该作者
新建一个表,结构和这个表相同,然后把重复数据导入新表,然后根据新表删除旧表内的重复数据,因为重复数据有300w,所以日志不够用。你可以把新表的数据分类,一部分一部分的删除重复数据,删除一部分,提交一次,这样多次之后,就完成了。

论坛徽章:
11
金牛座
日期:2015-03-19 16:56:22数据库技术版块每日发帖之星
日期:2016-08-02 06:20:00数据库技术版块每日发帖之星
日期:2016-04-24 06:20:00数据库技术版块每日发帖之星
日期:2016-04-13 06:20:00IT运维版块每日发帖之星
日期:2016-04-13 06:20:00数据库技术版块每日发帖之星
日期:2016-02-03 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00季节之章:春
日期:2015-03-27 15:54:57羊年新春福章
日期:2015-03-27 15:54:37戌狗
日期:2015-03-19 16:56:41数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
6 [报告]
发表于 2008-12-17 12:42 |只看该作者
原帖由 jinhua!@# 于 2008-12-17 11:06 发表
我查了一下,awk 只能读最大10kb 的文件,这个办法可能行不通!


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

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

论坛徽章:
0
7 [报告]
发表于 2008-12-17 17:14 |只看该作者
建同结构的新表-》将源表中的唯一记录插入新表-》rename或drop源表-》rename新表为源表

论坛徽章:
0
8 [报告]
发表于 2008-12-17 17:20 |只看该作者
你可以创建一个 列结构相同的一个表,然后主键创建为你认为可以区分唯一的几个列
然后用ec游标插入,当遇到主键重复的时候就跳过本次循环。

论坛徽章:
0
9 [报告]
发表于 2008-12-17 18:20 |只看该作者

回复 #8 wuicpp 的帖子

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

论坛徽章:
0
10 [报告]
发表于 2008-12-17 18:50 |只看该作者
原帖由 jinhua!@# 于 2008-12-17 10:12 发表
IBM Informix Dynamic Server Version 10.00.FC6     -- On-Line -- Up

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


我觉得最简单的办法莫过于建立一个表,其结构一样,按照你所谓的重复条件建立主键。
然后写一个非常简单的存储过程,从源表读取一条记录后,插入该表,(可以每N条记录提交一次,视你实际情况设定。1000条一次就很不错)
忽略所有主键重复错误,结果就是你要的。再把源表drop掉
rename目标表为源表。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP