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会破坏原来索引,需要重建索引
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通