lunes, 30 de septiembre de 2013

Liberar espacio en disco con SQL Server

Algunas veces las bases de datos se hacen demasiado grandes y se "comen" todo el disco duro disponible, pero es fácil liberar espacio sin perder información de la Base de Datos.

Las bases de datos de SQL Server disponen de dos tipos de archivos: el de datos .mdf y el de transacciones .ldf

Este último contiene un histórico de todas las transacciones que se han hecho en la base de datos, por tanto puede hacerse muy grande y ocupar innecesariente casi todo nuestro disco duro. 

Liberar espacio en disco con SQL server


El método más fácil y sencillo que he encontrado para liberar espacio en disco utilizando SQL SERVER consiste en reducir el tamaño del archivo .ldf de algunas bases de datos que se hace demasiado grande y se “come” literalmente todo el disco duro disponible, pera dejar el .ldf en un pequeño porcentaje de lo que es, basta con ejecutar:

DBCC SHRINKDATABASE (dbNombre_BBDD, 10);
GO

Donde el 10 indica que el archivo .ldf se quedará en un 10% de lo que era inicialemtente, si tenía 10 Gb se quedará en 1 Gb, si ponemos 1 en vez de 10 lo dejaremos en un 1% de lo que era (100 Mb según el ejemplo).

El problerma de este método es que lo dicho arriba (la teoría) no es cierto, en algunas bases de datos la reducción es sustancial pero en otras apenas reduce un pequeño porcentaje.

 A través de las opciones Separar-Adjuntar  (Atach-Detach)

Otro método es utilizando la opción Separar-Adjuntar (Atach-Detach si la versión está en Inglés)
¡Ojo!  Antes de nada hacer una copia de seguridad de la base de datos.

Como apunta Belzaleel en los comentarios, conviene antes de empezar cambiar el modo de recuperación de Completo a Simple. Para ello posicionados sobre la base de datos, pulsamos botón derecho del ratón -> propiedades.


propiedades de la Base de Datos


Y en la pestaña Opciones, sobre el combo modelo de recuperación elegimos simple.


Modelo de recuperación simple

Hecho esto, sobre la base de datos saturada, pulsamos botón derecho del ratón -> tareas -> poner fuera de conexión (Detach).

Detach database

Esto deja la base de datos fuera del administrador, antes de integrarla de nuevo, tenemos que ir al equipo donde está alojada físicamente y eliminar físicamente el archivo .ldf

delete database log

Hecho esto podemos integrar de nuevo la base de datos pero eliminando el archivo .ldf.

Para ello, sobre Databases, botón derecho del ratón -> Tareas -> poner en conexión (o Attach) y elegir sólo el fichero .mdf no el .ldf  esto debería dejar a cero el archivo .log

Attach database

Y restauramos eliminando previamente el archivo .ldf para que se restauren sólo los datos y no el log.

resaturar BBDD sobre log


Esto dejará de nuevo la Base de datos disponible pero con el fichero .ldf vacío, en algunos casos esto libera muchos gigas ocupados de forma innecesaria.

Finalmente siguiendo el orden inverso a cómo se explicó más arriba, ponemos el modo  de recuperación de la base de datos de Simple otra vez a Completo.

SQL Server: Programación y Administración.

Postgrado en SQL Server 2012. Experto en Creación y Administración Profesional de Base de Datos

2 comentarios:

  1. Aqui estas arriesgando que tu BD no levante y pierdas la información, yo aconsejo que cambies el modo de recuperación de tu BD de full a simple y de simple a full y posteriormente reducir el Log, que quedara de 1MB.

    ResponderEliminar
  2. Gracias por tu aportación. Por eso digo que conviene antes de nada hacer una copia de seguridad, por si se pierde.

    ResponderEliminar