viernes, 3 de agosto de 2012

Shrink Space

Hola! Se me ocurrió escribir esto, que aunque a primera vista sea muy sencillo, en alguna otra ocasión nos puede salvar... al menos tener las sentencias a mano en caso de necesitarlas.
Qué sucede cuando tenemos una tabla que pesa bastante... digamos 3, 4 o 5 Gigas o quizás no tanto... y eliminamos de un saque (via delete) un porcentaje importante de filas?... La respuesta es fácil... todo ese espacio alocado (traducción a lo indio de allocated) para ese tabla no es liberado... y sigue ocupando el mismo espacio en disco!... Bien... Cómo hacemos para liberarlo?

Sencillo:
ALTER TABLE schema.NOMBRE_TABLA enable row movement;
ALTER TABLE schema.NOMBRE_TABLA SHRINK SPACE;
ALTER TABLE schema.NOMBRE_TABLA disable row movement;
Con ésto, deberíamos poder recuperar ese espacio inutilizado... Espero haya sido de utilidad!

P.D.: si la tabla tiene índice function-based esto no nos será posible, lo que haríamos en ese caso es eliminar el o los índices, ejecutar las sentencias anteriores, y volver a crear los índices function-based .