Cómo crear un nuevo UNDO en Oracle 19c

Hola a todos, hoy mostraremos como crear un nuevo UNDO en Oracle 19c. El tablespace UNDO es parte fundamental del sistema de base de datos Oracle. Se utiliza para soportar operaciones de ROLLBACK, lectura consistente, recuperación de base de datos… No es algo común en la operación diaria que tengas que crear un UNDO. Existe varios escenarios donde tengas que recrear un nuevo UNDO, ya sea por: reorganización o mantenimiento, corrupción o errores del tablespaces UNDO, reconfiguración por mal dimensionamiento, entre otros.

Identificar el UNDO que se va a recrear

Procedemos a ejecutar la query para identificar el UNDO en la base de datos. Es importante chequear antes de cometer un error. Como podemos ver en este caso sería el UNDOTBS1 que tiene 64GB.

SQL> SELECT tablespace_name, file_name, bytes/1024/1024 AS size_mb
FROM dba_data_files
WHERE tablespace_name LIKE 'UNDO%';
TABLESPACE FILE_NAME                                                       SIZE_MB
---------- ------------------------------------------------------------ ----------
UNDOTBS1   +DATA_B2BS/B2BRC/DATAFILE/undotbs1.386.1203424905                 32767
UNDOTBS1   +DATA_B2BS/B2BRC/DATAFILE/undotbs1.430.1203428327                 32767
2 rows selected.

Crear un nuevo UNDO

Después de validar el nombre del UNDO podemos proceder a la creación del nuevo objeto. Éste no tendrá el mismo nombre y para este caso le colocaremos UNDO_NEW con AUTOEXTEND de 100M.

SQL> CREATE UNDO TABLESPACE UNDO_NEW
    DATAFILE '+DATA_B2BS'
    SIZE 1G
    AUTOEXTEND ON
    NEXT 100M
    MAXSIZE 10G;
Tablespace created.
SQL> SELECT tablespace_name, file_name, bytes/1024/1024 AS size_mb
FROM dba_data_files
WHERE tablespace_name LIKE 'UNDO%';
TABLESPACE FILE_NAME                                                       SIZE_MB
---------- ------------------------------------------------------------ ----------
UNDOTBS1   +DATA_B2BS/B2BRC/DATAFILE/undotbs1.386.1203424905                 32767
UNDOTBS1   +DATA_B2BS/B2BRC/DATAFILE/undotbs1.430.1203428327                 32767
UNDO_NEW   +DATA_B2BS/B2BRC/DATAFILE/undo_new.431.1203429519                  1024

3 rows selected.
Crear un nuevo UNDO

Cambiar el UNDO predeterminado

Luego debemos colocar el nuevo tablespace UNDO_NEW de la base de datos como predeterminado, ya que el siguiente paso es borrar el UNDO de 64GB.

SQL> SELECT name, value FROM v$parameter WHERE name = 'undo_tablespace';
NAME                           VALUE
------------------------------ ----------
undo_tablespace                UNDOTBS1
SQL> ALTER SYSTEM SET UNDO_TABLESPACE= UNDO_NEW SCOPE=BOTH;
System altered.
SQL> SELECT name, value FROM v$parameter WHERE name = 'undo_tablespace';
NAME                           VALUE
------------------------------ ----------
undo_tablespace                UNDO_NEW
SQL> SHOW PARAMETER undo_tablespace;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_tablespace                      string      UNDO_NEW

Eliminar el UNDO anterior (opcional)

Después de asegurarte de que el nuevo UNDO_NEW está en uso y sin sesiones activas, entonces podemos ejecutar el comando para eliminar el UNDO “UNDOTBS1” como muestra en la imagen.

SQL> DROP TABLESPACE UNDOTBS1 INCLUDING CONTENTS AND DATAFILES;
Tablespace dropped.
SQL> > SELECT tablespace_name, file_name, bytes/1024/1024 AS size_mb
FROM dba_data_files
WHERE tablespace_name LIKE 'UNDO%';
TABLESPACE FILE_NAME                                                       SIZE_MB
---------- ------------------------------------------------------------ ----------
UNDO_NEW   +DATA_B2BS/B2BRC/DATAFILE/undo_new.431.1203429519                  1024
1 row selected.

Si quieres mantener el mismo nombre que tenía antes el UNDO entonces deberás volver a aplicar los mismos pasos que se hicieron para dejar el antiguo nombre, es decir, “UNDOTBS1”. De esta forma quedaría mejor el nombre de UNDOTBS1, y podremos mantener un nombre adecuado al UNDO.

Recomendaciones:

  • Controla regularmente el uso de UNDO mediante vistas como v$undostat y dba_undo_extents.
  • Usa AUTOEXTEND ON para evitar errores de espacio.
  • Usa RETENTION GUARANTEE si necesitas mantener información de UNDO durante cierto tiempo (por ejemplo, para FLASHBACK).
  • Asegúrate de que no haya sesiones activas usando el UNDO antiguo antes de eliminarlo.
  • El UNDO nuevo debe tener suficiente espacio y estar configurado con AUTOEXTEND si es posible.

Esperemos que esta entrada te haya servido. Si queréis que este tipo de tareas la realicen expertos en bases de datos Oracle, no dudes en contactarnos sin compromiso. Que un problema en la base de datos no pare tu empresa.

¿Aún no conoces Query Performance? Descubre cómo puede ayudarte en tu entorno Oracle. Más información en su página de LinkedIn.

Sígue a GPS en LinkedIn

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *