Секционирование таблиц в Oracle на практике

Разделение таблиц (секционирование) в OracleОдним из эффективных способов повышения производительности работы баз данных является секционирование таблиц и индексов. Рассмотрим разные методы секционирования и их особенности

Создание секционированных таблиц в Oracle

В этой части статьи рассматриваются особенности создания секционированных таблиц, в следующей речь пойдет об особенностях перевода существующих больших несекционированчых таблиц в секционированные таблицы, а также особенности секционирования индексов и работа с секциями.



Задачи, решаемые секционированием

Прежде чем приступить к секционированию, надо четко определить задачи, которые предполагается решить

Первой и наиболее часто решаемой задачей при секционировании является повышение производительности работы SQL-запросов и DML-операций по модификации строк таблицы. Это достигается за счет того, что поиск и модификация строк в таблице идут не по всей таблице, а только в ее части (в одной или нескольких секциях). Кроме того, разбиение таблицы на секции позволяет увеличит скорость обработки таблицы за счет использования параллелизма.

Вторая задача, которая нашла широкое применение в нашей организации, - это быстрое удаление значительного числа строк в больших таблицах за счет выполнения операции truncate секций. Другим широким применением секционирования является освобождение табличного пространства, занимаемого таблицей, после удаления строк из таблицы командой delete. Использование команд Shrink (сжатие таблицы) или Move (перемещение в табличное пространство) для освобождения табличного пространства в большой несекционированной таблице может занимать значительное время. В секционированных таблицах выполнение таких команд в пределах секции будет выполниться существенно быстрее.

Третьей задачей секционирования является разбиение большой таблицы на оперативную и архивную части. Особенно это эффективно, если оперативная часть в виде секции интенсивно пополняется и модифицируется, а архивная часть (секции) менее подвержена изменениям, и существенно реже из нее извлекается информация. Строки таблицы из оперативной секции со временем могут быть переведены в архивные секции, при этом архивные секции могут периодически очищаться.

Четвертой задачей является существенное снижение конкуренции за строки и индексы таблицы, в том числе уменьшения вероятности блокировок. Так в результате секционирования одной из таблиц по HASH-методу полностью была решена задача множественных блокировок, возникающих в таблице.

Пятой задачей является обеспечение устойчивости функционирования таблиц. Поскольку секция - это поименованный самостоятельный фрагмент памяти на дисках, то при возникновении проблем в одних секциях другие продолжают успешно функционировать. Устойчивости функционирования способствует также хранение секций в различных табличных пространствах и на различных физических носителях. Это особенно важно для таблиц, которые обеспечивают работу множества других таблиц (например. справочники, к которым идет интенсивное обращение). Кроме того, секционирование позволяет осуществлять независимое копирование и резервирование секций, оперативное восстановление секций, а также возможности более быстрой и более частой перестройки индексов наиболее активной секции, не затрагивая индексы пассивных секций.

Ключ секционирования

Следующим важным шагом в создании секционированной таблицы является определение ключа секционирования. В качестве ключа секционирования может выступить столбец или несколько столбцов, относительно значений которых будет делаться разнесение таблицы на секции. К потенциальным столбцам для создания ключа секционирования относятся столбцы типа date (например, столбец created - дата создания строки или updated - дата изменения строки) для секционирования по методам Range и List. Столбцы типа number с высокой степенью уникальности значений хорошо подходят для секционирования по методам Range и Hash. Столбцы, имеющие список фиксированных значений, подходят для секционирования по списку List.

В Oracle 11g появилась возможность в качестве ключа секционирования использовать виртуальный столбец (virtual column), построенный на функции к реальному столбцу таблицы. Виртуальный столбец в действительности не хранится в таблице, а каждый раз вычисляется при обращении к нему во время ввода данных в таблицу. Для создания виртуального столбца используется фраза generated always as. после которой идет функция, выполняемая над реальным столбцом таблицы, а далее идет обязательная фраза virtual. Например, PARTID generated always AS (to_char(UPDATED,'MM')) virtual. Возможен вариант создания виртуального столбца более короткой фразой PARTID AS (to_char(UPDATED,'MM')).

Увидеть, какой столбец в таблице виртуальный позволяет запрос:

SELECT OWNER, TABLE_NAME, COLUMN_NAME, VIRTUAL_COLUMN, J
DATAJTYPE, DATA_DEFAULT FROM ALL_TAB_COLS WHERE J OWNER"’ИМЯ СХЕМЫ' AND TABLE_NAME“'ИМЯ ТАБЛИЦЫ';

Замечание. При вводе данных в таблицу с виртуальным столбцом следует указать в insert и values перечень столбцов, иначе будет ошибка ORA-00947: not enough value.


 

Методы секционирования таблиц

Секционирование повышает эффективность работы с таблицами и индексами

Выбранный ключ секционирования, как правило, определяет методы секционирования. В настоящее время имеются следующие методы секционирования таблиц:

  • Range -секционирование по диапазону ключа,
  • List - секционирование по списку ключа.
  • Hash - хеш-секционирование,
  • составное секционирование.
  • интервальное секционирование.
  • ссылочное секционирование,
  • системное секционирование

Последние три появились в Oracle 11g. вместе с тем последние два у нас пока не нашли большого применения.

 

Секционирование методом Range по диапазону ключа

В практике секционирования по методу Range используем два вида секционирования: по диапазону дат и по диапазону значений.

 

Секционирование методом Range по диапазону дат

При секционировании этим методом нами используются секционирование по дням, месяцам и по годам. Секционирование этим методом покажем на примере таблицы HISTLG в схеме AIF. Ключом секционирования выступает столбец updated (дата корректировки строки), при этом секции создаются с шагом секций в один месяц. Команда создания секционированной таблицы create имеет вид:

