Voy a explicar como truncar (o reducir) el tamaño del (querido) fichero de transacciónes de SQL Server 2008 en adelante, es una tarea que todo administrador de SQL Server acaba teniendo que hacer pues es un fichero que en ocasiones puede llegar a crecer hasta límites insospechados y darnos más de un dolor de cabeza.

Voy a utilizar un método que está disponible a partir de la versión SQL Server 2008 pero que no es demasiado diferente en versiones anteriores, incluso en 2005 era más sencillo aún.

Vamos a utilizar una instruccion bastante famosa, se llama: “DBCC SHRINKFILE”

Para saber el fileId, el nombre lógico y el tamaño podemos lanzar la siguietne consulta:
<pre>SP_HELPFILE</pre>

sp_helpfile

He marcado en amarillo el tamaño de mi fichero de transacciones, en mi caso es bastante grande unos 17Gb, demasiado para mi.

En la columna fileid tenemos el ID del fichero que en mi caso es el ID: 2 lo identifico por su nombre y su extensión, pero si en tu caso no lo ves tan claro, tienes estas opciones para saber el ID y el nombre lógico.

Para saber el ID del fichero a partir de su tipo, podemos lanzar la siguiente consulta:

USE TU_BASE_DE_DATOS
SELECT file_id,type_desc  FROM sys.database_files WHERE type_desc = 'LOG'

Obtendremos una salida parecida a la siguiente:

Id_fichero_sql_server

En mi caso el ID del fichero es el 2, para saber el nombre lógico, ahora lanzamos la siguiente consulta:

SELECT name FROM sys.sysfiles WHERE fileid=2

nos saldrá su nombre lógico, en mi caso usaré: “miDB_Log”

Ya tenemos los dos datos necesarios para utilizar DBCC SHRINKFILE, si lo lanzamos directamente veremos que no reduce nuestro fichero, por lo que primero tenemos que hacer un BACKUP del fichero de log (que luego borraremos) para eso lanzamos el siguiente comando:

 BACKUP LOG [TU_BASE_DE_DATOS] TO DISK = 'c:\CARPETA\BackUP_BORRAR_Log.bak'
 GO

y si todo ha ido bien, lanzamos ahora si el DBCC SHRINKFILE, en mi caso lo quiero reducir todo lo posible asique lo voy a dejar en 100 Mb, lanzamos el siguiente comando:

DBCC SHRINKFILE (2, 100)
GO

Podríamos lanzar los dos a la vez y dejar el proceso realizandose por la noche pero yo prefiero lanzarlos por separado por si hubiese algún problema o al hacer la copia queramos cancelar la operación.

Espero vuestros comentarios/dudas/sugerencias!!!

C’est voila!!