修改表字段类型导致保存时提示索引失效
表单字段原先设计为字符串类型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 A= A1 ;
第四步:将改变后的列类型更改为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了。
这样就可以正常保存了。