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:

  1. lo entiendo .. Tengo una declaración transacción que necesita un comando ROLLBACK

0 Rollback> .. pero tengo 100 procedimientos almacenados de modo antes de hacer eso ....

  1. Mientras tanto ... ¿cómo puedo eliminar este problema ?? He tratado de contracción y he tratado backuping el Db ...

  2. 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) ...

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top