Фев 102011
 

Впервые возможность быстрого секционирования (Fast Split Partitioning) появилась в 8 версии Oracle только для таблиц, секционированных стратегией range partitioning. В 9-й версии появилась возможность быстрого секционирования для стратегий LIST, RANGE-HASH и RANGE-LIST (о стратегиях секционирования я писал тут).
Чтобы был задействован механизм быстрого секционирования, нужно, чтобы выполнялись 3 условия:

  • Одна из секций, получаемых после операции, должна быть пустой
  • Физические параметры хранения новой непустой секции должны быть такими же, как и у исходной
  • Если в таблице есть LOB-поле, то новые LOB-сегменты должны иметь те же физические параметры, что и исходные

Тогда секционирование пройдёт очень быстро (секунды) и не приведёт к инвалидации индексов.
Покажу на примере range-partitioned таблицы sales из этого поста:

ALTER SESSION SET nls_date_format='SYYYY-MM-DD HH24:MI:SS';
-- Выясним максимально значение ключа секционирования
SELECT MAX(sale_date) FROM sales;

Запрос вернул такое значение:

MAX(SALE_DATE)
--------------------
2012-02-10 12:35:53

Запомним его и для указания новой границы секционирования прибавим к нему, скажем, минуту:

ALTER TABLE sales
SPLIT PARTITION "SALES_MAX" AT
	(TO_DATE(' 2012-02-10 12:37:00', 'SYYYY-MM-DD HH24:MI:SS')
INTO
	(PARTITION "SALES_2012_02"  ,
	 PARTITION "SALES_MAX");

После завершения данной операции мы получим ещё одну секцию SALES_2012_02 и валидный индекс SALES_N.
Подробнее можно почитать на металинке: Doc ID 232628.1, там рассматривается более сложный пример.

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">

(обязательно)

(обязательно)