# Remplacement/resize d'un tablespace UNDO

Par exemple : le tablespace UNDO a grossi suite à de grosses modifications lancées sur la base. On veut le réduire.

Principe : il faut d'abord créer un second tablespace UNDO2 qu'on affectera par défaut à la base, puis modifier le DEFAULT de la base, puis refaire la manipulation inverse pour recréer UNDO.

```SQL
SQL> CREATE UNDO TABLESPACE UNDO2
2 DATAFILE '/u02/oradata/TESTDB/undo2_01.dbf' SIZE 5M REUSE
3 AUTOEXTEND ON NEXT 1M MAXSIZE unlimited;

SQL> ALTER SYSTEM SET undo_tablespace=UNDO2;

SQL> DROP TABLESPACE UNDO INCLUDING CONTENTS AND DATAFILES;

SQL> CREATE UNDO TABLESPACE UNDO
2 DATAFILE '/u02/oradata/TESTDB/undo01.dbf' SIZE 500M REUSE
3 AUTOEXTEND ON NEXT 100M MAXSIZE unlimited;

SQL> ALTER SYSTEM SET undo_tablespace=UNDO;

SQL> DROP TABLESPACE UNDO2 INCLUDING CONTENTS AND DATAFILES;
```

Note : Contrairement au tablespace TEMP où il suffit de suppimer les sessions qui l'utilisent, si des transactions (sessions) utilisent le UNDO, on doit attendre que les transactions passent en "EXPIRED".

```SQL
select segment_name, sum(bytes/1024/1024) as "Taille (Mb)", status
from dba_undo_extents 
  where tablespace_name = 'UNDO'
  and status in ('ACTIVE','UNEXPIRED')
group by segment_name,status
order by 2 desc;
```