Oracle Database
Partitionnement de table
Recherche…
Introduction
Remarques
Le partitionnement est une option de coût supplémentaire et uniquement disponible pour Enterprise Edition.
Partage de hachage
Cela crée une table partitionnée par hachage, dans cet exemple sur l'ID du magasin.
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;
Vous devez utiliser une puissance de 2 pour le nombre de partitions de hachage, afin d'obtenir une distribution uniforme de la taille de la partition.
Partitionnement de gamme
Cela crée une table partitionnée par plages, dans cet exemple sur les valeurs de commande.
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)
);
Sélectionnez des partitions existantes
Vérifier les partitions existantes sur le schéma
SELECT * FROM user_tab_partitions;
Liste de partitionnement
Cela crée une table partitionnée par des listes, dans cet exemple sur l'ID de magasin.
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)
);
Drop partition
ALTER TABLE table_name DROP PARTITION partition_name;
Sélectionnez les données d'une partition
Sélectionnez les données d'une partition
SELECT * FROM orders PARTITION(partition_name);
Tronquer une partition
ALTER TABLE table_name TRUNCATE PARTITION partition_name;
Renommer une partition
ALTER TABLE table_name RENAME PARTITION p3 TO p6;
Déplacer la partition vers un autre tablespace
ALTER TABLE table_name
MOVE PARTITION partition_name TABLESPACE tablespace_name;
Ajouter une nouvelle partition
ALTER TABLE table_name
ADD PARTITION new_partition VALUES LESS THAN(400);
Partition fractionnée
Divise une partition en deux partitions avec une autre limite haute.
ALTER TABLE table_name SPLIT PARTITION old_partition
AT (new_high_bound) INTO (PARTITION new_partition TABLESPACE new_tablespace,
PARTITION old_partition)
Fusionner les partitions
Fusionner deux partitions en une seule
ALTER TABLE table_name
MERGE PARTITIONS first_partition, second_partition
INTO PARTITION splitted_partition TABLESPACE new_tablespace
Echanger une partition
Échangez / convertissez une partition en une table non partitionnée et inversement. Cela facilite un "déplacement" rapide des données entre les segments de données (par opposition à faire quelque chose comme "insert ... select" ou "create table ... as select") car l'opération est DDL (l'opération d'échange de partition est une donnée). mise à jour du dictionnaire sans déplacer les données réelles) et non DML (grande surcharge d'annulation / restauration).
Exemples les plus élémentaires:
- Convertir une table non partitionnée (table "B") en une partition (de la table "A"):
La table "A" ne contient pas de données dans la partition "OLD_VALUES" et la table "B" contient des données
ALTER TABLE "A" EXCHANGE PARTITION "OLD_VALUES" WITH TABLE "B";
Résultat: les données sont "déplacées" de la table "B" (ne contient pas de données après l'opération) pour partitionner "OLD_VALUES"
- Convertir une partition en une table non partitionnée:
La table "A" contient des données dans la partition "OLD_VALUES" et la table "B" ne contient pas de données
ALTER TABLE "A" EXCHANGE PARTITION "OLD_VALUES" WITH TABLE "B";
Résultat: les données sont "déplacées" de la partition "OLD_VALUES" (ne contient pas de données après l'opération) vers la table "B"
Remarque: il existe plusieurs options, fonctionnalités et restrictions supplémentaires pour cette opération.
Plus d'informations peuvent être trouvées sur ce lien ---> " https://docs.oracle.com/cd/E11882_01/server.112/e25523/part_admin002.htm#i1107555 " (section "Échanger des partitions")