Solucionar problemas de un registro de transacciones lleno (Error 9002 de SQL Server)Troubleshoot a Full Transaction Log (SQL Server Error 9002)

SE APLICA A: síSQL Server noAzure SQL Database noAzure SQL Data Warehouse noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

En este tema se tratan las posibles respuestas a un registro de transacciones lleno y se sugiere cómo evitar esta situación en el futuro.This topic discusses possible responses to a full transaction log and suggests how to avoid it in the future.

Cuando el registro de transacciones se llena, Motor de base de datos de SQL ServerSQL Server Database Engine genera un error 9002.When the transaction log becomes full, Motor de base de datos de SQL ServerSQL Server Database Engine issues a 9002 error. El registro se puede llenar cuando la base de datos está en línea o en recuperación.The log can fill when the database is online, or in recovery. Si el registro se llena cuando la base de datos está en línea, la base de datos seguirá en conexión, pero solo se puede leer y no actualizar.If the log fills while the database is online, the database remains online but can only be read, not updated. Si el registro se llena durante la recuperación, Motor de base de datosDatabase Engine marca la base de datos como RESOURCE PENDING.If the log fills during recovery, the Motor de base de datosDatabase Engine marks the database as RESOURCE PENDING. En ambos casos, es necesaria la intervención del usuario para proporcionar espacio de registro.In either case, user action is required to make log space available.

Respuesta a un registro de transacciones llenoResponding to a full transaction log

La respuesta apropiada a un registro de transacciones lleno depende en parte de la condición o condiciones que han causado que el registro se llene.The appropriate response to a full transaction log depends partly on what condition or conditions caused the log to fill.

Para descubrir qué impide el truncamiento del registro en un caso determinado, use las columnas log_reuse_wait y log_reuse_wait_desc de la vista de catálogo sys.database.To discover what is preventing log truncation in a given case, use the log_reuse_wait and log_reuse_wait_desc columns of the sys.database catalog view. Para obtener más información, vea sys.databases (Transact-SQL).For more information, see sys.databases (Transact-SQL). Para obtener la descripción de los factores que pueden retrasar el truncamiento del registro, vea Registro de transacciones (SQL Server).For descriptions of factors that can delay log truncation, see The Transaction Log (SQL Server).

IMPORTANTE:IMPORTANT!!
Si la base de datos estaba en recuperación cuando se produjo el error 9002, una vez resuelto el problema, recupere la base de datos mediante ALTER DATABASE nombre_de_base_de_datos SET ONLINE.If the database was in recovery when the 9002 error occurred, after resolving the problem, recover the database by using ALTER DATABASE database_name SET ONLINE.

Las alternativas de respuesta ante un registro de transacciones lleno incluyen:Alternatives for responding to a full transaction log include:

  • Realizar copias de seguridad del registro.Backing up the log.

  • Liberar espacio en disco para que el registro pueda crecer automáticamente.Freeing disk space so that the log can automatically grow.

  • Mover el archivo de registro a una unidad de disco con suficiente espacio.Moving the log file to a disk drive with sufficient space.

  • Aumentar el tamaño de un archivo de registro.Increasing the size of a log file.

  • Agregar un archivo de registro en un disco diferente.Adding a log file on a different disk.

  • Terminar o eliminar una transacción de larga duración.Completing or killing a long-running transaction.

Estas alternativas se describen en las secciones siguientes.These alternatives are discussed in the following sections. Elija la respuesta más apropiada para la situación.Choose a response that fits your situation best.

Crear copia de seguridad del registroBack up the log

En el modelo de recuperación completa o en el optimizado para cargas masivas de registros, si no se ha realizado recientemente ninguna copia de seguridad del registro de transacciones, puede que la copia de seguridad sea la que evita el truncamiento del registro.Under the full recovery model or bulk-logged recovery model, if the transaction log has not been backed up recently, backup might be what is preventing log truncation. Si nunca realizó una copia de seguridad del registro, debe crear dos copias de seguridad de registros para que Motor de base de datosDatabase Engine pueda truncar el registro en el punto de la última copia de seguridad.If the log has never been backed up, you must create two log backups to permit the Motor de base de datosDatabase Engine to truncate the log to the point of the last backup. El truncamiento del registro libera espacio para nuevas entradas del registro.Truncating the log frees space for new log records. Para evitar que el registro se vuelva a llenar, realice copias de seguridad con frecuencia.To keep the log from filling up again, take log backups frequently.

