2012-07-04 50 views

回答

6
create or replace procedure rebuild_indexes(
    p_owner in varchar2, 
    p_table_name in varchar2 
) as 
begin 
    for indexes_to_rebuild in 
    (
     select index_name 
     from all_indexes 
     where owner = p_owner 
      and table_name = p_table_name 
    ) loop 
     execute immediate 'alter index '||p_owner||'.' 
      ||indexes_to_rebuild.index_name||' rebuild'; 
    end loop; 
end; 
/

雖然這隻適用於最簡單的索引。關於重建有很多restrictions。例如,如果索引是分區的,則需要重建每個分區或子分區。

並且您可能需要考慮許多選項。例如,使用ONLINE如果你希望別人在重建使用索引,增加一個PARALLEL選擇重建速度更快(但是這也改變了指數的並行設置,這可能會導致問題)等

而且牢記許多頂尖的Oracle專家認爲重建索引通常是浪費時間。

+0

p_owner是什麼? – Mercer

+0

@Mercer:它特定索引架構,以防您想要爲多個用戶使用此過程。 –