由于昨天对一个千万级别的分区表做了分区数据交换的操作,因为本表操作太慢,所以将其移出普通表操作后才移回分区表,但是今天又反馈该表的某字段为条件查询速度很慢,自己试了下果真如此,我看了查询语句的执行计划发现根本没用上索引(该字段是一个本地索引),因此就想用hint强制使用该索引,结果报错了ora-01502.
本地索引失效了?我很纳闷,什么原因导致的呢,难不成是我昨晚的操作导致的?因此网上一查,看到该博文http://diegoball.iteye.com/blog/575786,终于明白了,因为操作时该表具有主键,因此没法加上INCLUDING INDEXES这个子句,尽管后来因为主键被别的表引用必须disable才能交换数据,但是也没有加上该子句,因此就导致我操作的这个分区的所有本地索引都失效了。
查看本地索引状态:
SELECT index_name, partition_name, status
FROM user_ind_partitions
WHERE index_name = '&index_name';
发现失效当然就得赶紧重建下失效的索引
alter index index_name rebuild partition partition_name ONLINE;