пятница, 4 июля 2014 г.

Oracle перенос таблиц в другое табличное пространство

begin
  for tbl in (select t.table_name
                from all_tables t
               where t.owner = :usr
                 and t.tablespace_name = :oldtbs)
  loop
    dbms_output.put_line('ALTER TABLE ' || :usr || '.' || tbl.table_name ||
                         ' MOVE TABLESPACE ' || :newtbs || ';');
    -- индексы
    for indx in (select i.owner || '.' || i.index_name as nm
                   from all_indexes i
                  where i.tablespace_name = :oldtbs
                    and i.table_owner = :usr
                    and i.table_name = tbl.table_name)
    loop
      dbms_output.put_line('ALTER INDEX ' || indx.nm ||
                           ' REBUILD TABLESPACE ' || :newtbs || ';');
    end loop;
  end loop;
end;


где переменные означают следующее:
  • :oldtbs - старое табличное пространство
  • :usr - пользователь чьи таблицы вы собираетесь переносить
  • :newtbs - новое табличное пространство
Данный скрипт генерирует скрипты на перенос всех таблиц и индексов указанного пользователя из oldtbs в newtbs
P.S. никогда не создавайте пользователя в табличном пространстве SYSTEM.