ITPub博客

首页 > 数据库 > 数据库开发技术 > 曾经遇到的一次数据不一致的问题

曾经遇到的一次数据不一致的问题

原创 数据库开发技术 作者:empo007 时间:2007-11-29 17:29:45 0 删除 编辑
前段时间遇到过一个奇怪的问题,在PUB上曾提过这个问题,经ORACLE服务中心诊断后,被证实是索引的问题:[@more@]

问题描述:

将数据库A的表导入到库B中,出现下面的错误:
IMP-00017: following statement failed with ORACLE error 1452:
"CREATE UNIQUE INDEX "PRIMARY_ULD" ON "UINV_ULD_INVENTORY" ("UINV_ULD_TYPE" "
", "UINV_ULD_SERIAL" , "UINV_ULD_OWNER" ) PCTFREE 10 INITRANS 24 MAXTRANS 2"
"55 STORAGE(INITIAL 131072 FREELISTS 24 FREELIST GROUPS 1 BUFFER_POOL DEFAUL"
"T) TABLESPACE "DATA" LOGGING"
IMP-00003: ORACLE error 1452 encountered
ORA-01452: cannot CREATE UNIQUE INDEX; duplicate keys found

说是唯一索引不能建,有重复键值

在A库上执行查询如下:
select UINV_ULD_TYPE||' '||UINV_ULD_SERIAL||' '||UINV_ULD_OWNER,count(*) from UINV_ULD_INVENTORY
group by UINV_ULD_TYPE||' '||UINV_ULD_SERIAL||' '||UINV_ULD_OWNER having count(*)>1

没有返回值

在B库上执行同样的查询,有返回值
PMC 07445 KL 2

于是在A库上执行查询:
select * from UINV_ULD_INVENTORY where UINV_ULD_TYPE||' '||UINV_ULD_SERIAL||' '||UINV_ULD_OWNER='PMC 07445 KL'

出来的值有两条:
30000116066377 PMC 07445 KL 0
30000116316113 PMC 07445 KL 0

同样在B库上执行同样的查询,返回值也是这两条

为什么?

实际上A库上执行下面语句的时候走了那个B库上没有建成而A库上已经有的索引,而A库的该索引是有问题的:
select UINV_ULD_TYPE||' '||UINV_ULD_SERIAL||' '||UINV_ULD_OWNER,count(*) from UINV_ULD_INVENTORY
group by UINV_ULD_TYPE||' '||UINV_ULD_SERIAL||' '||UINV_ULD_OWNER having count(*)>1;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/85922/viewspace-987001/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    126
  • 访问量
    1077736