transaction transacciones the reducir muy log_backup log limpiar grande full for due archivo sql-server tsql

sql server - the - ¿Cómo puedo obtener el tamaño del Registro de transacciones en SQL 2005 mediante programación?



the transaction log for database is full due to ''log_backup'' (6)

Usé tu código pero se produjo un error al convertir a un int. "Msg 8115, nivel 16, estado 2, línea 1 Error de desbordamiento aritmético que convierte la expresión a tipo de datos int". Entonces, donde sea que haya un "* 8" lo cambié a * 8.0 y el código funciona perfectamente.

SELECT (size * 8.0)/1024.0 AS size_in_mb , CASE WHEN max_size = -1 THEN 9999999 -- Unlimited growth, so handle this how you want ELSE (max_size * 8.0)/1024.0 END AS max_size_in_mb FROM YOURDBNAMEHERE.sys.database_files WHERE data_space_id = 0

Estamos trabajando con un tamaño de registro de transacciones fijo en nuestras bases de datos, y me gustaría armar una aplicación para monitorear los tamaños de registro para que podamos ver cuándo las cosas se están poniendo demasiado apretadas y necesitamos hacer crecer el registro de trn fijo.

¿Hay algún comando TSQL que pueda ejecutar, que me dirá el tamaño actual del registro de transacciones y el límite fijo del registro de transacciones?


Esto está fuera de mi cabeza, por lo que es posible que quieras verificar los cálculos matemáticos ...

SELECT (size * 8)/1024.0 AS size_in_mb, CASE WHEN max_size = -1 THEN 9999999 -- Unlimited growth, so handle this how you want ELSE (max_size * 8)/1024.0 END AS max_size_in_mb FROM MyDB.sys.database_files WHERE data_space_id = 0 -- Log file

Puede obtener más de esa vista del sistema, como el incremento de crecimiento, si el registro está configurado para crecimiento automático y si está configurado para crecer en una cantidad específica o en un porcentaje.

HTH!


Una rápida búsqueda en google reveló esto:

DBCC SQLPERF ( LOGSPACE )

¿Por qué no estás usando auto crecimiento en el registro de transacciones? Parece que esta sería una solución más confiable.


Si realmente necesita atenerse a un registro de transacciones de tamaño fijo, le sugiero que lo ajuste a un tamaño razonable, permitiendo cierto margen, y luego realice uno de los siguientes dos:

  • Establezca el modo de recuperación de la base de datos en SIMPLE, si no necesita recuperación puntual. En palabras simples, permitirá que el registro de transacciones "auto-recicle" el espacio.

O

  • Si debe mantener el modo de recuperación en FULL, programe un trabajo que realice una copia de seguridad del registro de transacciones. Esto liberará espacio en el registro de transacciones y también le permitirá hacer recuperación puntual, si es necesario.

Además, tal vez pueda encontrar útil el siguiente artículo: Cómo detener el registro de transacciones de una base de datos de SQL Server crece inesperadamente .


El uso de sys.database_files solo le proporciona el tamaño del archivo de registro y no el tamaño del registro dentro de él. Esto no es de mucha utilidad si su archivo tiene un tamaño fijo de todos modos. DBCC SQLPERF (LOGSPACE) es un poco viejo, pero funciona bien si necesita soportar versiones anteriores de SQL Server.

En su lugar, puede usar la tabla dm_os_performance_counters de la siguiente manera:

SELECT RTRIM(instance_name) [database], cntr_value log_size_kb FROM sys.dm_os_performance_counters WHERE object_name = ''SQLServer:Databases'' AND counter_name = ''Log File(s) Used Size (KB)'' AND instance_name <> ''_Total''


Para SQL 2008 y FILEPROPERTY posteriores, FILEPROPERTY también expone la cantidad de espacio utilizado en un archivo y es mucho menos complicado que todas las otras respuestas:

select [Name], physical_name [Path], CAST(size AS BIGINT)*8192 [TotalBytes], CAST(FILEPROPERTY(name,''SpaceUsed'') AS BIGINT)*8192 [UsedBytes], (case when max_size<0 then -1 else CAST(max_size AS BIGINT)*8192 end) [MaxBytes] from sys.database_files