martes, 12 de marzo de 2013

El fichero de transacciones (LDF) crece sin límite (SQL Server)

Buenos a tod@s.

Hace un tiempo llevábamos arrastrando un problema con nuestra base de datos SQL Server. Nuestro software realiza actualizaciones masivas en la base de datos y nos encontramos con que el fichero de transacciones crecía sin fin.

La primera solución que tomamos fue vaciar el fichero de transacciones y planteamos hacer una tarea programada para dicha causa. Para realizarla creamos una tarea programada dentro del SQL Server que se encargaba de ejecutar un Script como este.

USE BaseDeDatos;
GO
-- cambiamos el recovery a nodo simple
ALTER DATABASE NombreFicheroBBDD
SET RECOVERY SIMPLE;
GO
-- reducirmos el archivo log a 1 MB.
DBCC SHRINKFILE (NombreFicheroBBDD _Log, 1);
GO
-- devolvemos el nivel de recovery a full
ALTER DATABASE NombreFicheroBBDD
SET RECOVERY FULL;
GO

Con este código dejamos el fichero de transacciones vacío. Es una posible solución aunque no demasiado elegante, por lo que seguí investigando.


Pero ¿Por qué se originaba esto? ¿Dónde estaba realmente el problema?

Más tarde, descubrí que el problema se originaba al realizar las copias de seguridad de la base de datos en cuestión.

Cuando configuramos las copias de las bases de datos de SQL Server nos da dos opciones:
  • Realizar copias completas: Realiza una copia completa de la base de datos
  • Realizar copias diferenciales: solo realizan la copia de lo que ha cambiado desde la última copia completa

En nuestro caso las copia de seguridad fueron configuradas para que todos los días se realizara una copia de seguridad completa. En principio no tiene por qué implicar ningún problema, bueno pues no es del todo cierto. Si siempre realizamos una copia de seguridad completa el fichero de transacciones (LDF) no se vacía nunca y siempre acumula las transacciones.

Tras ver que el problema viene de las copias. Realice un cambio en la política de copias de seguridad realizando una completa a la semana y el resto de los días una diferencias. Y con esto el problema quedo solucionado de la forma más elegante y eficiente.



Espero que este pequeño articulo os sea de utilidad y os ahorre algún dolor de cabeza

Como siempre digo si queréis ponerlo en otro sitio, no os olvidéis de mencionarme y poner un link al blog

Muchas gracias por leerme, espero que tengáis un buen día

Saludetes a todos


Agradecimientos a http://www.helpdna.net de donde extraje la información para solucionar el problemas (exactamente del árticulo  http://www.helpdna.net/sqlserver_faq_01_reducir_log_transacciones.htm)

No hay comentarios: