Example drop unused column
Aller à la navigation
Aller à la recherche
| Fiche express | |
|---|---|
| Type | Exemple DDL Oracle |
| Contexte | Suppression de colonne en deux temps (SET UNUSED puis DROP) |
| Voir aussi | Example create table · Example move table |
Supprimer une colonne d'une grosse table avec ALTER TABLE ... DROP COLUMN
directement peut être long et bloquant, car Oracle doit réécrire physiquement tous les blocs
de la table. La technique en deux temps évite ce problème :
SET UNUSED COLUMNmarque la colonne comme inutilisée immédiatement
(opération rapide, quasi instantanée) : elle disparaît des requêtes
(SELECT *, dictionnaire de données) et devient inaccessible, mais reste
physiquement présente dans les blocs.
DROP UNUSED COLUMNSeffectue ensuite la réécriture physique — l'opération
lourde peut ainsi être planifiée séparément (fenêtre de maintenance), sans bloquer les accès entre les deux étapes.
La vue DBA_UNUSED_COL_TABS liste toutes les tables du schéma courant (ou de la
base, selon les privilèges) comportant au moins une colonne marquée inutilisée mais pas encore
physiquement supprimée — utile pour vérifier qu'aucune purge n'a été oubliée.
Script
CONNECT scott/tiger
SET SERVEROUTPUT ON
-- Table de test
DROP TABLE d_table
/
CREATE TABLE d_table (
id_no NUMBER
, name VARCHAR2(100)
, d_column VARCHAR2(100)
)
/
-- Étape 1 : marquer la colonne comme inutilisée (rapide, non bloquant)
ALTER TABLE d_table SET UNUSED COLUMN d_column;
-- Lister les tables ayant des colonnes marquées inutilisées mais pas encore purgées
SELECT * FROM dba_unused_col_tabs;
-- Étape 2 : purge physique de la/des colonne(s) marquée(s) inutilisée(s)
ALTER TABLE d_table DROP UNUSED COLUMNS;
Variantes
Suppression directe (sans passer par SET UNUSED) — à réserver aux petites tables
ou aux environnements où l'indisponibilité n'est pas un problème :
ALTER TABLE d_table DROP COLUMN d_column;
Options supplémentaires disponibles sur DROP COLUMN comme sur
DROP UNUSED COLUMNS :
-- Supprime aussi les contraintes référençant la colonne (clé étrangère notamment)
ALTER TABLE d_table DROP COLUMN d_column CASCADE CONSTRAINTS;
-- Invalide les vues/synonymes dépendants au lieu d'échouer
ALTER TABLE d_table DROP COLUMN d_column INVALIDATE;
-- Valide (commit) tous les 1000 lignes traitées, pour limiter la volumétrie undo/redo
-- sur une très grosse table
ALTER TABLE d_table DROP COLUMN d_column CHECKPOINT 1000;
Voir aussi
- Example create table — création de table classique, pour comparaison
- Example move table — autre opération de maintenance DDL en ligne (déplacement de tablespace)