曾經遇到的一次資料不一致的問題

empo007發表於2007-11-29
前段時間遇到過一個奇怪的問題,在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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章