Подтвердить что ты не робот

Как перемещать таблицу из одного табличного пространства в другое в oracle 11g

Я запустил oracle 11g и вам нужно переместить table (tbl1) из одного tablespace (tblspc1) в другой (tblspc2). Какой самый простой способ сделать это?

4b9b3361

Ответ 1

Попробуйте следующее: -

ALTER TABLE <TABLE NAME to be moved> MOVE TABLESPACE <destination TABLESPACE NAME>

Очень хорошее предложение от IVAN в комментариях, поэтому подумал добавить в мой ответ

Примечание: это приведет к аннулированию всех табличных индексов. Поэтому для этой команды обычно следует

alter index <owner>."<index_name>" rebuild;

Ответ 2

Используйте sql от sql:

вывести этот файл в файл:

select 'alter index '||owner||'.'||index_name||' rebuild tablespace TO_TABLESPACE_NAME;' from all_indexes where owner='OWNERNAME';

spoolfile будет иметь что-то вроде этого:

alter index OWNER.PK_INDEX rebuild tablespace CORRECT_TS_NAME;

Ответ 3

Перемещение таблиц:

Первый запуск:

SELECT 'ALTER TABLE <schema_name>.' || OBJECT_NAME ||' MOVE TABLESPACE '||' <tablespace_name>; '
FROM ALL_OBJECTS
WHERE OWNER = '<schema_name>'
AND OBJECT_TYPE = 'TABLE'
<> '<TABLESPACE_NAME>';

Где <schema_name> - имя пользователя. И <tablespace_name> - это табличное пространство назначения.

В результате вы получите строки вроде:

ALTER TABLE SCOT.PARTS MOVE TABLESPACE USERS;

Вставьте результаты в script или в приложение разработчика asacle sql, например, и запустите его.

Перемещение индексов:

Первый запуск:

SELECT 'ALTER INDEX <schema_name>.'||INDEX_NAME||' REBUILD TABLESPACE <tablespace_name>;' 
FROM ALL_INDEXES
WHERE OWNER = '<schema_name>'
AND TABLESPACE_NAME NOT LIKE '<tablespace_name>';

Последняя строка в этом коде может сэкономить вам много времени, поскольку она отфильтровывает индексы, которые уже находятся в правильном табличном пространстве.

В результате вы должны получить что-то вроде:

ALTER INDEX SCOT.PARTS_NO_PK ПОЛЬЗОВАТЕЛИ TABLESPACE REBUILD;

Вставьте результаты в script или в приложение разработчика asacle sql, например, и запустите его.

И последнее, но не менее важное: перемещение LOB:

Первый запуск:

SELECT 'ALTER TABLE <schema_name>.'||LOWER(TABLE_NAME)||' MOVE LOB('||LOWER(COLUMN_NAME)||') STORE AS (TABLESPACE <table_space>);'
FROM DBA_TAB_COLS
WHERE OWNER = '<schema_name>' AND DATA_TYPE like '%LOB%';

Это перемещает объекты LOB в другое табличное пространство.

В результате вы должны получить что-то вроде:

ALTER TABLE SCOT.bin $6t926o3phqjgqkjabaetqg == $0 MOVE LOB (календарь) STORE AS (ПОЛЬЗОВАТЕЛИ TABLESPACE);

Вставьте результаты в script или в приложение разработчика asacle sql, например, и запустите его.

O, и есть еще одна вещь:

По какой-то причине мне не удалось переместить индексы типа DOMAIN. В качестве работы я сбросил индекс. изменили табличное пространство по умолчанию пользователя в нужное табличное пространство. а затем снова воссоздайте индекс. Есть лучший способ, но это сработало для меня.

Ответ 4

Попробуйте переместить таблицу (tbl1) в табличное пространство (tblspc2).

alter table tb11 move tablespace tblspc2;