Recherche…


Introduction

Le partitionnement est une fonctionnalité permettant de diviser des tables et des index en morceaux plus petits. Il est utilisé pour améliorer les performances et pour gérer les petites pièces individuellement. La clé de partition est une colonne ou un ensemble de colonnes définissant la partition que chaque ligne va stocker. Vue d'ensemble du partitionnement dans la documentation officielle Oracle

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:

  1. 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"

  1. 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")



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow