ORACLE LONG字段類型的修成CLOB(表中索引失效)


不知道大家有沒有遇到這種坑,就是把一張表的額字段改了,然后整個查詢變得特別慢,引起業務問題。然后去查找原因,竟然是修改了表中的字段引起的。

drop table t purge;
create table t (object_id number,object_name long);
create index idx_object_id on t(object_id);
insert into t select trunc(DBMS_RANDOM.VALUE(0,100000),0),dbms_random.string('a',30) from dual connect by rownum <= 100000;
commit;

select count(*) from t;

select * from t where rownum <5;

 

 

 

查看索引狀態:

select t.status,t.index_name from user_indexes t where index_name='IDX_OBJECT_ID';

 

 現在進行修改,把long 類型修改成其他類型clob(其它類型需要這一列為空值)

 alter table t modify OBJECT_NAME clob;

查看索引狀態:

 

 整個表索引變得不可用,如果是生產上使用比較頻繁的表,索引不可用,很容易出現問題,導致業務HANG住(如果表進行move索引也會失效)。

解決方案:

索引進行重建,或者刪除后重新建索引。

 

 alter index idx_object_id rebuild;

select t.status,t.index_name from user_indexes t where index_name='IDX_OBJECT_ID';

除此之外,long類型不能直接轉換成varchar2!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM