ALTER INDEX idx1 REBUILD PARALLEL (DEGREE 16) NOLOGGING;
ALTER INDEX idx2 REBUILD PARALLEL (DEGREE 16) NOLOGGING;
ALTER INDEX idx3 REBUILD PARALLEL (DEGREE 16) NOLOGGING;
BEGIN
FOR rec_part IN (SELECT index_name,partition_name
FROM all_ind_partitions
WHERE status = 'UNUSABLE'
AND index_name IN ('IDX1','IDX2','IDX3'))
LOOP
EXECUTE IMMEDIATE 'ALTER INDEX "'||rec_part.index_name||'" REBUILD PARTITION "'||rec_part.partition_name||'" PARALLEL (DEGREE 16) NOLOGGING';
END LOOP;
END;
1条答案
按热度按时间wgx48brx1#
当您分割、合并、删除或截断分区时,所有 global(非本地)索引立即无效(索引段实际上被删除,因为它包含无效的ROWID),然后必须重建:
本地索引永远不会作为一个整体失效,但在分区拆分或合并期间,受影响的索引分区将无效,而其他分区仍然有效。如果是这样的话,除非你的查询修剪到一个特定的分区,在那里它需要的索引仍然有效,否则一个无效的索引分区将使整个事情无法被查询使用。使用以下命令标识无效索引分区:
重建:
等等.
如果你有很多分区要做,那么一个简单的PL/SQL循环和
EXECUTE IMMEDIATE
可以快速重建它们: