Example partition range date oracle 8
| Fiche express | |
|---|---|
| Type | Exemple DDL Oracle |
| Contexte | Partitionnement par intervalle de dates (RANGE), disponible depuis Oracle8 |
| Voir aussi | Example create table · Example create tablespace |
Le partitionnement RANGE (le seul type de partitionnement disponible en Oracle8 — les
partitionnements LIST et HASH sont apparus respectivement en 9i et
8i) découpe une table en segments physiques distincts selon la plage de valeurs d'une colonne,
typiquement une date. Chaque partition peut résider dans un tablespace différent, ce qui permet
par exemple de répartir la charge disque par trimestre ou de basculer les partitions anciennes
sur un stockage moins coûteux.
Intérêt pour une table datée
- Maintenance ciblée : purger, réorganiser ou déplacer (voir Example move table)
les données d'un seul trimestre sans toucher au reste de la table.
- Élagage de partitions (partition pruning) : une requête filtrant sur la colonne de
partitionnement (ici hire_date) ne lit que les partitions concernées, pas la
table entière.
- Ajout de nouvelles périodes au fil du temps via
ALTER TABLE ... ADD PARTITION,
sans reconstruire la table.
La clause VALUES LESS THAN définit la borne haute exclusive de chaque
partition ; en Oracle8, seules les fonctions TO_DATE et RPAD y sont
autorisées.
Script
CONNECT scott/tiger
-- Nettoyage préalable (idempotence du script)
DROP TABLE emp_date_part CASCADE CONSTRAINTS
/
-- Table partitionnée par plage de dates (une partition par trimestre 2001),
-- chaque partition dans son propre tablespace
CREATE TABLE emp_date_part (
empno NUMBER(15) NOT NULL
, ename VARCHAR2(100)
, sal NUMBER(7,2)
, hire_date DATE NOT NULL
)
TABLESPACE users
STORAGE (
INITIAL 128K
NEXT 128K
PCTINCREASE 0
MAXEXTENTS UNLIMITED
)
PARTITION BY RANGE (hire_date) (
PARTITION emp_date_part_q1_2001_part
VALUES LESS THAN (TO_DATE('01-APR-2001', 'DD-MON-YYYY'))
TABLESPACE part_1_data_tbs
, PARTITION emp_date_part_q2_2001_part
VALUES LESS THAN (TO_DATE('01-JUL-2001', 'DD-MON-YYYY'))
TABLESPACE part_2_data_tbs
, PARTITION emp_date_part_q3_2001_part
VALUES LESS THAN (TO_DATE('01-OCT-2001', 'DD-MON-YYYY'))
TABLESPACE part_3_data_tbs
, PARTITION emp_date_part_q4_2001_part
VALUES LESS THAN (TO_DATE('01-JAN-2002', 'DD-MON-YYYY'))
TABLESPACE part_4_data_tbs
)
/
Les tablespaces part_1_data_tbs à part_4_data_tbs doivent exister au
préalable (voir Example create tablespace) ; une table non partitionnée classique n'utilise
qu'un seul tablespace, indiqué juste après la liste de colonnes.
Maintenance courante
Ajouter une nouvelle partition pour un trimestre suivant :
ALTER TABLE emp_date_part
ADD PARTITION emp_date_part_q1_2002_part
VALUES LESS THAN (TO_DATE('01-APR-2002', 'DD-MON-YYYY'))
TABLESPACE part_1_data_tbs;
Purger une partition devenue obsolète (plus rapide qu'un DELETE — pas de génération
de undo ligne par ligne) :
ALTER TABLE emp_date_part DROP PARTITION emp_date_part_q1_2001_part;
Voir aussi
- Example create table — création de table non partitionnée, pour comparaison
- Example create tablespace — création des tablespaces utilisés par les partitions
- Example move table — déplacement d'une partition existante vers un autre tablespace