Tablespace UNDOTB – Reducir tamaño
En ocasiones, vemos que el tablespace UNDOTB ha crecido mucho y lo queremos hacer más pequeño para reclamar ese espacio.
La forma más sencilla de hacerlo es borrándolo y creándolo de nuevo.Para ver qué tablespace UNDO estamos usando en nuestra base de datos y cuánto ocupa, podemos realizar la siguiente consulta:
SQL> SELECT file_name, tablespace_name, bytes/1024/1024 UNDO_SIZE_MB, SUM(bytes/1024/1024) OVER() TOTAL_UNDO_SIZE_MB
FROM dba_data_files d WHERE EXISTS
(SELECT 1 FROM v$parameter p WHERE LOWER (p.name)='undo_tablespace' AND p.value=d.tablespace_name);
FILE_NAME TABLESPACE_NAME UNDO_SIZE_MB TOTAL_UNDO_SIZE_MB
------------------------------ --------------- ------------ ------------------
/database/dba11g/undotbs01.dbf UNDOTBS1 600 600
Antes de borrar el tablespace UNDO, deberemos crear el nuevo. La forma de crearlo es la siguiente:
CREATE UNDO TABLESPACE undotbs2 DATAFILE '/database/dba11g/undotbs02.dbf' SIZE 300M AUTOEXTEND ON NEXT 1M;
En este caso hemos creado un nuevo tablespace de 300M
Una vez creado, establecemos este tablespace para la base de datos.
ALTER SYSTEM SET UNDO_TABLESPACE=undotbs2;
Una vez realizado esto, podemos comprobar si lo hemos realizado bien, lanzando de nuevo la select
SQL> SELECT file_name, tablespace_name, bytes/1024/1024 UNDO_SIZE_MB, SUM(bytes/1024/1024) OVER() TOTAL_UNDO_SIZE_MB
FROM dba_data_files d
WHERE EXISTS (SELECT 1 FROM v$parameter p WHERE LOWER (p.name)='undo_tablespace' AND p.value=d.tablespace_name);
FILE_NAME TABLESPACE_NAME UNDO_SIZE_MB TOTAL_UNDO_SIZE_MB
------------------------------ --------------- ------------ ------------------
/database/dba11g/undotbs02.dbf UNDOTBS2 300 300
Ahora, ya podemos borrar el tablespace UNDO antiguo. Lo hacemos de la siguiente forma:
SQL> DROP TABLESPACE undotbs1 INCLUDING CONTENTS AND DATAFILES;
Nota: Las operaciones fashbackup necesitan tener establecida la variable UNDO_RETENTION para poder funcionar correctamente. En este caso podriamos establecerlo de la siguiente forma
Si queremos modificar el parámetro de UNDO_RETENTION, lo podemos hacer con la siguiente sentencia. En este caso, lo modificamos a 900
ALTER SYSTEM SET UNDO_RETENTION = 900 scope=both;
SQL> show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS2