Liberar espacio en tu base de datos Oracle 12c, es clave al momento de evaluar la administración de una base de datos para garantizar rendimiento, por esto desde DBA Experts te brindamos un paso a paso sencillo para que, de la mano con las buenas prácticas, liberes el espacio que necesitas.
Análisis previo a liberar espacio en tu base de datos Oracle 12c
Es fundamental asegurarse al 100% de que la tabla puede eliminarse sin afectar procesos críticos. En caso de duda, se recomienda generar un backup de la tabla o del esquema completo. Además, se deben tener identificados los siguientes elementos previos:
- Un usuario con privilegios de administración (ej. DBA).
- El nombre de la tabla a eliminar.
- El esquema al que pertenece la tabla.
- El tablespace que utiliza la tabla.
- La ubicación de los datafiles en el sistema operativo (filesystem).
- El espacio ocupado actualmente por la tabla en la base de datos.
Nota: El espacio ocupado por la tabla dentro de la base de datos no necesariamente coincide con el espacio que puede liberarse a nivel del sistema operativo. Esto dependerá de la High Water Mark (Este concepto se explica en el blog Libera el espacio en tu base de datos Oracle 12c).
Depuración de la tabla
Existen dos formas de eliminar datos/objetos según el requerimiento:
1. Eliminar únicamente los datos, conservando la estructura de la tabla
TRUNCATE TABLE ESQUEMA.NOMBRE_TABLA;

PURGE DBA_RECYCLEBIN;

Con esto se borran los registros y se limpia la papelera de reciclaje para liberar espacio dentro de la base de datos.
2. Eliminar la tabla completamente
DROP TABLE ESQUEMA.NOMBRE_TABLA PURGE;

Se utiliza cuando la tabla no se volverá a requerir. El uso de PURGE evita que quede en la papelera de reciclaje.
Marca de Agua Alta (HWM)
La High Water Mark indica hasta qué bloque dentro del datafile se han usado. Solo el espacio después de la HWM puede devolverse al sistema operativo mediante redimensionamiento.
Para calcular la HWM y generar los comandos de resize, se puede usar el siguiente script:
WITH bs AS (
SELECT ts.tablespace_name, ts.block_size
FROM dba_tablespaces ts
WHERE ts.tablespace_name = 'NOMBRE_TABLESPACE'
),
hwm AS (
SELECT e.file_id, MAX(e.block_id + e.blocks - 1) AS hwm_block
FROM dba_extents e
WHERE e.tablespace_name = 'NOMBRE_TABLESPACE'
GROUP BY e.file_id
)
SELECT 'ALTER DATABASE DATAFILE ''' || d.file_name || ''' RESIZE ' ||
CEIL( (NVL(h.hwm_block,1) * b.block_size) / 1024 / 1024 ) || 'M;' AS resize_command
FROM dba_data_files d
JOIN bs b ON b.tablespace_name = d.tablespace_name
LEFT JOIN hwm h ON h.file_id = d.file_id
WHERE d.tablespace_name = 'NOMBRE_TABLESPACE'
ORDER BY d.file_id;

El resultado será un conjunto de instrucciones de la forma:
ALTER DATABASE DATAFILE 'ruta_datafile' RESIZE tamaño;
Estas deben ejecutarse manualmente, asegurando que el nuevo tamaño sea válido según la HWM calculada.

Verificación Final después de liberar espacio en tu base de datos Oracle 12c
Confirmamos en ser servidor, la partición correspondiente contrastando el espacio utilizado antes de la limpieza y posterior a la limpieza.
Hemos aprendido como recuperar de forma correcta y optima el espacio ocupado para su posterior aprovechamiento, esperamos que el contenido haya sido relevante. En DBAExperts ofrecemos las mejores soluciones para la administración de tus bases de datos.