不知道大家有没有遇到这种坑,就是把一张表的额字段改了,然后整个查询变得特别慢,引起业务问题。然后去查找原因,竟然是修改了表中的字段引起的。

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;

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

 

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

 

 

查看索引状态:

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

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

 

 现在进行修改,把long 类型修改成其他类型clob(其它类型需要这一列为空值)

 alter table t modify OBJECT_NAME clob;

查看索引状态:

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

 

 整个表索引变得不可用,如果是生产上使用比较频繁的表,索引不可用,很容易出现问题,导致业务HANG住(如果表进行move索引也会失效)。

解决方案:

索引进行重建,或者删除后重新建索引。

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

 

 alter index idx_object_id rebuild;

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

除此之外,long类型不能直接转换成varchar2!

相关文章:

  • 2021-10-08
  • 2022-12-23
  • 2021-10-25
  • 2021-08-12
  • 2022-12-23
  • 2022-01-22
  • 2022-12-23
猜你喜欢
  • 2021-11-30
  • 2022-12-23
  • 2022-12-23
  • 2021-08-27
  • 2021-07-05
  • 2021-09-26
相关资源
相似解决方案