oracle数据库改字段数据类型造成索引失效的bug

问题说明:

oracle的varchar2最大长度为4000,由于某个字段长度超过4000,所以就将其数据类型改成了CLOB,结果报错:

java.sql.SQLException: ORA-01502: 索引 'DEV.SYS_C0019380' 或这类索引的分区处于不可用状态

问题解决:

查看索引状态:

当时有条索引的状态不是valid

select index_name,status from USER_INDEXES WHERE TABLE_NAME = 'T_CREDIT_FAHAI_PERSON_CPWS';

重建索引,索引状态变成valid可用状态,问题解决

ALTER INDEX SYS_C0019389 REBUILD;
问题重现:

当时改索引的过程是a(varchar)--->a(long)--->a(clob),新建字段c,保存a中数据,删除a中所有数据,修改a字段数据类型,a(varchar)先改成a(long),再改成a(clob),然后把数据从c中复制到a

此时出现了一个现象,索引数量增加了一条,然后索引状态不可用了

原因解释:

主键索引是normal类索引,每条clob字段是lob类型索引,新增一个clob字段都会多加一条索引,而修改字段类型成clob会破坏原来索引,需要重建索引

posted @   yorkiiz  阅读(205)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示