Oracle
 sql >> Base de données >  >> RDS >> Oracle

Table partitionnée Oracle

Qu'est-ce qu'une table partitionnée Oracle ?

Le partitionnement divise une table, un index ou une table organisée en index en composants plus petits. Chaque composant est appelé partition (ou sous-partition pour les objets partitionnés composites). Chaque partition a un nom unique et peut éventuellement avoir des caractéristiques de stockage individuelles :par exemple, la compression ou le stockage dans différents espaces de table. Une stratégie de partitionnement bien conçue peut améliorer l'accès aux requêtes et les mises à jour en limitant l'opération à une seule partition ou à un sous-ensemble de partitions.

Partitionnement pour la performance - Élagage de partition

La fonction de table partitionnée d'Oracle permet à l'optimiseur de requête d'ignorer les partitions qui ne sont pas requises par une instruction SQL particulière. En fonction de l'instruction SQL, l'optimiseur peut identifier les partitions et sous-partitions auxquelles il est nécessaire d'accéder, ainsi que celles qui ne le sont pas. Cela peut entraîner des améliorations substantielles des performances des requêtes, car l'optimiseur se concentre sur un sous-ensemble spécifique de données qui peut être affiné davantage si des prédicats supplémentaires existent.

L'optimiseur le fait en utilisant les informations de partition stockées dans le dictionnaire de données pour identifier le contenu d'une partition sans interroger les données qu'elle contient. Le partitionnement est une couche supplémentaire du dictionnaire de données entre les tables/index et les tablespaces

Limitation de la table partitionnée

Dans Oracle Database 11g, une table peut avoir un maximum de 1048575 (1024K – 1) partitions. A la seule exception des tables contenant des colonnes de type LONG ou LONG RAW, toutes les tables peuvent être partitionnées (y compris les colonnes de type CLOB ou BLOB).

Type de partitions de table

Le partitionnement est disponible dans la base de données Oracle à partir de la version 8.0 et Oracle ajoute continuellement de plus en plus de fonctionnalités à chaque version. Le tableau suivant présente un résumé des principaux changements

La principale stratégie de partition donnée par Oracle est
(1)Range
(2)List
(3) Hash
(4)Composite

Comment créer la table de partition

Selon les types de Partition, voici comment créer la table de partition

Partitionnement de plage

Oracle partitionne les données en fonction de plages de valeurs consécutives de la clé de partition.
Le point de terminaison de chaque partition est spécifié à l'aide de la syntaxe suivante :

VALUES LESS THAN (value-list)

Exemple

CREATE TABLE EXP_RANGE
 (ID NUMBER(15) NOT NULL,
 CODE_ID NUMBER(15) NOT NULL,
 PERIOD_NAME VARCHAR2(15) NOT NULL,
 ACTUAL_FLAG VARCHAR2(1) NOT NULL,
 VERSION_ID NUMBER(15),
 LAST_UPDATE_DATE DATE NOT NULL,
 . . . . . .
 )
 PARTITION BY RANGE (PERIOD_NAME)
 (
 PARTITION PR1 VALUES LESS THAN ('JAN-2019'),
 PARTITION PR2 VALUES LESS THAN ('FEB-2019')
 . . .
 . . .
 );

Le partitionnement de plage est utile pour partitionner les données historiques et de transaction, car les limites de la partition de plage définissent l'ordre de partition dans les tables et les index

Partitionnement de liste

Dans cette méthode, Oracle mappe des lignes spécifiques sur des partitions, en fonction d'une liste statique de valeurs littérales. La clé de partition pour le partitionnement de liste ne peut être basée que sur une seule colonne.

CREATE TABLE EXP_LIST
 (ID NUMBER NOT NULL,
 ORG_ID NUMBER,
 OPEN_FLAG VARCHAR2(4) NOT NULL,
 . . . . . .
 ) PARTITION BY LIST (open_flag)
 (
 PARTITION PR1 VALUES ('YES'),
 PARTITION PR2 VALUES ('NO')
 );

Partitionnement par hachage

Dans cet oracle utilisé l'algorithme de hachage pour décider du placement physique des données. Le partitionnement par hachage répartira les données uniformément sur un nombre fixe de partitions.

CREATE TABLE EXP_HASH
 (ID NUMBER NOT NULL,
 ORG_ID NUMBER,
 ORDERED_ITEM VARCHAR2(2000),
 OPEN_FLAG VARCHAR2(1) NOT NULL,
 . . . . . .
 )
 PARTITION BY HASH (ID)
 PARTITIONS 10
 . . .
 . . .;
 );

Partitionnement composite

Dans cet oracle, la combinaison de partitionnement par plage, liste et hachage est utilisée. Les méthodes de partitionnement composites sont plage-hachage ou plage-liste.

CREATE TABLE sales_details
   ( prod_id       NUMBER(6)
   , cust_id       NUMBER
   , time_id       DATE
   , channel_id    VARCHAR2(1)
   , promo_id      NUMBER(6)
   , quantity_sold NUMBER(3)
   , amount_sold   NUMBER(10,2)
   )
  PARTITION BY RANGE (time_id) SUBPARTITION BY HASH (cust_id)
   SUBPARTITIONS 8 STORE IN (ts1, ts2, ts3, ts4)
  ( PARTITION sales_q1_2019 VALUES LESS THAN (TO_DATE('01-APR-2019','dd-MON-yyyy'))
  , PARTITION sales_q2_2019 VALUES LESS THAN (TO_DATE('01-JUL-2019','dd-MON-yyyy'))
  , PARTITION sales_q3_2019 VALUES LESS THAN (TO_DATE('01-OCT-2019','dd-MON-yyyy'))
  , PARTITION sales_q4_2019 VALUES LESS THAN (TO_DATE('01-JAN-2019','dd-MON-yyyy'))
  );

Comment déplacer l'objet existant vers un objet partitionné

Il existe de nombreuses façons de réaliser cet exploit. J'explique ici la méthode simpliste
1.Créez une table partitionnée vide en utilisant la clause partitionnée et avec l'option parallèle. Le nom de la table doit avoir un nom différent de celui de la table non partitionnée.
2.Renseignez les données pour la partition requise à partir de la table non partitionnée.
3. Envisagez d'utiliser l'indicateur oracle APPEND avec une instruction INSERT comme un changement de code facile qui offre de bonnes performances. Si la journalisation est activée et que des index sont présents, l'indicateur INSERT /*+ APPEND */ peut ne pas être efficace. Pour minimiser la charge de maintenance des index, supprimez les index avant la migration et recréez-les une fois la table partitionnée remplie.
4.Renommez la table partitionnée de la même manière que la table d'origine ou modifiez le synonyme.
5. Construire des index de table pour la table partitionnée

Lit également
Index de partition Oracle
Requête parallèle Oracle
https://docs.oracle.com/cd/B28359_01/server.111/b32024/partition.htm