CREATE TABLE AIF.HISTLG ( ISN NUMBER, UPDATED DATE) TABLESPACE HSTDATA PARTITION BY RANGE (UPDATED)
(PARTITION PARTMM_2015_01 VALUES LESS THAN J
(TO_DATE('01.01.2015','DD.MM.YYYY')) COMPRESS, PARTITION PARTMM_2015_02 VALUES LESS THAN J (TO__DATE (' 01.02.2015 ', 'DD.MM.YYYY')) ,
PARTITION PARTMM_2015_03 VALUES LESS THAN J (TO__DATE ('01.03.2015', ' DD .MM. YYYY ’)) ,
PARTITION PARTMM_MAX	VALUES LESS THAN (MAXVALUE)
) ENABLE ROW MOVEMENT;

В команде CREATE указаны табличное пространство TABLESPACE HSTDATA, в котором будет находиться таблица, метод секционирования и ключ секционирования PARTITION BY RANGE (UPDATED), имена секций и максимальное значение диапазона ключевого столбца этой секции. Например, первая секция PARTITION PARTMM_2015_01 VALUES LESS THAN TO_DATE('01.01.20157DD.MM.YYYY') говорит о том, что все значения столбца update меньше 01.01.2015 попадут в первую секцию, а значения update меньше 01.02.2015 попадут во вторую секцию и т.д. В таблице создана последняя секция PARTITION PARTMM_MAX VALUES LESS THAN (MAXVALUE), позволяющая при превышении значения ключа значения диапазона предпоследней секции размещать строки таблицы в эту последнюю секцию (это подстраховка на случай, если забыли создать новую секцию). Фраза COMPRESS определяет, что первая секция будет сжата.

Следует обратить особое внимание на последнюю фразу ENABLE ROW MOVEMENT, которая позволяет переходить строкам таблицы из секции в секцию. В отсутствии этой фразы Oracle выдаст ошибку. Переход строк по секциям может происходить автоматически при изменении значения ключа (например, столбец updated в результате операции update изменит значение на то. при котором он должен уже принадлежать другой секции) или может происходить специально, например, для перевода строк из оперативной секции в архивную секцию путем изменения значения ключевого столбца. Если не указали эту фразу при создании таблицы, то, чтобы избежать ошибки, следует выполнить команду ALTER TABLE ИМЯ ТАБЛИЦЫ ENABLE ROW MOVEMENT.

Увидеть секции таблицы можно по запросу:

SELECT * FROM ALL_TAB_PARTITIONS WHERE TABLE_NAME*'ИМЯ J ТАБЛИЦЫ’ AND TABLE_OWNER-'ИМЯ СХЕМЫ' ORDER BY J PARTITION_POSITION;

А содержимое секции по запросу:

SELECT * FROM ИМЯ_СХЕМЫ.ИМЯ_ТАБЛИЦЫ PARTITION (ИМЯ СЕКЦИИ);

 

Секционирование методом RANG по диапазону значений

Секционирование по диапазону значений похоже на секционирование по диапазону дат, только вместо ключа по дате используется ключ по столбцу, принимающему числовое значение (желательно имеющее равномерное распределение по всему диапазону значений). Для этого хорошо подходит столбец с уникальным значением. Рассмотрим на примере той же таблицы AIF.HISTLG, секционированной выше по диапазону дат. В качестве ключа секционирования используется столбец ISN с уникальными значениями. Команда создания таблицы имеет вид:

CREATE TABLE AIF.HISTLG ( ISN NUMBER. UPDATED DATE) TABLESPACE HSTDATA PARTITION BY RANGE (ISN)
(PARTITION PARTISN_01 VALUES LESS THAN (1000),
PARTITION PARTISN_02 VALUES LESS THAN (2000),
PARTITION PARTISN_03 VALUES LESS THAN (3000),
PARTITION PARTISN_MAX VALUES LESS THAN (MAXVALUE)
) ENABLE ROW MOVEMENT;

секционированные таблицы (PARTITION)  в базе данных Oracle

где PARTITION BY RANGE (ISN) говорит о секционировании no RANGE при ключе секционирования ISN, интервал создания секции через 1000 значений.

 

Создание новой секции в секционированной таблице по методу Range

Каждый раз при создании секционированной таблицы возникает непростой вопрос: как создавать новые секции. До Oracle 11g было три варианта создания новой секции.

Первый вариант - это в команде create таблицы вручную создается множество секций (например, на несколько лет вперед). Однако, как показала практика, этот метод приводит к тому, что через несколько лет о том, что таблица была секционирована, могут забыть. Когда об этом вспоминают, то оказывается, что информация длительное время пишется в одну и ту же последнюю секцию THAN (MAXVALUE). В результате секционированная таблица практически превратилась в обычную таблицу. В этой ситуации надо либо снова создавать новую секционированную таблицу, либо по команде Split разбивают последнюю секцию на несколько секций. Например, для таблицы AIF.HISTLG (секционированной по дате) команда Split по созданию новой секции PARTMM_2016_01 на основе расщепления последней PARTMM.MAX секции имеет вид:

--диапазон новой секции
ALTER TABLE AIF.HISTLG SPLIT PARTITION PARTt*4_MAX J
AT (TO_DATE(’01.01.2016','DD.MM.YYYY'))
INTO (PARTITION PARTMM_2016_01 ,	--имя новой секции
PARTITION P_MAX) UPDATE GLOBAL INDEXES;

Фраза UPDATE GLOBAL INDEXES обеспечивает исправность индексов после команды Split.

Второй вариант - создать процедуру, которая автоматически образует новую секцию. Такая универсальная процедура для секционирования по дням и месяцам была нами разработана. Данная процедура запускается Job Sheduler ежедневно для секционирования по дням или ежемесячно для секционирования по месяцам.

Данные процедуры успешно работают уже несколько лет, своевременно создавая новые секции. Основой процедуры являются представление ALL_TAB_PARTITIONS ДЛЯ поиска последней секции таблицы и команда Split для расщепления этой секции по команде ALTER, указанной выше.

Третий вариант (разработан нашими специалистами и успешно применяется в течение несколько лет) - это создание секционированной таблицы с секциями, используемыми по циклу. Под секционированием таблиц по циклу понимаются секционирование, выполненное в соответствии с двумя правилами. Первое правило - таблица должна содержать фиксированное количество секций, равное либо максимальному числу дней в месяце (31 секция), либо максимальному число дней в году (366 секций), либо числу месяцев в году (12 секций). Второе правило: данные в одну и ту же секцию попадают с определенной периодичностью (цикличностью).

Например, в следующем году информация за январь пишется снова в ту же секцию января, что и в прошедшем году. При этом секции чистятся от прошлогодней информации. Преимущество этого метода в том, что не надо создавать новые секции.

В Oracle 11g появилась новая замечательная возможность автоматического создания секций с использованием при создании таблицы фразы INTERVAL (такой подход называется интервальное секционирование Interval Partitioning). Тогда при создании секций методом Range по интервалу дат с использованием фразы Interval команда создания секционированной таблицы примет вид:

CREATE TABLE AIF.HISTLG ( ISN NUMBER, UPDATED DATE) J TABLESPACE HSTDATA PARTITION BY RANGE (UPDATED)
INTERVAL (INTERVAL '1' MONTH)
(PARTITION PARTMM_01 VALUES LESS THAN J
(TO_DATE('01.01.2015*,'DD.MM.YYYY')) )
ENABLE ROW MOVEMENT;

где фраза INTERVAL (INTERVAL '1' MONTH) указывает, что секции будут автоматически создаваться каждый месяц (та же фраза может иметь вид INTERVAL (NUMTOYMINTERVAL (1. 'MONTH'). Для секционирования по дням используется фраза INTERVAL (INTERVAL '1' DAY), а по годам - INTERVAL (INTERVAL '1' YEAR). При автоматическом создании секций методом Range по интервалу значений с использованием фразы Interval команда создания таблицы примет вид:

CREATE TABLE AIF.HISTLG ( ISN NUMBER, UPDATED DATE) J TABLESPACE HSTDATA PARTITION BY RANGE (ISN)
INTERVAL (1000)
(PARTITION PARTISN_01 VALUES LESS THAN (1000) ) J ENABLE ROW MOVEMENT;

где фраза INTERVAL(1000) задает режим автоматического создания секции через 1000 значений ISN.

Следует учесть, что новые секции создаются в процессе ввода данных. Следует также иметь в виду, что имя новой автоматически создаваемой секции будет иметь вид SYS_PNNNNN, например, SYS_P28981. При этом при интервальном секционировании не нужно создавать последнюю секцию VALUES LESS THAN (MAXVALUE). иначе появится ошибка ORA-14761.

Таким образом, в Oracle 11g у команды create создания секционированной таблицы существенно меньшее число строк, а о создании новой секции своевременно позаботится Oracle.

 

Секционирование по списку ключей LIST

Секционирование по списку применяется, если есть возможность указать конкретный перечень дискретных значений столбца, по которому происходит разбиение на секции. При секционировании по LIST в команде create указываются метод секционирования LIST (PARTITION BY LIST), ключ секционирования и имена секций, в которых указывается одно или несколько дискретных значений.

В качестве примера проведем секционирование таблицы AIF.AGREEM. используя в качестве ключа виртуальный столбец partid. При каждом вводе строки в таблицу в виртуальном столбце формируется числовой номер месяца по функции to_number(to_char(updated,'MM')). Таблицу разбиваем на 12 секций, кроме того, используем подход секционирования по циклу, когда в следующем году строки января вводятся в ту же секцию января, а перед этим секция за январь чистится от старых данных по delete или по truncate. Команда создания секции примет вид:

--виртуальный столбец
CREATE TABLE AIF.AGREEM (ISN NUMBER,UPDATED DATE, J
PARTID AS (TO_NUMBER(TO_CHAR(UPDATED, ’	’)))
) PARTITION BY LIST(PARTID)
( PARTITION PART_1 VALUES (1),
PARTITION PART_2 VALUES (2),
PARTITION PART_12 VALUES (12));

Вместо виртуального столбца может быть введен реальный столбец partid (тип number), заполняемый при вводе строки в таблицу. Указанный выше вариант эффективно использовался в таблицах как с 366 секциями, так и с 12 с очисткой последних по truncate, поскольку информация в таблицах хранится меньше года. Достоинство этого подхода в том, что создавать новые секции не приходится, а табличное пространство старых секций ежемесячно быстро освобождается по truncate.


Замечание. Если необходимо очистить табличное пространство секции, то используются либо команды сжатия SHRINK, либо MOVE (перемещения в табличное пространство):


ALTER TABLE ИМЯ_СХЕМЫ.ИМЯ_ТАБЛИЦЫ MODIFY PARTITION J ИМЯ_СЕКЦИИ SHRINK SPACE CASCADE;
ALTER TABLE ИМЯ_СХЕМЫ.ИМЯ_ТАБЛИЦЫ MOVE PARTITION ИМЯ_СЕКЦИИ J TABLESPACE ИМЯ_ТАБЛИЧНОГО_ПРОСТРАНСТВА NOLOGGING;

Другие стандартные варианты секционирования по методу LIST изложены в различных источниках.

 

Хеш-секционирование HASH

Как правило, если не получается секционировать по диапазону RANGE или LIST, то применяется хешсекционирование, основанное на хеш-функции. В этом случае строки таблицы равномерно распределяются между секциями на основании внутренних алгоритмов хеширования Oracle. При этом чем уникальнее значения столбца в таблице, по которому идет секционирование, тем лучше будет распределение данных по разделам. Первичный ключ или уникальный столбец (столбцы) является самым хорошим хеш- ключом. Oracle рекомендует число секций N как степень 2, т.е. N=2,4,8,16,32 и т.д. При этом добавление или удаление какой-то хеш-секции вызывает перезапись всех данных в другие секции. Рассмотрим HASH секционирование на примере индексноорганизованной таблицы LISTIN. Целью HASH секционирования таблицы было добиться существенного снижение числа блокировок, возникающих в этой таблице. Эта цель была успешно реализована за счет секционирования таблицы по 16 секциям (фраза PARTITIONS 16), где ключом секционирования выступал столбец TASKISN. Команда создания таблицы имеет вид:

CREATE TABLE AIF.LISTIN (TASKISN NUMBER, OBJISN NUMBER, J PARAM NUMBER,
CONSTRAINT PK_LISTIN PRIMARY KEY(TASKISN,OBJISN,OBJROWID,J PARAM)
) ORGANIZATION INDEX INCLUDING PARAM OVERFLOW PARTITION BY HASH (TASKISN) PARTITIONS 16

Следует заметить, что если в качестве ключа секционирования используется столбец, в котором имеем очень неравномерное распределение значения столбца (малая уникальность), то применение хеш-секционирования не целесообразно. При этом число секций не имеет особого значения, поскольку все значения ключевого столбца «свалятся» в одну-две секции.


Замечание. Увидеть размер секций в mb по всем указанным выше методам можно по запросу:


SELECT P.TABLE_OWNER, Р.TABLE_NAME,Р.PARTITION_POSITION POS, J P.PARTITION_NAME, P.HIGH_VALUE, P.SEGMENT_CREATED, J (SELECT ROUND(S.BYTES/1024/1024,1) J FROM DBA_SEGMENTS S WHERE S.OWNER-P.TABLE_OWNER J AND S.SEGMENT_NAME“P.TABLE_NAME AND J S.PARTITION_NAME=P.PARTITION_NAME) MB J FROM DBA_TAB_PARTITIONS P J WHERE TABL?_OWNER='ИМЯ СХЕМЫ’ J AND TABLE_NAME“’ИМЯ ТАБЛИЦЫ' J ORDER BY PARTITION_POSITION;

 

Составное секционирование

При составном секционировании внутри секции создаются подсекции Однако в версиях до Oracle 11g смешанное секционирование разрешалось только по RANGE методу для секции и методам HASH или LIST для подсекции. В Oracle 11g варианты методов секций-подсекций были существенно расширены, и в настоящее время можно осуществлять составное секционирование в следующих комбинациях: Range-Range, Range-Hash , Range-List, List-Range, List-Hash или Ust-List. Надо отметить, что при составном секционировании данные физически хранятся в подсекциях, а секции высту-пают только в роли логических контейнеров.

Рассмотрим смешанное секционирование на примере таблицы платежей AIF.PAY_ORD_RECORD с делением таблицы на секции по методу RANGE, а на подсекции по методу LIST. Ключом секционирования по секциям выступает столбец PAY_DATA (тип date), а ключом секционирования подсекции выступает столбец STATUS (тип number), принимающий три значения: 0. 1,2. Команда создания секционированной таблицы в Oracle 11g с секционированием по месяцам примет вид:

CREATE TABLE AIF.PAY_ORD_RECORD ( ISN NUMBER, J
PAY_DATA DATE, PAYER_NAME VARCHAR2(255). J STATUS NUMBER ) TABLESPACE HSTDATA PARTITION BY RANGE (PAY_DATA)
INTERVAL (INTERVAL '1' MONTH)
SUBPARTITION BY LIST (STATUS)
SUBPARTITION TEMPLATE (
SUBPARTITION STATUSJ) VALUES (0) J TABLESPACE TRDATA1,
SUBPARTITION STATUS_1 VALUES (1) J TABLESPACE TRDATA2,
SUBPARTITION STATUSJ VALUES (2) J TABLESPACE TRDATA3 )
(PARTITION PJ015JJ1 VALUES LESS J
THAN(TO_DATE('01.01.2015','DD.MM.YYYY')))
ENABLE ROW MOVEMENT;

где разбиение по секциям задает фраза PARTITION BY RANGE (PAY_DATA), а по подсекциям фраза SUBPARTITION BY LIST (STATUS). Далее идет список подсекций со своими значениями: STATUS_0 VALUES (0). STATUSJ VALUES (1). STATUSJ? VALUES (2). Для каждой подсекции может быть задано свое табличное пространства, которое может отличаться от табличного пространства таблицы HSTDATA. С гомощью предложения SUBPARTITION TEMPLATE один и тот же набор подсекций будет автоматически использоваться во всех секциях. Однако создание подсекций можно сделать вручную, указав все подсекции для каждого секции. Просмотреть созданные подсекции по имени таблицы можно по запросу:

SELECT P.TABLE_OWNER, Р.TABLE_NAME, Р.PARTITION_NAME, J P.PARTITION_POSITION, P.HIGHJALUE, J P.SUBPARTITION_COUNT, S.SUBPARTITION_NAME, J S.HIGH_VALUE, 
S.SUBPARTITION_POSITION SUBJOS, J S.TABLESPACE_NAME, S.SEGMENT_CREATED FROM ALL_TABJARTITIONS P, ALL_TAB_SUBPARTITIONS S
WHERE P.TABLEJWNER-S.TABLE_OWNER AND J P.TABLE_NAME-S.TABLE JJAME AND P. PARTITION JJAME-S. PARTITION JJAME AND P.TABLEJ)WNER-'AIF' AND P.TABLE JJAME-'PAY_ORD_RECORD' ORDER BY P.PARTITION POSITION, S.SUBPARTITION POSITION;

Системное секционирование (system partitioning)

Появилось в Oracle 11 g и применяется, как правило, для таблиц, которые не могут быть секционированы никакими другими методами. В этом методе Oracle сам управляет, какую строку таблицы в какую секцию помещать. Для этого метода необходимо просто написать название секций, например, секции Р1, Р2, РЗ:

CREATE TABLE AIF,PAY_ORD_RECORD_SYS
(ISN NUMBER, PAY_DATA DATE, PAYERJJAME VARCHAR2(255), J STATUS NUMBER)
PARTITION BY SYSTEM (PARTITION PI,
PARTITION P2,
PARTITION P3);

Увидеть разбиение таблицы на секции можно по запросу:

SELECT * FROM ALLJTABJARTITIONS J
WHERE TABLE JJAME- ’ PAY_ORD_RECORD_SYS ’ ;

Увидеть метод секционирования, что он именно SYSTEM, можно по запросу:

SELECT PART IT I ON ING_T YPE FROM ALLJART_TABLES J WHERE TABLE JJAME-'PAY_ORD_RECORD_SYS’;

Следует заметить, что для правильного ввода данных в таблицу надо, помимо имени таблицы, указать еще имя сегмента, иначе будет ошибка ORA-14701. Тоже для ускоренной выборки данных по запросу следует указать имя сегмента.


Замечание. В таблице подвергнуться секционированию может не только сама таблица, но и индексы таблицы. В силу объемности и важности материала о секционировании индексов пойдет речь во второй части. Там же будет рассказано об особенностях перехода от несекционированных больших по объему таблиц к секционированным таблицам, в том числе о возникающих в этих случаях особенностях поведения индексов, триггеров, синонимов и т.д. этих таблиц.


Выводы

  1. Секционирование повышает эффективность работы с таблицами и индексами, позволяя решать задачи, приведенные в начале статьи.
  2. Важным шагом секционирования является определение ключа секционирования. В Oracle 11g возможно в качестве ключа секционирования использовать виртуальный столбец. В случае невозможности выявить ключ секционирования следует рассмотреть варианты использования методов HASH или системного секционирования.
  3. Выбор метода секционирования в значительной степени определяется выбором ключа секционирования, а число методов секционирования существенно расширено в Oracle 11g.
  4. Важным моментом секционирования таблицы является выбор подхода по созданию новой секции. В статье предлагается три подхода: разработка процедуры автоматического создания секции, запускаемой периодически из JOB, следующий подход - это использование секционирования по циклу или использование интервального секционирования.
  5. Секционирование таблицы позволяет, помимо деления таблицы на секции, создавать внутри секции еще подсекции, при этом в Oracle 11g число комбинаций методов секция-подсекция значительно расширено.

Вас заинтересует / Intresting for you:

Поддерживаемые Oracle типы дан...
Поддерживаемые Oracle типы дан... 4641 просмотров Валерий Павлюков Wed, 24 Oct 2018, 08:00:37
Видеокурс по администрированию...
Видеокурс по администрированию... 8352 просмотров Илья Дергунов Mon, 14 May 2018, 05:08:47
Обновление до Oracle Database ...
Обновление до Oracle Database ... 4863 просмотров Илья Дергунов Tue, 21 Nov 2017, 13:18:05
Создание базы данных Oracle
Создание базы данных Oracle 15396 просмотров Александров Попков Wed, 14 Nov 2018, 12:44:39

Войдите чтобы комментировать

apv аватар
apv ответил в теме #9026 02 мая 2018 08:00
Крутейший материал! Большое спасибо!!
1dz аватар
1dz ответил в теме #8837 10 нояб 2017 07:59
А мене архи полезно было узнать про system partitioning. Thanx!
ildergun аватар
ildergun ответил в теме #8434 18 апр 2017 16:56
Спасибо! Очень полезная информация по составному секционированию пл RANGE методу.