Rebuild index in Oracle Database

Пересобираем индексы после массового удаления данных.

  • Сначала нужно проверить ведётся и у вас сбор статистики оптимизатора автоматически. Если нет, то запустить её в ручную.
  • Проверяем есть ли возможность пересобрать индексы online

alter index "MY_SCHEMA"."MY_INDEX" rebuild online
*
ERROR at line 1:
ORA-00439: feature not enabled: Online Index Build

Эта ошибка говорит, что у вас нет такой возможности.

  • Можно проверить какая у вас версия oracle database.

COL PRODUCT FORMAT A35
COL VERSION FORMAT A15
COL STATUS FORMAT A15
SELECT * FROM PRODUCT_COMPONENT_VERSION;

Если у вас нет «oracle database enterprise edition», то значит у вас «oracle database standart edition» и опция online не доступна.

  • Можно так же сразу пересобрать все индексы в несколько таблицах (‘MY_TABLE_ONE’,’MY_TABLE_TWO’)

set serveroutput on;
declare
type table_varchar is table of varchar2(50);
var_table_varchar table_varchar;
begin
var_table_varchar := table_varchar('MY_TABLE_ONE','MY_TABLE_TWO');
for elem in 1 .. var_table_varchar.count loop
dbms_output.put_line('TABLE '||elem||'.'||var_table_varchar(elem)||' ');
FOR cur IN (select INDEX_NAME, OWNER from dba_indexes where table_name=var_table_varchar(elem) and index_type='NORMAL')
LOOP
dbms_output.put_line('ALTER INDEX "'||cur.INDEX_NAME||'" REBUILD');
EXECUTE IMMEDIATE 'ALTER INDEX "'||cur.OWNER||'"."'||cur.INDEX_NAME||'" REBUILD';
END LOOP;
end loop;
end;
/

Если у вас очень большая таблица, то можно отключить на время логирование и распараллелить процесс.

alter index my_idx rebuild parallel 63 nologging;
alter index my_idx noparallel;
alter index my_idx logging;

Оставьте комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *