J'ai une table existante qui a 10 ans de données (j'ai pris le vidage).
Je voudrais répartir la table existante sur une colonne clé de date dans la table.
La plupart des exemples que je vois concernent CREATE TABLE..PARTITION BY RANGE...
pour ajouter de nouvelles partitions. Mais ma table est une table existante.
Je suppose que j'ai besoin d'une instruction ALTER
.
ALTER TABLE TABLE_NAME
PARTITION BY RANGE(CREATED_DATE)
PARTITION JAN16 VALUES LESS THAN (01-02-2016),
PARTITION FEB16 VALUES LESS THAN (01-03-2016) AND GREATER THAN(31-01-2016),//OR?
PARTITION MAR16 VALUES BETWEEN (01-03-2016) AND (31-03-2016), //OR?
Deux questions..
Ai-je besoin d'une instruction Alter pour ajouter un mécanisme de partitionnement ou dois-je travailler avec une instruction create?
Quelle est la syntaxe appropriée pour conserver chaque partition contenant uniquement des données UN MOIS.
Beacuse votre table non partitionnée vous avez deux options:
De plus, si vous voulez une nouvelle partition par mois, lisez la section SET INTERVAL. Par exemple:
CREATE TABLE tst
(col_date DATE)
PARTITION BY RANGE (col_date) INTERVAL (NUMTOYMINTERVAL(1, 'MONTH'))
(PARTITION col_date_min VALUES LESS THAN (TO_DATE('2010-01-01', 'YYYY-MM-DD')));
Si vous utilisez Oracle 12c Release 2
vous pouvez utiliser un seul ALTER
pour convertir une table non partitionnée en une table partitionnée (c'est un aller simple):
CREATE TABLE my_tab ( a NUMBER(38,0), b NUMBER(38,0));
ALTER TABLE MY_TAB MODIFY PARTITION BY RANGE (a) INTERVAL (1000) (
PARTITION p1 VALUES LESS THAN (1000)) ONLINE;
Vous pouvez également convertir des index en ajoutant:
update indexes (index_name [local/global]);