ORA-01502: 索引'string.string'またはそのパーティションが使用不可の状態です。

あるメンバが、「間違ってSQL*Loaderで同じデータを2回入れちゃってPKが壊れちゃった!」とすがりついてきたので調べてみた。

DELETE FROM <TABLE_NAME> WHERE PK_COLUMN1 = 'XX'; 
ORA-01502: 索引'TABLE_PK'またはそのパーティションが使用不可の状態です。

早速調べてみると、以下の参考ページに行き着いた。
[Oracle] 再作成したテーブルにアクセスするとORA-01502エラーが発生する。|Archive Redo Blog

確かに対象のインデックスはUNUSABLEになっているが、既にPK重複のデータが入ってしまっているのでインデックス再構築は失敗する。
従って、PK削除、問題データ削除、PK追加で復旧させた。

ALTER TABLE <TABLE_NAME> DROP CONSTRAINT <TABLE_PK>;
DELETE FROM <TABLE_NAME> WHERE PK_COLUMN1 = 'XX';
ALTER TABLE <TABLE_NAME> ADD CONSTRAINT <TABLE_PK> PRIMARY KEY (<PK_COLUMN1>, <PK_COLUMN2>);