2012-02-25 44 views
20

Recibo un error de seguimiento mientras trato de eliminar 355447 registros en una única consulta de eliminación.El registro de transacciones para la base de datos está lleno. Para averiguar por qué no se puede reutilizar el espacio en el registro, consulte la columna log_reuse_wait_desc en sys.databases

El registro de transacciones para la base de datos está lleno. Para averiguar por qué no se puede reutilizar el espacio en el registro, consulte la columna log_reuse_wait_desc en sys.databases

Intenté foll. solución, pero aún así eliminar la declaración lanzando el mismo error.

DBCC SHRINKFILE(DBname_Log, 2) 
BACKUP LOG gis_sync WITH TRUNCATE_ONLY 
DBCC SHRINKFILE(DBname_Log, 2) 

favor me ayuda a resolver .... Gracias

+3

El error le indica que mire la columna 'log_reuse_wait_desc'. ¿Qué había allí? –

+1

El mensaje de error te dice exactamente qué hacer. ¿Lo has leído realmente? – usr

+1

En mi caso, dice 'LOG_BACKUP' allí. ¿Que debería hacer? – Azimuth

Respuesta

11

Como dijo Damien, usted debe averiguar la razón por la que su registro está creciendo. Consulte esta publicación para obtener una explicación: Transaction Log Reuse Wait

Eliminar muchos registros requerirá un espacio de registro significativo en sí mismo, por lo que si no puede dejar más espacio para el archivo de registro, es posible que tenga que eliminar esas filas en varios pasos. Si está utilizando la recuperación "completa", tendrá que realizar una copia de seguridad de registro después de cada paso.

En una nota aparte, BACKUP LOG ... WITH TRUNCATE_ONLY es en general una muy mala idea. Si está en modo de recuperación completa, esto le romperá la cadena de respaldo y le impedirá realizar una restauración puntual. Si no necesita recuperación de punto en el tiempo, use la configuración de recuperación "simple" en su lugar. De lo contrario, tome una copia de seguridad de registro real y guárdela junto con otros archivos de respaldo.

DBCC SHRINKFILE en un archivo de registro no ayuda en modo alguno a la base de datos que está reduciendo. Puede usarlo para hacer espacio para otros DB en el disco, pero no dejará espacio para la base de datos actual, ya que solo puede eliminar espacio reutilizable. Eso significa que cualquier espacio liberado por él podría haber sido utilizado para su transacción de todos modos.

25

Como acotación al margen, siempre es una buena práctica (y, posiblemente, una solución para este tipo de problema) para eliminar un gran número de filas mediante el uso de lotes:

WHILE EXISTS (SELECT 1 
       FROM YourTable 
       WHERE <yourCondition>) 
    DELETE TOP(10000) FROM YourTable 
    WHERE <yourCondition> 
+1

¡Gracias! Esto me ayudó a controlar mi base de datos de WUG. Mi tabla de errores/descartes es la que sacrifiqué: necesito un mes de ping y monitoreo de utilización de interfaz, pero solo una semana o 2 de errores/descartes. Mi "YourTable" es "dbo.StatisticalInterfaceErrorsAndDiscards" y mi "" es dPollTime <'01 -31-2015 '"(actualizando esa fecha hace 2 semanas). Ejecuto esto semanalmente. Funciona muy bien. – Smithers

+2

Este es el Por lo que a mí concierne, la respuesta principal es – DaBlue

8

también estaba enfrentando el mismo problema La conclusión que obtuve es que Esta excepción se produce cuando el disco en el que está el archivo de la base de datos está lleno. Para resolver este problema, simplemente aumento el tamaño del disco.

+0

¿Cómo se aumenta exactamente el tamaño del disco? La mayoría de las personas no usan VM para sus servidores de base de datos! – AaA

+1

Tuve el mismo problema. Aumentar el tamaño del disco funcionó. También hice un operación de 'contracción' en los registros, esto me dio un extra de 85 GB. – Oak

Cuestiones relacionadas