修改表字段类型导致保存时提示索引失效

12年前

表单字段原先设计为字符串类型4000个长度,但由于改用fckeditor后,内容为html,数据库字段长度不够,只能改用CLOB字段。

首先看看如何将 VARCHAR2(4000)转成CLOB类型:

基本需要以下几步就可以搞定:

第一步:将原来 VARCHAR2类型的字段 A 改名为 A1。

SQL语句:ALTER  TABLE   表名  RENAME  COLUMN  A TO  A1;

        第二步:增加一个临时列,该列类型为Long。

SQL语句:ALTER  TABLE  表名  ADD  A   LONG;

第三步:将改变后的列的值赋新增的列。

SQL语句:UPDATE  表名  SET  AA1 ;

第四步:将改变后的列类型更改为CLOB。

SQL语句:ALTER  TABLE  表名  MODIFY(A  CLOB);

第五步:将无用的列删除。

SQL语句:ALTER TABLE 表名  DROP COLUMN A1;

到此为至,就将VARCHAR2类型转成CLOB了。

我这样修改后,结果hibernate保存时,提示:index   "XXX.PK_CXXX"   or   partition   of   such   index   is   in   unusable   state 

意思是 索引失效。

用sql语句查询此索引的状态:

select index_name,index_type,tablespace_name,table_type,status from user_indexes 

会看到status列显示为:“UNUSABLE”

彻底解决办法:

首先:alter session set skip_unusable_indexes=false;     //设置不要跳过失效索引

然后:alter index 索引名称 rebuild;     //重建改索引

最后,在执行查询语句,可以看到状态为:valid 了,至此就OK了。

这样就可以正常保存了。