修改表字段類型導致保存時提示索引失效

傲世狂少 12年前發布 | 1K 次閱讀 互聯網思維

表單字段原先設計為字符串類型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了。

這樣就可以正常保存了。

 本文由用戶 傲世狂少 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!