Oracle Database
Разделение таблиц
Поиск…
Вступление
замечания
Разделение является дополнительным вариантом и доступно только для Enterprise Edition.
Разделение хэшей
Это создает таблицу, разбитую на хэш, в этом примере на идентификаторе хранилища.
CREATE TABLE orders (
order_nr NUMBER(15),
user_id VARCHAR2(2),
order_value NUMBER(15),
store_id NUMBER(5)
)
PARTITION BY HASH(store_id) PARTITIONS 8;
Вы должны использовать мощность 2 для количества хэш-разделов, чтобы получить равномерное распределение в размере раздела.
Разбиение диапазона
Это создает таблицу, разбитую по диапазонам, в этом примере на значения порядка.
CREATE TABLE orders (
order_nr NUMBER(15),
user_id VARCHAR2(2),
order_value NUMBER(15),
store_id NUMBER(5)
)
PARTITION BY RANGE(order_value) (
PARTITION p1 VALUES LESS THAN(10),
PARTITION p2 VALUES LESS THAN(40),
PARTITION p3 VALUES LESS THAN(100),
PARTITION p4 VALUES LESS THAN(MAXVALUE)
);
Выберите существующие разделы
Проверка существующих разделов на схеме
SELECT * FROM user_tab_partitions;
Перечисление списков
Это создает таблицу, разбитую по спискам, в этом примере на идентификатор магазина.
CREATE TABLE orders (
order_nr NUMBER(15),
user_id VARCHAR2(2),
order_value NUMBER(15),
store_id NUMBER(5)
)
PARTITION BY LIST(store_id) (
PARTITION p1 VALUES (1,2,3),
PARTITION p2 VALUES(4,5,6),
PARTITION p3 VALUES(7,8,9),
PARTITION p4 VALUES(10,11)
);
Падение раздела
ALTER TABLE table_name DROP PARTITION partition_name;
Выбор данных из раздела
Выбор данных из раздела
SELECT * FROM orders PARTITION(partition_name);
Усечение раздела
ALTER TABLE table_name TRUNCATE PARTITION partition_name;
Переименовать раздел
ALTER TABLE table_name RENAME PARTITION p3 TO p6;
Переместить раздел в другое табличное пространство
ALTER TABLE table_name
MOVE PARTITION partition_name TABLESPACE tablespace_name;
Добавить новый раздел
ALTER TABLE table_name
ADD PARTITION new_partition VALUES LESS THAN(400);
Разделить раздел
Разделяет некоторый раздел на два раздела с другой высокой границей.
ALTER TABLE table_name SPLIT PARTITION old_partition
AT (new_high_bound) INTO (PARTITION new_partition TABLESPACE new_tablespace,
PARTITION old_partition)
Объединить разделы
Объединить два раздела в один
ALTER TABLE table_name
MERGE PARTITIONS first_partition, second_partition
INTO PARTITION splitted_partition TABLESPACE new_tablespace
Обмен разделами
Exchange / конвертировать раздел в несегментированную таблицу и наоборот. Это облегчает быстрое «перемещение» данных между сегментами данных (в отличие от «insert ... select» или «create table ... as select»), поскольку операция DDL (операция обмена разделами является данными обновление словаря без перемещения фактических данных), а не DML (большие отладки / повторные издержки).
Большинство основных примеров:
- Преобразовать несегментированную таблицу (таблицу «B») в раздел (таблицы «A»):
Таблица «A» не содержит данных в разделе «OLD_VALUES», а таблица «B» содержит данные
ALTER TABLE "A" EXCHANGE PARTITION "OLD_VALUES" WITH TABLE "B";
Результат: данные «перемещаются» из таблицы «B» (не содержат данных после операции) для разделения «OLD_VALUES»
- Преобразовать раздел в несегментированную таблицу:
Таблица «A» содержит данные в разделе «OLD_VALUES», а таблица «B» не содержит данных
ALTER TABLE "A" EXCHANGE PARTITION "OLD_VALUES" WITH TABLE "B";
Результат: данные «перемещаются» из раздела «OLD_VALUES» (не содержит данных после операции) в таблицу «B»
Примечание. Существует немало дополнительных опций, функций и ограничений для этой операции.
Дополнительную информацию можно найти по этой ссылке ---> « https://docs.oracle.com/cd/E11882_01/server.112/e25523/part_admin002.htm#i1107555 » (раздел «Обмен разделами»)