分区表数据太多导致创建索引时报UNDO表空间不足问题

某分区表很大,存储了三年以上的数据,数据存储量超3T,需要创建本地分区索引(create index ... local),但创建时报UNDO表空间不足问题,导致创建失败。

解决办法主要有两个:

1.扩张UNDO表空间

2.采用延迟创建索引的办法,先创建上索引,然后使用alter index rebuild方式逐天重建索引。

实际环境中没有足够存储空间用来扩UNDO表空间,只能采取延迟创建索引的方法,具体操作步骤是:

1、使用unusable关键字先创建索引,参考语句如下:

create unique index index_name on table_name (column_name) LOCAL unusable;

2、使用alter index重建分区索引,可避免报Undo表空间不足的问题。参考语句如下:

alter index index_name rebuild subpartition subpartition_name;

逐天重建索引的语句参考如下:

declare

  vsql varchar2(2000);

begin

  for p in (select p.index_owner, index_name, p.subpartition_name

              from dba_ind_subpartitions p

             where p.index_name = index_name

               and p.index_owner = owner_name

               and status = 'UNUSABLE'

             order by p.subpartition_name desc) loop

    vsql := 'alter index ' || p.index_owner || '.' || p.index_name ||

            ' rebuild subpartition ' || p.subpartition_name || ' online';

    execute immediate vsql;

  end loop;

end;

附:create index的语法结构

分区表数据太多导致创建索引时报UNDO表空间不足问题