Совмещенный тип фрагментации
Тип фрагментации, совмещающий в себе фрагментацию с использованием хэш-функции и фрагментацию по диапазону значений.
Синтаксис
Для создания и фрагментации таблиц используется дополнительная синтаксическая конструкция в команде CREATE ТABLE — PATITION BY.
Обычный синтаксис для создания ферментированной таблицы выглядит следующим образом:
Описание фрагментов:
(partition имя фрагмента1 (партиции) название табличного пространства,
partition имя фрагмента2 (партиции) название табличного пространства)
или
PARTITION BY RANGE (имя столбца для проверки на соответствие диапазону фрагмента)
(PARTITION имя фрагмента1 VALUES LESS THAN
(выражение1)) имя табличного пространства,
(PARTITION имя фрагмента1 VALUES LESS THAN
(выражение2)) имя табличного пространства
Выгажение 1, Выражение 2 задают диапазон для данных для определения фрагмента таблицы (партиции), к которому эти данные относятся.
Специфика использования оператора SELECT для выбора данных из фрагментированных таблиц
С помощью оператора SELECT есть возможность как выбирать все данные из фрагментированной таблицы, так и использовать SELECT для выбора данных из заданного фрагмента таблицы.
Пример:
Данный запрос выведет данные из фрагмента таблицы pt_3.
Фрагментация по диапазону значений.
Создадим таблицу проводок с фрагментацией по диапазону значений.
Заполним таблицу проводок значениями.
Выберем данные из таблицы.
SUMM DOCDATE DOCNUM
6226 11.01.2014 19170
3561 10.01.2014 41482
7106 09.01.2014 5604
5177 02.01.2014 1917
7090 02.01.2014 26399
692 07.01.2014 39100
8246 23.01.2014 38502
3364 30.01.2014 2813
7014 22.01.2014 41248
2331 11.01.2014 33239
SUMM DOCDATE DOCNUM
6226 11.01.2014 19170
3561 10.01.2014 41482
7106 09.01.2014 5604
SUMM DOCDATE DOCNUM
7131 13.02.2014 15345
2765 26.02.2014 47587
6594 16.02.2014 24707
4832 30.03.2014 10615
4300 06.03.2014 20531
5897 07.03.2014 47711
SUMM DOCDATE DOCNUM
521 07.04.2014 35258
7416 05.04.2014 32045
1589 07.04.2014 46956
Следующий пример демонстрирует разбиение на фрагменты таблицы в зависимости от года, к которому принадлежит проводка.
Следующий пример иллюстрирует использование фрагментации таблицы в зависимости от числового значения.
Фрагментация с использованием списка значений.
SUMM DOCDATE DOCTYPE
1 9445 26.01.2013 PP
2 6120 21.01.2012 PP
3 8374 18.02.2013 PP
4 533 24.04.2011 PP
5 77 27.02.2013 PO
6 5046 12.01.2011 PO
SUMM DOCDATE DOCTYPE
1 9445 26.01.2013 PP
2 6120 21.01.2012 PP
3 8374 18.02.2013 PP
SUMM DOCDATE DOCTYPE
1 3046 21.12.2011 RR
2 2093 07.09.2012 RR
3 9233 14.08.2012 RR
SUMM DOCDATE DOCTYPE
1 7980 11.12.2012 RO
2 9338 01.03.2012 SO
3 9784 22.11.2012 RO
Фрагментация с использованием хэш-функции
Создадим таблицу проводок с фрагментацией по хэш-функции.
Заполним ее данными:
Выберем данные из таблицы:
А также выполним оператор SELECT для каждого из фрагментов (секций) таблицы:
Смешанный тип фрагментации
Смешанный тип фрагментации предусматривает как фрагментацию по диапазону значений, так и дополнительную фрагментацию по хэш-функции или фрагментацию по списку значений.
Заполним таблицу PRO_RANGE_HASH:
Управление данными во фрагментах таблицы
Попробуем внести данные в таблицу, которые не подходят по условиям ни в один из фрагментов (секций).
Сервер выведет ошибку Ora-144000. Вставленный ключ секции не соответствует ни одной секции.
Изменим данные таким образом, чтобы изменилась принадлежность записей к фрагменту.
Получим ошибку обновление ключа секции, что приведет к ее изменению…
Как же сделать возможным перенос строк?
Для этого необходимо включить для выбранной таблицы опцию ROW MOVEMENT.
Выполним скрипт:
На этот раз ошибок не было. Обновление строк в таблице прошло успешно.
А собственно, зачем это все было необходимо? Как это применить?
У вас есть три табличных пространства, нам в данный момент нужна только оперативная информация по документам типа RR из таблицы PRO_LIST в табличном пространстве номер TBLSP2.
Отключим остальные табличные пространства и перенесем их на архивный диск.
Выполним запрос по таблице PRO_LIST:
Получим системную ошибку о том, что сегмент не может быть прочитан.
Скорректируем запрос, так как нам нужны только документы RR.
Запрос выполнен без ошибок.
SUMM DOCDATE DOCTYPE
3046 21.12.2011 RR
2093 07.09.2012 RR
9233 14.08.2012 RR
5474 09.03.2013 RR
Таким образом, применяя фрагментацию в больших таблицах с несколькими миллионами записей, всегда есть возможность освободить часть дискового пространства и перенести неиспользуемые данные на архивный носитель.
Читать дальше
Конец ознакомительного отрывка
Купить книгу