среда, 3 июня 2009 г.

ORACLE: Перемещение таблиц и индексов пользователя в другой tablespace

собственно ответ на вопросы:
How to move LOB data to another tablespace?
How to move user tables to a different tablespace?
How to move user indexes to a different tablespace?

скрипт пока не умеет перемещать индекс-таблицы и секционированные таблицы.

  1. DECLARE
  2.   table_ts_name  VARCHAR2 (30) := 'USER_DATA'; –- табличное пространство для перемещения таблиц
  3.   index_ts_name  VARCHAR2 (30) := 'USER_INDEX'; –- табличное пространство для перемещения индексов
  4.   varUser VARCHAR2(30) := 'HR'; – схема объекты которой необходимо переместить
  5. BEGIN
  6.   FOR obj
  7.   IN ( -- перемещение таблиц содержащих поля LOB типов
  8.     SELECT 'alter table '||owner||'.'|| table_name||' move lob('|| column_name 
  9.         ||') store as (tablespace '|| table_ts_name move_sql
  10.      FROM  dba_tab_cols
  11.     WHERE  owner=varUser and data_type='%LOB'
  12.     UNION ALL
  13.     -- перемещение остальных таблиц   
  14.     SELECT 'alter table '||t1.owner|| '.'||t1.object_name||' move tablespace '||table_ts_name move_sql
  15.      FROM all_objects t1
  16.     WHERE t1.owner=varUser
  17.        AND t1.object_type = 'TABLE'
  18.        AND t1.temporary = 'N'
  19.        AND NOT EXISTS (
  20.                 SELECT 1 from dba_tab_cols t2
  21.                 where t1.owner = t2.owner
  22.                 AND t1.object_name = t2.table_name
  23.                 AND t2.data_type = 'LONG'
  24.                 AND t2.data_type = 'LONG RAW')
  25.     UNION ALL
  26.     -- перемещение и ребилд индексов, за исключением IOT индексов
  27.     SELECT 'alter index '||owner||'.'|| index_name|| ' rebuild tablespace '|| index_ts_name move_sql
  28.      FROM  all_indexes
  29.     WHERE  owner=varUser AND index_type <> 'IOT - TOP')
  30.   LOOP
  31.   dbms_output.put_line(obj.move_sql);
  32.    EXECUTE IMMEDIATE obj.move_sql;
  33.   END LOOP;
  34. END;
* This source code was highlighted with Source Code Highlighter.

2 комментария:

Максим комментирует...

Подскажите в чем может быть проблема, пытаюсь поменять пространство для индекса и валится ошибка " ORA-29871: неверный параметр при изменении индекса домена "

aaz комментирует...

Максим, я уже давно отошел от админства ORACLE, советую посмотреть в этой ветке https://forums.oracle.com/forums/thread.jspa?threadID=1034519 похожая проблема.