OracleDBでINSERT/DELETEエラーのテスト

DBエラーが発生した時のアプリの振る舞いをテストするときにDB側に細工して意図的にエラーを発生させることをやりますが、その一つの方法です。
単体テストの度に毎回調べてて、毎回見つからなくて困るのでメモ。
INSERT/DELETE限定ですが、INDEXをUNUSABLEにしてテストしてます。UPDATEの場合はこの方法だとできないので、個別対処してます。

事前準備

SQL>alter table tbl1 move;
表が変更されました。

SQL> select index_name,status from user_indexes where index_name = 'IDX1';

STATUSがUNUSABLEになっていることを確認。

エラー確認

SQL>DELETE FROM tbl1 where col1=1;
ORA-01502: 索引'XXX.IDX1'またはそのパーティションが使用不可の状態です。

DELETEでエラーが発生することを確認。

事後のお片付け

SQL>alter index idx1 rebuild;
索引が変更されました。

SQL> select index_name,status from user_indexes where index_name = 'IDX1';

STATUSがVALIDになっていることを確認。