Skip to main content

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> 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".

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;