Как отсоединить раздел от таблицы и присоединить его к другому в оракуле?

У меня есть таблица с огромными данными (скажем, миллионы записей, это всего лишь пример!) за 5 лет с разделом на каждый год. Теперь я хотел бы сохранить данные за последние 2 года и перенести остальные данные за 3 года в новую таблицу, называемую архивом?

Каким был бы идеальный метод с минимальным временем простоя и высокой производительностью?


person azzaxp    schedule 25.01.2012    source источник
comment
для близких избирателей: это вопрос о манипулировании данными. В большинстве случаев DBA не будет участвовать в этом. Программист БД должен сделать это сам.   -  person Florin Ghita    schedule 25.01.2012
comment
@FlorinGhita Администраторы баз данных имеют дело не только с DBA;) Хотя я не был тем, кто обращался к VtC   -  person Sathyajith Bhat    schedule 25.01.2012
comment
@Сатья, я понимаю. Но я думаю, что этот вопрос подходит здесь, в stackoverflow. Возможно, это нормально для dba.stackexchange.com, но и здесь тоже.   -  person Florin Ghita    schedule 25.01.2012


Ответы (1)


alter table exchange partition 

это ответ. Эта команда заменяет сегмент раздела на сегмент таблицы. Это со скоростью света, потому что он делает только некоторые опорные обмены. Итак, вам нужны временные таблицы, потому что, насколько я знаю, вы не можете обмениваться ими напрямую.

Что-то типа:

create table tmp_table(same columns);
Add partition p_2011 in table ARCH_TABLE;

ALTER TABLE CURR_TABLE EXCHANGE PARTITION P_2011 WITH TABLE tmp_table;
ALTER TABLE ARCH_TABLE EXCHANGE PARTITION P_2011 WITH TABLE tmp_table;

Пожалуйста, протестируйте свой код перед запуском.

person Florin Ghita    schedule 25.01.2012
comment
спасибо за ответ, я хотел бы знать, необходима ли арка целевой таблицы для создания раздела. - person azzaxp; 25.01.2012
comment
Да совершенно необходимо. Это вторая строка в примере (добавить раздел). И я рекомендую вам, чтобы таблицы имели одинаковые разделы с одинаковыми диапазонами. - person Florin Ghita; 25.01.2012
comment
Таблица назначения не обязательно имеет раздел. - person azzaxp; 25.01.2012
comment
Пожалуйста, добавьте его. Без него команда exchange работать не будет. Alter table add partiton это команда. - person Florin Ghita; 25.01.2012