Tengo un proceso de ejecución prolongada que mantiene abierta una transacción durante toda su duración.
No tengo control sobre la forma en que esto se ejecuta.
Debido a que una transacción se mantiene abierta durante toda la duración, cuando se llena el registro de transacciones, SQL Server no puede aumentar el tamaño del archivo de registro.
Entonces el proceso falla con el error "The transaction log for database 'xxx' is full"
.
Intenté evitar esto aumentando el tamaño del archivo de registro de transacciones en las propiedades de la base de datos, pero obtengo el mismo error.
No estoy seguro de qué debería intentar a continuación. El proceso se ejecuta durante varias horas, por lo que no es fácil jugar a prueba y error.
¿Algunas ideas?
Si alguien está interesado, el proceso es una importación de la organización en Microsoft Dynamics CRM 4.0.
Hay mucho espacio en disco, tenemos el registro en modo de registro simple y hemos hecho una copia de seguridad del registro antes de iniciar el proceso.
- = - = - = - = - ACTUALIZAR - = - = - = - = -
Gracias a todos por los comentarios hasta ahora. Lo siguiente es lo que me llevó a creer que el registro no crecería debido a la transacción abierta:
Estoy teniendo el siguiente error...
Import Organization (Name=xxx, Id=560d04e7-98ed-e211-9759-0050569d6d39) failed with Exception:
System.Data.SqlClient.SqlException: The transaction log for database 'xxx' is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases
Así que siguiendo ese consejo fui a " log_reuse_wait_desc column in sys.databases
" y tenía el valor " ACTIVE_TRANSACTION
".
Según Microsoft: http://msdn.microsoft.com/en-us/library/ms345414(v=sql.105).aspx
Eso significa lo siguiente:
Una transacción está activa (todos los modelos de recuperación). • Puede existir una transacción de larga duración al inicio de la copia de seguridad del registro. En este caso, liberar espacio puede requerir otra copia de seguridad del registro. Para obtener más información, consulte "Transacciones activas de larga duración", más adelante en este tema.
• Se aplaza una transacción (SQL Server 2005 Enterprise Edition y versiones posteriores únicamente). Una transacción diferida es efectivamente una transacción activa cuya reversión está bloqueada debido a algún recurso no disponible. Para obtener información sobre las causas de las transacciones diferidas y cómo sacarlas del estado diferido, consulte Transacciones diferidas.
¿He entendido mal algo?
- = - = - = - ACTUALIZAR 2 - = - = - = -
Acabo de iniciar el proceso con el tamaño del archivo de registro inicial establecido en 30 GB. Esto tardará un par de horas en completarse.
- = - = - = - ACTUALIZACIÓN final - = - = - = -
En realidad, el problema se debió a que el archivo de registro consumía todo el espacio disponible en disco. En el último intento liberé 120 GB y todavía lo usó todo y finalmente falló.
No me di cuenta de que esto estaba sucediendo anteriormente porque cuando el proceso se estaba ejecutando durante la noche, estaba retrocediendo por falla. Esta vez pude comprobar el tamaño del archivo de registro antes de la reversión.
Gracias a todos por sus aportes.