23.06.2012 06:04
AlexeyF
 
Есть таблица с партициями и субпартициями.
Субпартицииям делаю объединение, MERGE - всё нормально получается.
ALTER TABLE <table>
MERGE SUBPARTITIONS SP1, SP2
INTO SUBPARTITION SP_REST
TABLESPACE <tablespace> UPDATE INDEXES;

Пытаюсь сообразить как сделать merge для partition у которых есть subpartiton.
Если сделать
ALTER TABLE <table>
MERGE PARTITIONS Part1, Part2
INTO PARTITION Part_REST
TABLESPACE <tablespace> UPDATE INDEXES;

Part_REST получится уже без субпартиций. Подскажите что добавить в этот запрос, что бы субпартиции тоже объединились и остались в Part_REST? Смотрел внимательно ман по ALTER TABLE - но запутался совсем.
23.06.2012 07:30
OlegON
 
Я, наверное, еще не проснулся, но никак не могу понять конкретную задачу. Во-первых, покажи DDL изначальной таблицы, в зависимости от типа партиций и субпартиций, с ними может получиться и облом. Во-вторых, задача-то в чем?
23.06.2012 14:23
AlexeyF
 
Таблица знакомая всем - SUPERMAG.FFMAPREP

Вот кусок для примера:

PARTITION FF1_2009
NOLOGGING
TABLESPACE INDX
PCTFREE 5
INITRANS 10
MAXTRANS 255
STORAGE (
INITIAL 4888K
MINEXTENTS 1
MAXEXTENTS UNLIMITED
BUFFER_POOL DEFAULT
)
( SUBPARTITION FF1_2009_CR TABLESPACE FFTAB,
SUBPARTITION FF1_2009_CS TABLESPACE FFTAB,
SUBPARTITION FF1_2009_IW TABLESPACE FFTAB,
SUBPARTITION FF1_2009_PE TABLESPACE FFTAB,
SUBPARTITION FF1_2009_PN TABLESPACE FFTAB,
SUBPARTITION FF1_2009_PO TABLESPACE FFTAB,
SUBPARTITION FF1_2009_WI TABLESPACE FFTAB,
SUBPARTITION FF1_2009_WO TABLESPACE FFTAB ),
PARTITION FF2_2009
NOLOGGING
TABLESPACE INDX
PCTFREE 5
INITRANS 10
MAXTRANS 255
STORAGE (
INITIAL 4888K
MINEXTENTS 1
MAXEXTENTS UNLIMITED
BUFFER_POOL DEFAULT
)
( SUBPARTITION FF2_2009_CR TABLESPACE FFTAB,
SUBPARTITION FF2_2009_CS TABLESPACE FFTAB,
SUBPARTITION FF2_2009_IW TABLESPACE FFTAB,
SUBPARTITION FF2_2009_PE TABLESPACE FFTAB,
SUBPARTITION FF2_2009_PN TABLESPACE FFTAB,
SUBPARTITION FF2_2009_PO TABLESPACE FFTAB,
SUBPARTITION FF2_2009_WI TABLESPACE FFTAB,
SUBPARTITION FF2_2009_WO TABLESPACE FFTAB )

Оптимайзер в своё время добавил партиции на 9-й, 10-й годы на каждый месяц, т.е. на один год 12 партиций + 6 субпартиций на каждую, соответственно. Сейчас всякие дефрагментации да ребилд всех этих субпартиций оптимайзером занимает слишком много времени. Данные старые и редко востребованные. Поэтому хочу что бы партиции были не на каждый месяц в этих годах, а по одной партиции на один год. Соответственно надо merge 12-ти партиций 2009-го года и 12-ти 2010-го года. С этой целью и вопрос
23.06.2012 14:57
OlegON
 
Я так и подумал. Если данные старые и редко востребованные, то закрой период. Я для этих целей не трогаю FFMAPREP_, что над ней можно как угодно изгаляться. А если ты старые партиции удалишь, то оптимизатор тебе их обратно вернет по моему, поскольку расчитан на работу с прерыванием операций и решит, что что-то не доделал.
Если чисто теория интересует, то интаксис там лихой, я на память не вспомню, но, как помню, я hash там не использовал, соответственно просто мержь партиции, субпартиции сойдутся. Что не получается? Покажи, что делаешь и какая ошибка?
23.06.2012 15:20
AlexeyF
 
Периоды закрываю потихоньку. Hash там точно нет. Оптимайзер не возвращает Я пару партиций слил без субпартиций - оптимайзер не реагирует на это. Хочу слить теперь уже нормально, с сохранением субпартиций. И для дела и для расширения опыта.
24.06.2012 08:19
AlexeyF
 
я уже говорил:
Если сделать
ALTER TABLE <table>
MERGE PARTITIONS Part1, Part2
INTO PARTITION Part_REST
TABLESPACE <tablespace> UPDATE INDEXES;
Part_REST получится уже без субпартиций.
т.е. субпартиции теряются.
Часовой пояс GMT +3, время: 19:11.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.