Compactado de tablas para reducir datafiles (Oracle)

Seguro que en más de una ocasión hemos eliminado registros de una tabla en grandes cantidades, quizás millones. Una vez hecho esto lo esperable sería una reducción del espacio ocupado en el tablespaces, pero esto no es así, las extensiones siguen existiendo pero libres para el uso de la tabla en cuestión, no las puede usar otra tabla.

Una vez eliminados los millones de registros, se ha de compactar la tabla para devolver espacio libre al tablespace, una vez hecho esto incluso podemos reducir el tamaño de los datafiles sin encontrarnos con la limitación  impuesta por el HIGH WATER MARK (tamaño máximo alcanzado  por los objetos dentro de un datafile).

Supongamos la tabla:

Source   
scott.test

Hay que hacer dos cosas para compactar la tabla y devolver el espacio libre: activar el movimiento de rows y la compactación/contracción de la tabla.

Source   
ALTER TABLE scott.test ENABLE ROW MOVEMENT;
ALTER TABLE scott.test SHRINK SPACE;

Un detalle importante a tener en cuenta es que luego hay que reconstruir todos los índices de la tabla con:

Source   
ALTER INDEX  scott.idx1_test REBUILD;

Este último paso es importantísimo, depués de una compactación de la tabla los rowid han cambiar, piensa que un rowid es la descripción física de donde está el registro en cuestión y los índices almacenan rowids.

4 thoughts on “Compactado de tablas para reducir datafiles (Oracle)

    • Si añades la La palabra clave COMPACT, realmente Oracle realiza menos operaciones. El compactado se produce pero lo que no se realiza es la modificación en el high water mark de la tabla, vamos que a efectos prácticos la tabla sigue ocupando lo que ocupada.

      COMPACT está pensado para realizar el compactado de dos pasos:
      1-ALTER TABLE scott.test SHRINK SPACE COMPACT; –solo compactación
      2-ALTER TABLE scott.test SHRINK SPACE; –compactación, que sería muy rápida porque ya está, y reducción del high water mark.

      Este es el link de la documentación:
      http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_3001.htm#i2192484

  1. Hola buenas tardes, despues de realizar esto, yo necesito reducir espacio en disco, y entregar a sistema operativo el espacio liberado, esto como lo realizo????

Deja un comentario