Liberar espacio del transactional log (Backup transactional log)


Últimamente he visto varias situaciones de clientes, en espacial clientes que no tienen un DBA en sus empresa pero que usan otros productos como Dynamics, Lync y Sharepoint teniendo log de transacciones muy grandes (en un caso una base de 10GB con un log de transacciones de 863GB), y la pregunta de todos ellos es como recuperar ese espacio o reducirlo.

En muchas ocasiones esto lleva a clientes a acciones desesperadas como lo es borrar el archivo, hacer shirnk a la base de datos, hacer shirnk al log de transacciones, etc.

Primero necesitamos ver y saber que es un log de transacciones, y veamos que nos dice la MSDN.

* "Todas las bases de datos de SQL Server tienen un registro de transacciones que registra todas las transacciones y las modificaciones que cada transacción realiza en la base de datos. El registro de transacciones se debe truncar periódicamente para evitar que se llene. Sin embargo, algunos factores pueden retrasar el truncamiento del registro, por lo que es importante supervisar el tamaño del registro. Algunas operaciones se pueden registrar mínimamente para reducir su impacto sobre el tamaño del registro de transacciones.

El registro de transacciones es un componente esencial de la base de datos y, si se produce un error del sistema, podría ser necesario para volver a poner la base de datos en un estado coherente. El registro de transacciones nunca se debe eliminar o mover, a menos que se conozcan totalmente las implicaciones de esas acciones."

Como podemos ver de acuerdo a la documentación, el borrar el log de transacciones es una pesima idea, las implicaciones de esto es principalmente inconsistencia de datos, aunque puede llevar hasta corrupción de datos.

Ahora nos mencionan que debemos de truncar el log, pero ¿como realizamos esto? si buscamos directamente en el SSMS (SQL Server Managment Studio) no veremos a simple vista esta actividad. Para poder realizar esto debemos de.

Sacar un transacional log backup, este necesita como punto de partida un full backup o un diferential backup, si no tenemos estos deben de ser sacados antes de poder hacer el log transaccional. Pero esto no nos liberara el espacio, el archivo quedara del mismo tamaño ya que no hemos liberado su espacio interno, para esto debemos hacer un shirnk de archivo (ojo archivo no base de datos) y reducir hasta un tamaño en especifico el log de transacciones.

1) Sacar el full backup o diferential backup


2) Sacamos el log transaccional 



3) Verificar que truncaremos el log


4) Reducir el tamaño del log 

Comentarios

  1. buen dia, esta actividad se puede hacer en caliente en un sql server enterprise?

    ResponderBorrar
    Respuestas
    1. Saludos, te recomiendo que te subscribas o logeas para que te lleguen las respuesta, pero claro aun la version express tendría este comportamiento, la enterprise con mayor razón.

      Claro si el log es grande posiblemente tengas un poco de impacto de IO si el log y los data files comparten la misma unidad.

      Borrar
    2. Gracias por la respuesta, feliz tarde

      Borrar

Publicar un comentario

Entradas más populares de este blog

Mover indices no clustered a un nuevo filegroup