暂无图片
id重复无法添加主键
我来答
分享
豆宇斯
2020-06-04
id重复无法添加主键

数据迁移的时候,用imp导入的同时目标库也在写入数据,导致出现了重复id,不能添加主键,同时由于存在多次导入,有部分数据包括id列完全一致

我来答
添加附件
收藏
分享
问题补充
11条回答
默认
最新
豆宇斯

id重复的数据有100多万条,总数据4千万左右,有什么办法能使完全一致的数据只保留一条,只有id相同的数据改成不同id么

暂无图片 评论
暂无图片 有用 0
打赏 0
文成

id如果是序列的话 就先将目标库的序列调大

暂无图片 评论
暂无图片 有用 0
打赏 0
文成

那就改成逻辑sql导入 提前做好规划

暂无图片 评论
暂无图片 有用 0
打赏 0
豆宇斯

现在是导入已经完成了,需要修改目标库数据使得可以添加主键

暂无图片 评论
暂无图片 有用 0
打赏 0
盖国强

如果要保证一致性:
停止业务,删除表数据,再导入数据,恢复业务。

如果不在乎存在重复数据:
删除约束,导入数据。手工校验。

暂无图片 评论
暂无图片 有用 0
打赏 0
豆宇斯

现在的情况是不能停业务,数据也已经导入完成,但是目标库没有建立约束,出现了重复数据,要把完全重复的数据只保留一条,只有id一样的修改成不同id

暂无图片 评论
暂无图片 有用 0
打赏 0
文成
select * from (
select id,row_number()over(partition by id order by null) rn from tab)
where rn>1
复制

筛选出重复数据到临时表,编辑好了 再插入回来

暂无图片 评论
暂无图片 有用 0
打赏 0
田弼元

这个要看是不是允许重复。如果允许的话,删除约束,插入数据,然后在创建约束,创建时选择不校验已有数据。
如果不允许重复,就先停掉业务,然后进行去重。

暂无图片 评论
暂无图片 有用 0
打赏 0
豆宇斯

有的字段含有空值,row number over的方法好像判断不出来

暂无图片 评论
暂无图片 有用 0
打赏 0
文成

主键 id有空值?

暂无图片 评论
暂无图片 有用 0
打赏 0
豆宇斯

已经可以了,使用row number找到重复数据的rowid,直接update修改后可以加主键了,感谢感谢

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
Oracle 统计各个表记录数的查询语句,非存储过程触发器的语句怎么写?
回答 4
下面这个sql需要在12c及以上版本执行,如果低于12c, 需要先创建函数, 再执行最后的select即可:
oracle 分区表 分区索引
回答 4
你的第二个查询结果展示不对,第二个查询中的locality就是针对分区表查询索引是否是local还是global的。
备份控制文件 for standby 报错ORA-15122: ASM 文件名 ‘+DATAO1_MF_1_HW6DTWQ8_.LOG’ 包含无效的文件编号
回答 1
请提供。(1)数据库版本。(2)具体执行命令。
数据库发生600错误,实例重启了;RAC;11.2.0.4; 这个是啥原因呢?
回答 1
没遇到过你的这个问题。Mos没有有匹配你这个ORA600kslwtfxup:1的相关说明,kslwt解释:kernelservice(VOS)latchingandpostwaitwaitinterf
Oracle 12.2 rac grid打补丁报错
回答 1
这是权限问题,你这是节点一还是节点二上发生的
Oracle能查询到使用数据泵的历史记录吗?
回答 2
已采纳
能查rman的。dmp的查不了。
安装oracle执行sqlplus报错:error while loading shared libraries
回答 2
lddlibraries.so应该是没有。找到那个建立个连接,或者其他地方找一个放过来。
想把Oracle 11.2.0.1的重要几个文件冷备到11.2.0.4上,参数文件的那个版本怎么写?
回答 3
是哪几个重要文件呢?oracle软件还是数据库表空间?
Linux + Oracle(11g及以上) 内存使用
回答 4
已采纳
1、sga使用的就是shm,用ipcsm可以看到共享内存段的申请情况2、当你开始si/so的时候,说明内存已经不够用了,此时的系统响应巨慢,个人认为swap可以禁用,虽然我也听oracle的建议开了s
windows server2012R2(数据中心版)安装oracle19c 提示 ins-35180(无法检查可用内存) 请问有解决办法吗?
回答 1
是否用的administrator用户进行安装?