场景
上周开发过程中,将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;
Oracle数据库CLOB字段更新后索引失效及解决方法
在Oracle数据库中将表字段从varchar2改为clob后,出现索引失效问题,导致INSERT操作报错。通过查询发现两个用户索引IDX_PRIMARY_KEY和IDX_USER_NAME变为UNUSABLE,同时出现Oracle自动创建的索引'(SYS_IL0000013716C00001$$)。为解决此问题,需要重建失效的索引,例如使用`ALTER INDEX IDX_PRIMARY_KEY REBUILD`命令。
1601

被折叠的 条评论
为什么被折叠?



