分区表数据太多导致创建索引时报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的语法结构