修改表字段類型導致保存時提示索引失效
表單字段原先設計為字符串類型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了。
這樣就可以正常保存了。