Para crear una copia de seguridad del registro de transaccionesTo create a transaction log backup

IMPORTANTEIMPORTANT
Si la base de datos está dañada, vea Copias del final del registro (SQL Server).If the database is damaged, see Tail-Log Backups (SQL Server).

Liberar espacio en discoFreeing disk space

Puede liberar espacio en la unidad de disco que contiene el archivo de registro de transacciones de la base de datos eliminando o desplazando otros archivos.You might be able to free disk space on the disk drive that contains the transaction log file for the database by deleting or moving other files. La liberación de espacio de disco permite que el sistema de recuperación amplíe automáticamente el archivo de registro.The freed disk space allows the recovery system to enlarge the log file automatically.

Mover el archivo de registro a otro discoMove the log file to a different disk

Si no puede liberar suficiente espacio en la unidad de disco que contiene el archivo de registro, considere la posibilidad de desplazarlo a otra unidad con suficiente espacio.If you cannot free enough disk space on the drive that currently contains the log file, consider moving the file to another drive with sufficient space.

IMPORTANTE:IMPORTANT!! Los archivos de registro no se deben almacenar en sistemas de archivo comprimidos.Log files should never be placed on compressed file systems.

Mover un archivo de registroMove a log file

Aumentar el tamaño del archivo de registroIncrease log file size

Si hay espacio disponible en el disco del registro, puede aumentar el tamaño del archivo de registro.If space is available on the log disk, you can increase the size of the log file. El tamaño máximo de los archivos de registro es de dos terabytes (TB) por cada archivo.The maximum size for log files is two terabytes (TB) per log file.

Aumentar el tamaño del archivoIncrease the file size

Si el crecimiento automático está deshabilitado, la base de datos está en línea y hay suficiente espacio en el disco, puede:If autogrow is disabled, the database is online, and sufficient space is available on the disk, either:

  • Aumentar manualmente el tamaño del archivo para producir un solo incremento de tamaño.Manually increase the file size to produce a single growth increment.

  • Habilitar el crecimiento automático utilizando la instrucción ALTER DATABASE para establecer un incremento de tamaño distinto de cero para la opción FILEGROWTH.Turn on autogrow by using the ALTER DATABASE statement to set a non-zero growth increment for the FILEGROWTH option.

NOTA En cualquier caso, si se alcanzó el límite del tamaño actual, aumente el valor MAXSIZE.NOTE In either case, if the current size limit has been reached, increase the MAXSIZE value.

Agregar un archivo de registro en otro discoAdd a log file on a different disk

Agregue un nuevo archivo de registro a la base de datos en otro disco que tenga suficiente espacio mediante ALTER DATABASE ADD LOG FILE.Add a new log file to the database on a different disk that has sufficient space by using ALTER DATABASE <database_name> ADD LOG FILE.

Agregar un archivo de registroAdd a log file

Completar o terminar una transacción de larga ejecuciónComplete or kill a long-running transaction

Descubrir transacciones de ejecución prolongadaDiscovering long-running transactions

Una transacción de ejecución muy prolongada puede hacer que el registro de transacciones se llene.A very long-running transaction can cause the transaction log to fill. Para buscar las transacciones de ejecución prolongada, use una de las opciones siguientes:To look for long-running transactions, use one of the following:

Terminar una transacciónKill a transaction

Hay veces en que simplemente tiene que finalizar el proceso; puede que tenga que usar la instrucción KILL .Sometimes you just have to end the process; you may have to use the KILL statement. Use esta instrucción con sumo cuidado, especialmente cuando se estén ejecutando procesos críticos que no desea terminar.Please use this statement very carefully, especially when critical processes are running that you don't want to kill. Para más información, consulte KILL (Transact-SQL)For more information, see KILL (Transact-SQL)

Vea tambiénSee also

Artículo de soporte técnico de KB: Un registro de transacciones crece de manera inesperada o se llena en SQL Server ALTER DATABASE (Transact-SQL) KB support article - A transaction log grows unexpectedly or becomes full in SQL Server ALTER DATABASE (Transact-SQL)
Administrar el tamaño del archivo de registro de transacciones Manage the Size of the Transaction Log File
Copias de seguridad del registro de transacciones (SQL Server) Transaction Log Backups (SQL Server)
sp_add_log_file_recover_suspect_db (Transact-SQL)sp_add_log_file_recover_suspect_db (Transact-SQL)