Como a muchos les a ocurrido en algunas ocasiones tenemos poco espacio en los discos duros y nuestro archivo de transacciones LOGs, creció rápidamente o no se depurado en tiempo y ya ocupas varios gigas de almacenamiento o borramos datos históricos que ya no nos sirven, y queremos liberar pero simplemente SQL Server no lo hace, pues bien en algunas ocasiones tenemos pendiente hacer un respaldo completo de la base de datos para que SQL no libere el espacio de las transacciones que estaban pendientes, en otras ocasiones solo tenemos que decirle a SQL Server que lo haga por que así lo queremos que lo haga, :)
En ese caso debemos saber por que SQL no libera el espacio, pues es simple, y es que el modelo de recuperación de la base de datos esta en modo BULK_LOGGED o FULL en cualquiera de los dos casos SQL tiene que registras todo lo que hagas en la base de datos y salvar los cambios en el archivo de transacciones, para indicarle lo contrario pero antes necesitamos saber que modelo de recuperación usa la base de datos en cuestión para después dejarla igual y eso se hace con esta consulta:
y para forzar la base datos a recuperar el espacio corremos la siguiente instrucción:
Después de eso necesitamos sacar el nombre del archivo que vamos a liberar puede ser solo el log, solo el archivo de datos o ambos solo es necesario correr una instrucción por archivo.
La instrucción para liberar el espacio es:
puedes usar shrinkdatabase para liberar el espacio de la base de dato completa(todos los archivos).
Como podemos observar el archivo que recortamos solo se quedo con el espacio necesario, es importante también saber que a dichos archivos que componen a una base de datos ya sean archivos log(ldf's) o archivos de datos(mdf's o ndf's) cuando se crean se les asignan un espacio dedicado dichos archivos no puede ser recortados a un espacio menor al asignado aunque no estén ocupando dicho espacio, si quiere también disminuir ese espacio que ocupa dicho archivos tendrás que hacerlo desde las propiedades del mismo, para después poder recortarlo a su mínima expresión.
Saludos elicxvg@ti-m.com.mx