Recuperar espacio en un tablespace con datos Blob

Oracle derrocha bastante espacio de almacenamiento de disco. Al modificar o borrar registros lo lógico seria que se liberase espacio pero Oracle lo conserva para posibles futuros usos de ese mismo objeto. El principal motivo es que se prima el rendimiento, relegando la recuperación del espacio no empleado a tareas de mantenimiento.

Recuperar este espacio es sencillo para tablas normales. Probablemente la mejor manera es realiza un move tablespace de la tabla. Antiguamente estaba el par exp/imp.

El problema surge en la gestión de datos tipo BLOB que no comparten el almacenamiento en disco con el resto de los campos del registro y en caso de borrado no libera los bloques empleados pese a haber eliminado el registro. La unica solución es realizar este proceso de mantenimiento campo a campo.

Tomemos por ejemplo una tabla, T, con 3 campos y todos de tipo BLOB, (X, Y, Z). Diponemos de 2 tablespaces para realizar las tareas auxiliares LOBTEST y LOBTEST2.

Es sencillo comprobar el espacio que incialmente usado en ambos tablespaces es:

Select Sum (Bytes) / 1024 / 1024, segment_name, segment_type
From user_segments
Where tablespace_name Like 'LOBTEST%'
Group By segment_name, segment_type;
(1)

Así pues la operativa de mantenimiento es:

ALTER TABLE t MOVE LOB(x) STORE AS ( TABLESPACE lobtest2 );
ALTER TABLE t MOVE LOB(y) STORE AS ( TABLESPACE lobtest2 );
ALTER TABLE t MOVE LOB(z) STORE AS ( TABLESPACE lobtest2 );

(… suponiendo los objetos almacenados en lobtest)

Con estas instrucciones habremos recuperado el espacio libre bloqueado. Se puede comprobar el espacio consumido con la misma consulta (1). Por ultimo y dependiendo de la politica de almacenamiento quedaria devolver los objetos ya “compactados” al su tablespace original: de LOBTEST a LOBTEST2 por el mismo mecanismo descrito.

Intersante:

  • Si se dispone de suficiente espacio en el tablespace es posible reconstruir el objeto utilizando el mismo tablespaces
  • Como se puede observar, dado este consumo desmesurado de espacio es recomendable almacenarlo en tablespaces separados.
  • Desde la versión 10 existen mejores metodos de monitorización y recuperación de espacio como el “consejero de almacenamiento”. En cualquier caso estas técnicas siguen siendo operativas.
  • No se tiene en cuenta la gestión del almacenamiento con ASM
  • Deja un comentario

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