Example move table

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Exemple DDL Oracle
Contexte Déplacement d'une table vers un autre tablespace
Voir aussi Example create tablespace · Example drop unused column

ALTER TABLE ... MOVE TABLESPACE déplace physiquement les données d'une table vers un autre tablespace, par exemple pour rééquilibrer l'espace disque, changer de type de gestion de tablespace, ou défragmenter une table après de nombreuses suppressions.

Script

ALTER TABLE emp MOVE TABLESPACE users2 STORAGE (INITIAL 10M NEXT 1M);

Points de vigilance

  • Les index deviennent UNUSABLE après un MOVE : le ROWID des
 lignes change, ce qui invalide les entrées d'index existantes. Il faut les reconstruire
 ensuite :
ALTER INDEX emp_pk REBUILD;
-- ou, pour reconstruire tous les index d'un coup :
-- SELECT 'ALTER INDEX ' || index_name || ' REBUILD;'
-- FROM user_indexes WHERE table_name = 'EMP';
  • La table reste verrouillée en écriture pendant l'opération (DML bloqués, lectures
 généralement possibles) — à planifier en fenêtre de maintenance sur une table volumineuse.
 Sur les éditions/versions le permettant, ONLINE réduit cette indisponibilité :
ALTER TABLE emp MOVE TABLESPACE users2 ONLINE;
  • Une table partitionnée se déplace partition par partition (voir
 Example partition range date oracle 8) :
ALTER TABLE emp_date_part MOVE PARTITION emp_date_part_q1_2001_part TABLESPACE users2;

Voir aussi