Lors de l’exploitation d’une base de données dans un environnement de production, il peut arriver que l’on soit amené à modifier le tablespace UNDO utilisé par celle-ci.
Par exemple, si le tablespace a été paramétré de telle manière qu’il augmente en fonction de ses besoins et sans aucunes limite de taille (Tablespace UNDO avec option AUTOEXTEND ON); cela peut vite devenir extrêmement coûteux en termes d’espace disque sur le serveur, d’autant plus qu’il est impossible de réduire sa taille.
Il faut donc, effectuer les étapes suivantes pour permettre une libération effective de l’espace disque utilisé :
- Création d’un nouveau tablespace UNDO temporaire
- Modifier le tablespace utilisé, pour effectuer la bascule
- Suppression du tablespace obsolète
Commençons donc :
- Création un nouveau tablespace de type UNDO :
Par défaut, les datafiles se situent dans le répertoire :
1 |
$ORACLE_BASE/oradata/$ORACLE_SID |
Nous pouvons exécuter la requête suivante pour visualiser le tablespace en question :
1 2 3 |
SQL> SELECT FILE_NAME, TABLESPACE_NAME FROM dba_data_files WHERE TABLESPACE_NAME='UNDO'; |
1 2 3 |
FILE_NAME TABLESPACE_NAME ----------------------------------- ---------------------- /<répertoire>/TEST_UNDOTBS_01.dbf UNDO |
Puis, créer le tablespace d’UNDO temporaire :
1 2 |
SQL> CREATE UNDO TABLESPACE UNDO2 DATAFILE '/<répertoire>/TEST_UNDOTBS_02.dbf' SIZE 256M AUTOEXTEND OFF; |
- Effectuer le changement de tablespace utilisé par le base de données :
1 |
SQL> ALTER SYSTEM SET UNDO_TABLESPACE = UNDO2; |
- Suppression de l’ancien tablespace :
1 |
SQL> DROP TABLESPACE UNDO INCLUDING CONTENTS; |
La clause INCLUDING CONTENTS permet de supprimer le datafile du tablespace; si elle n’est pas spécifiée, le datafile (fichier TEST_UNDOTBS_01.dbf) devra être supprimé à la main, et il faudra redémarrer la base pour que l’espace alloué anciennement par le tablespace soit libéré.