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になっていることを確認。