Oracle-11g
ORA-01502: 索引或此類索引的分區處於可用狀態問題
我的 Oracle 數據庫中有一個表,其中
select pkcol, count(*) from myTable group by pkcol having count(*) > 1;
產量
PKCOL COUNT(*) ------- ---------- 1 2 2 2
試圖刪除重複的行
delete myTable where pkcol = 1;
產量:
ORA-01502: 索引 ‘MYTABLE.PK_MT’ 或此類索引的分區處於可用狀態。
我正在使用 Oracle.DataAccess.Client.OracleBulkCopy 來填充表格。
據我了解,必須檢查Oracle PRIMARY KEY 約束的文件。
顯然它們沒有被檢查,正如我通過連續兩次執行相同的批量複製發現的那樣,在所有行中都以重複結束。
現在我只在刪除所有行後才使用它,並且我正在使用具有類似主鍵的表作為源。結果,我預計沒有問題。
但是深深嵌入到我的 MS Build 腳本中,我最終在 2210 行中只有 2 個重複。
我想首先忽略主鍵是一個明顯的錯誤。不允許 Bulkcopy 忽略主鍵約束。
編輯:
同時我發現,在呼叫批量複製之前,通常由某些腳本插入的 2 個衝突行。問題歸結為我已知的問題,即大容量複製在這裡不檢查主鍵。
從您連結到的文件中:
在載入結束時重建索引時驗證 UNIQUE 約束。如果違反 UNIQUE 約束,則該索引將處於 Index Unusable 狀態。
他們以我的方式閱讀它,這同樣適用於
PRIMARY KEY
約束,儘管措辭有點模棱兩可。您可能不喜歡這種行為,但它不是“錯誤”,因為它的行為符合設計 - 並且還有其他方法可以結束這種“破壞”約束。有關更多資訊以及使用 pl/sql和
forall ... save exceptions
.