Фев 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, там рассматривается более сложный пример.

  4 комментария to “Fast Split Partitioning в Oracle 9i и выше”

  1. Делаю всё точь-в-точь по вашей статье. Таблица партицирована по дате, субпартиции по хэш. После разбиения одна из партиций пустая. Однако глобальный секуионированный индекс слетает.
    Не подскажите, на что можно обратить внимание?

    • Похоже, я плохо сформулировал про индексы.
      Глобальный индекс слетит, да. Но партиции локальных индексов создадутся сами.

  2. И что именно значит фраза
    "Физические параметры хранения новой непустой секции должны быть такими же, как и у исходной"
    О каких именно физических параметрах идет речь?
    Табличное пространство наверное, а ещё что?

 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="">

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

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