Вопрос по переразбиению таблицы (PARTITION BY RANGE)

DenKrep
Дата: 07.03.2007 13:24:20
Вопрос заключается в следующем.
Есть таблица. У неё есть два поля с датами.

Она сегментирована

PARTITION BY RANGE по "дате№1", например.
и с наличиствующими SUBPARTITION BY LIST.

Стала задача переразбить таблицу, нужно чтобы она была
PARTITION BY RANGE по "дате№2".
Субпартиции нужно оставить те же.

(Большинство запросов, на практике, оказались ограничивающимися по дате№2).

Как это можно сделать минимальной кровью?

Самый "простой" способ, который видится - создать новую таблицу с нужной разбивкой и перегонять данные туда.
Но не хочется. Ой не хочется. Может кто скажет куда копать, чтобы попроще это решить, или это единственный способ?
__mike__
Дата: 07.03.2007 13:37:26
есть пакет dbms_redefenition с помощью которого можно это сделать - посмотрите здесь
http://www.oracle.com/global/ru/oramag/feb2007/dba_15_things.html

и наверное в документации
http://oraclesvca2.oracle.com/docs/cd/B10501_01/server.920/a96521/tables.htm#12458
RA\/EN
Дата: 07.03.2007 14:23:52
__mike__
есть пакет dbms_redefenition с помощью которого можно это сделать - посмотрите здесь
http://www.oracle.com/global/ru/oramag/feb2007/dba_15_things.html

и наверное в документации
http://oraclesvca2.oracle.com/docs/cd/B10501_01/server.920/a96521/tables.htm#12458


Можно проще:
1.Создать новую.
2. По партициям перелить данные
INSERT INTO new_table select * from old_table partiton(A);
ALTER TABLE old_table TRUNCATE PARTITION A DROP STORAGE;
INSERT INTO new_table select * from old_table partiton(B);
ALTER TABLE old_table TRUNCATE PARTITION B DROP STORAGE;
...
INSERT INTO new_table select * from old_table partiton(Z);
ALTER TABLE old_table TRUNCATE PARTITION Z DROP STORAGE;
3. Грохуть старую, переименовать новую в старую.

Думаю, так пошцстрее будет и по месту на диске эффективнее.
orawish
Дата: 07.03.2007 14:43:11
RA\/EN
Можно проще:..

Я бы тоже, наверное, делал почти так же:
1) create table - с секциями
2) цикл - create table(будущая секция) as select + exchange partition
3) rename
DenKrep
Дата: 07.03.2007 15:28:03
orawish
RA\/EN
Можно проще:..

Я бы тоже, наверное, делал почти так же:
1) create table - с секциями
2) цикл - create table(будущая секция) as select + exchange partition
3) rename


Скорее всего так и сделаю.

Потому что DBMS_REDIFINITION тоже подразумевает порядочно кровушки, а безостановочность базы не требуется. update можно ночью сделать. Зато у клиентов бывают случаи что и не найдётся dbms_redifinition - вот тогда совсем весело может быть (кто грохнул, кто не установил - были случаи).

Так что пожалуй всё же воспользуюсь надёжными методами.

Всем ответившим спасибо.

PS: Mike, к чему был первый линк на Oramag "dba_15_things.html" я не понял, если чесно - перечитал, ничего полезного не нашёл. Может не так читал? ;) За второй спасибо - просмотрел, но решил что пересоздать таблицу будет проще.