Oracle-11g

ORA-01502: 索引或此類索引的分區處於可用狀態問題

  • June 18, 2021

我的 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/sqlforall ... save exceptions.

引用自:https://dba.stackexchange.com/questions/3754