2012-05-02 1 views
2

Я новичок в СУБД Oracle, и у меня есть задача изменить табличное пространство индекса в Oracle, например. от MYDB_DATA_SPACE до MYDB_INDX_SPACE.Как изменить табличное пространство изменения индекса в Oracle 9i?

Я попытался искать на Google для возможных решений и нашел такой SQL:

ALTER INDEX idx_city_state 
REBUILD TABLESPACE sales_us; 

Могу ли я, пожалуйста, проверьте, если это служит целям?

ответ

5

Да, это перестроит индекс idx_city_state в табличном пространстве sales_us. Вы можете написать немного динамический SQL, чтобы восстановить все индексы

DECLARE 
    l_sql_stmt VARCHAR2(1000); 
BEGIN 
    FOR i IN (SELECT owner, 
        index_name 
       FROM all_indexes 
      WHERE tablespace_name = 'MYDB_DATA_SPACE') 
    LOOP 
    l_sql_stmt := 'ALTER INDEX ' || i.owner || '.' || i.index_name || 
        ' REBUILD TABLESPACE MYDB_INDX_SPACE'; 
    EXECUTE IMMEDIATE l_sql_stmt; 
    END LOOP; 
END; 
+0

Просто другой вопрос, потому что я не имею никакого опыта в изменении индекса табличных пространств, просто интересно, как долго это может занять для индекса, занимающего 2-3 Гбайта в табличное пространство для завершения выполнения? –

+0

@ChinBoon - Он должен полностью построить индекс. Он должен сканировать таблицу, построить индекс и т. Д. Это, вероятно, займет примерно столько времени, сколько потребуется, чтобы создать индекс в первую очередь на вашем оборудовании - вероятно, по крайней мере несколько минут. –