"El registro de transacciones de la base de datos está lleno debido a 'LOG_BACKUP'" en un host compartido

89

Tengo un sitio web Asp.Net MVC 5 con el enfoque de código de EntityFramework en un plan de alojamiento compartido. Utiliza el WebbsitePanel de código abierto para el panel de control y su panel de SQL Server es algo limitado. Hoy, cuando quería editar la base de datos, encontré este error:

The transaction log for database 'db_name' is full due to 'LOG_BACKUP'

Busqué y encontré muchas respuestas relacionadas como esta y esta o esta, pero el problema es que sugieren ejecutar una consulta en la base de datos. Intenté correr

db.Database.ExecuteSqlCommand("ALTER DATABASE db_name SET RECOVERY SIMPLE;");

con el estudio visual (en el HomeController) pero aparece el siguiente error:

System.Data.SqlClient.SqlException: ALTER DATABASE statement not allowed within multi-statement transaction.

¿Cómo puedo solucionar mi problema? ¿Debo contactar al equipo de soporte (que es un poco pobre para mi anfitrión) o puedo resolver esto yo mismo?

Alireza Noori
fuente
Ejecute ALTER sin una transacción.
usr
@usr ¿Cómo haría eso?
Alireza Noori
Es un problema de la base de datos, reducir la base de datos podría funcionar. Pídale a un DBA que lo ayude con esto.
Shashank Chaturvedi
Debes haber abierto una transacción de alguna manera. No lo sé, tal vez EF lo haga automáticamente. Debería investigar un poco sobre EF y transacciones. O ejecute esto desde SSMS. O use ADO.NET sin procesar. Probablemente su proveedor de servicios de hosting no permitirá esa declaración de todos modos y necesita emitir copias de seguridad de registros con más frecuencia.
usr

Respuestas:

38

Llame a su empresa de alojamiento y pídales que configuren copias de seguridad de registros regulares o configure el modelo de recuperación en simple. Estoy seguro de que sabe qué informa la elección, pero seré explícito de todos modos. Configure el modelo de recuperación como completo si necesita la capacidad de restaurar a un punto arbitrario en el tiempo. De cualquier manera, la base de datos está mal configurada.

Ben Thul
fuente
Gracias. Quería hacer esto yo mismo, pero me comuniqué con ellos también y configuraron la recuperación y ejecutaron una shrinken la base de datos. Además, no necesitaba la recuperación, así que les dije que lo pusieran en SIMPLEmodo.
Alireza Noori
1
¡Esta página de MSDN explica cómo configurar el modelo de recuperación en simple!
shekhar
143

Además de la respuesta de Ben, puede probar las siguientes consultas según sus necesidades

USE {database-name};  
GO  
-- Truncate the log by changing the database recovery model to SIMPLE.  
ALTER DATABASE {database-name}
SET RECOVERY SIMPLE;  
GO  
-- Shrink the truncated log file to 1 MB.  
DBCC SHRINKFILE ({database-file-name}, 1);  
GO  
-- Reset the database recovery model.  
ALTER DATABASE {database-name}
SET RECOVERY FULL;  
GO 

Actualizar crédito @ cema-sp

Para encontrar los nombres de los archivos de la base de datos, utilice la siguiente consulta

select * from sys.database_files;
Mohit Dharmadhikari
fuente
8
Adicional: para encontrar {database-file-name}:select * from sys.database_files;
cema-sp
2
Puedo confirmar que esto funciona de maravilla. Debería ser la respuesta aceptada.
garrettendi
2
Gracias @Mohit Dharmadhikari; Intenté muchas otras cosas, incluida la asignación de más espacio en disco y el aumento del tamaño del archivo de registro, pero nada funcionó hasta que reduje primero el archivo de registro existente.
Johnny
1
Gracias, muy útil.
Obakeng Molebatsi
2
Creo que {database-file-name} equivaldría a la namecolumna, para la fila del registro, de esta consulta:select * from sys.database_files
Bob Horn
13

Ocasionalmente, cuando un disco se queda sin espacio, el mensaje "el registro de transacciones de la base de datos XXXXXXXXXX está lleno debido a 'LOG_BACKUP'" se devolverá cuando falle una instrucción SQL de actualización. Compruebe su espacio en disco :)

Hein Gous
fuente
5

Este error se produce porque el registro de transacciones se llena debido a LOG_BACKUP. Por lo tanto, no puede realizar ninguna acción en esta base de datos y, en este caso, el motor de base de datos de SQL Server generará un error 9002.

Para resolver este problema, debe hacer lo siguiente

  • Realice una copia de seguridad completa de la base de datos.
  • Reduzca el archivo de registro para reducir el tamaño del archivo físico.
  • Cree un LOG_BACKUP.
  • Cree un plan de mantenimiento LOG_BACKUP para realizar copias de seguridad de los registros con frecuencia.

Escribí un artículo con todos los detalles sobre este error y cómo resolverlo en El registro de transacciones de la base de datos 'SharePoint_Config' está lleno debido a LOG_BACKUP

Mohamed
fuente
8
Publicar el mensaje de error como respuesta no es de gran ayuda. Las respuestas de solo enlace también están mal vistas en StackOverflow. Debe extraer el texto relevante del enlace y citarlo aquí. Esto es especialmente importante en caso de que el enlace muera en el futuro, como inevitablemente ocurre con todos los enlaces.
Dan Bechard
1

Recibí el mismo error pero de un trabajo de backend (trabajo de SSIS). Al verificar la configuración de crecimiento del archivo de registro de la base de datos, el archivo de registro tenía un crecimiento limitado de 1 GB. Entonces, lo que sucedió es cuando el trabajo se ejecutó y le pidió al servidor SQL que asignara más espacio de registro, pero el límite de crecimiento del registro disminuyó causó que el trabajo fallara. Modifiqué el crecimiento del registro y lo configuré para que creciera en 50 MB y Crecimiento ilimitado y el error desapareció.

Andy
fuente
1

Esto también puede suceder cuando el archivo de registro tiene un tamaño limitado.

Haga clic derecho en la base de datos en el Explorador de objetos

Seleccionar propiedades

Selecciona archivos

En la línea de registro, haga clic en los puntos suspensivos en la columna Crecimiento automático / Tamaño máximo

Cambiar / verificar que el tamaño máximo de archivo sea ilimitado.

ingrese la descripción de la imagen aquí

Después de cambiar a ilimitado, la base de datos volvió a la vida.

Roy Latham
fuente