Solución de problemas con el archivo de registro de transacciones (.LDF) de la base de datos del sistema BarTender
Síntomas
Ha notado que la base de datos del sistema se ha vuelto inusualmente grande y el mantenimiento falla con el siguiente mensaje de error:
Stored procedure: [dbo].[SpDeleteOlderRecords] Failed; Inner Message: The transaction log for database 'SystemDB' is full due to 'ACTIVE_TRANSACTION'
Entorno
Base de datos del sistema BarTender
Diagnóstico
En la Consola de Administración, bajo "Tareas administrativas > Ver tamaño de la base de datos..." asegúrese de que el tamaño del archivo de registro de transacciones sea pequeño.
Normalmente, el archivo de registro de transacciones de SQL Server (.LDF) para la base de datos del sistema BarTender crece durante el mantenimiento de la base de datos, pero debería reducirse a su tamaño original una vez finalizado el mantenimiento. Sin embargo, esto no siempre ocurre y el archivo LDF comienza a crecer demasiado.
Solución
El registro de transacciones del cliente no es lo suficientemente grande para manejar toda la información de transacciones de las operaciones de mantenimiento. Las operaciones de mantenimiento constan de tres pasos:
- Respaldo
- Eliminar registros antiguos
- Reorganizar o reconstruir los índices (puede requerir mucho espacio en el registro de transacciones)
Se recomienda asignar más espacio al registro de transacciones. Además, el modelo de recuperación debe ser "Simple", ya que utiliza mucho menos espacio en el registro de transacciones.
Pasos:
- En SQL Server Management Studio, verifique cuál es el tamaño máximo de su archivo de registro de transacciones haciendo clic derecho en su base de datos del sistema > Propiedades > Archivos.
- En las propiedades de la base de datos del sistema, verifique que el modelo de recuperación de su base de datos del sistema esté configurado como Simple haciendo clic derecho en su base de datos del sistema > Propiedades > Opciones > Modelo de recuperación
- Ejecute el procedimiento de "desbloqueo manual" para desbloquear el mantenimiento, si es necesario (ver más abajo).
- Inicie la Consola de Administración para ejecutar el mantenimiento.
- Una vez que el mantenimiento haya finalizado, revise el archivo de registro de transacciones para ver cuánto ha crecido.
- Vuelva a las propiedades de la base de datos y establezca el límite de tamaño del archivo en un valor cercano al tamaño del archivo en disco, en lugar de dejarlo ilimitado.
Nota: si la base de datos del sistema necesita limpiarse semanalmente debido a los límites de tamaño de SQL Server Express, el límite de 10 GB puede no ser suficiente. El sistema de base de datos podría requerir una copia completa de SQL Server y un disco dedicado (posiblemente otra imagen de VMWare/servidor blade). Tenga en cuenta que realizar estos cambios no elimina la necesidad de realizar copias de seguridad y archivado periódicos en la base de datos.
Procedimiento de "desbloqueo manual"
- Detenga el servicio de Windows "BarTender System Service".
- Con el Explorador de objetos de SQL Server Management Studio (normalmente en el panel izquierdo), expanda su base de datos, luego vaya a la carpeta "Programabilidad" y seleccione la carpeta "Procedimientos almacenados".
- Ejecute el siguiente procedimiento (si se ven afectadas 0 filas, ejecútelo una vez más):
exec SpDsUnlockMaintenance 0
- Busque el procedimiento "SpDeleteRecords".
- Haga clic derecho en "SpDeleteRecords" y seleccione "Script stored procedure as" > "ALTER to" > "New query editor window"
- En el nuevo editor, elimine "WITH EXECUTE AS 'dbo'" de la línea "ALTER PROC", para que quede así:
ALTER PROC [dbo].[SpDeleteRecords](@pastUtcTicks bigint, @categories nvarchar(1024))
- Ahora ejecute esta consulta (normalmente con F5) para modificar el procedimiento almacenado.
- Reinicie el servicio de Windows "BarTender System Service".
Reducir el tamaño del registro
Debe ejecutar la siguiente consulta para REDUCIR el tamaño del archivo de registro de la base de datos actual después de una operación que genere una gran cantidad de espacio no utilizado, como una operación de truncado o eliminación de tabla. (En el siguiente script, deberá reemplazar [Database name] por el nombre de su base de datos)
-- Establece el modelo de recuperación de la base de datos del sistema en SIMPLE y luego ejecuta la operación DBCC SHRINKFILE sobre el registro de transacciones.
ALTER DATABASE "[Database name]" SET RECOVERY SIMPLE
DBCC SHRINKFILE ([Database name]_Log, 1);
GO
Recursos adicionales