场景
上周开发过程中,将Oracle数据库中某个表字段从varchar2改为clob后(修改前也将该字段的值清空了),但是在往该表insert数据时报错:
ORA-01502: 索引或这类索引的分区处于不可用状态
分析
查看索引状态
-- 查看这张表的索引状态
select index_name, status from user_indexes where table_name='xxx';
-- 查询结果:有三个索引,其中有两个都失效了。
INDEX_NAME STATUS
------------------------- --------
SYS_IL0000013716C00001$$ VALID
IDX_PRIMARY_KEY UNUSABLE
IDX_USER_NAME UNUSABLE
如上得知这张表中的两个索引IDX_PRIMARY_KEY
和 IDX_USER_NAME
都失效了——UNUSABLE
;
并且多了一个奇怪的索引‘SYS_IL0000013716C00001$$’ ,这个索引是Oracle自动建的——Oracle会为clob类型的字段自动添加索引。
oracle索引的状态:
VALID:当前索引有效
N/A :分区索引 有效
UNUSABLE:索引失效
解决
将索引重建即可
# alter index [index_name] rebuild;
alter index IDX_PRIMARY_KEY rebuild;