SQL registro y transacciones activas
-
10-10-2019 - |
Pregunta
Tengo un servidor Web con SQL 2008 que ejecuta una base de datos SQL 2005 simulado, y tengo una base de datos local de SQL 2005 para probar el medio ambiente.
Esto provoca que use guiones para copia de seguridad / restauración de datos para probar que 2008 copias de seguridad del servidor no restaure a un servidor de 2005.
Cuando ejecuta esta consulta SQL para reducir el tamaño de una tabla en mi producción Web de SQL Server (2008)
DELETE FROM TickersDay
WHERE (DATEDIFF(day, TickersDay.[date], GETDATE()) >= 8)
GO
Me sale este mensaje:
Msg 9002, Level 17, State 4, Line 3
The transaction log for database 'VTNET' is full. To find out why space in the log
cannot be reused, see the log_reuse_wait_desc column in sys.databases
Se produce cuando el publico guiones también a veces.
Al ejecutar este comando SQL que sale el siguiente resultado:
SELECT [name], recovery_model_desc, log_reuse_wait_desc
FROM sys.databases
RESULTADO:
[name] recovery_model_desc log_reuse_wait_desc
VTNET SIMPLE ACTIVE_TRANSACTION
Aquí están mis preguntas y temas:
- lo entiendo .. Tengo una declaración transacción que necesita un comando ROLLBACK
-
Mientras tanto ... ¿cómo puedo eliminar este problema ?? He tratado de contracción y he tratado backuping el Db ...
-
Como se puede ver, es en el modo sencillo ... no tengo ni idea de cómo hacer copia de seguridad de un archivo de registro sólo ... (no han encontrado cómo hacerlo) ...
Solución
podría ser capaz de obtener en torno a esta cuestión al interferir SQL no para procesar toda la tabla mediante el uso del índice sólo en las fechas obligados a eliminar. Rephrase que sea amigable índice
DELETE FROM TickersDay
WHERE TickersDay.[date] <= DATEADD(day, -8, GETDATE())
GO
Si se ejecuta esta frecuencia suficiente (al menos diariamente) a continuación, sólo tiene que procesar 1 / 9th o menos a través de un índice en TickersDay ([Fecha]) en lugar de tener que pasar por toda la tabla si utiliza DATEDIFF en el ámbito.
Si que todavía hace que esto:
El registro de transacciones para la base de datos 'VTNET' está lleno
Lo que realmente necesitan para aumentar el tamaño del registro, porque sospecho que no está establecida en el crecimiento automático y no es lo suficientemente grande para esta operación. O eso, o empezar a buscar en las eliminaciones de procesamiento por lotes (de nuevo suponiendo que tiene un índice en la fecha, por lo que este se dirige de manera eficiente sólo las filas 100), por ejemplo.
DELETE TOP (100) FROM TickersDay
WHERE TickersDay.[date] <= DATEADD(day, -8, GETDATE())
GO
Puede bucle (mientras @@ recuento de filas> 0) o simplemente programar con más frecuencia como fondo goteo borrar.