No es posible reducir el tamaño del registro de transacciones

 

Síntoma
 No fue capaz de reducir el registro de transacciones de mi base de datos. He recibido el siguiente mensaje de error al ejecutar DBCC SHRINKFILE (N'LogicalName' , NOTRUNCATE)

No se puede reducir el archivo de registro 2 (XXLogicalNameXX) porque todos los archivos de registro lógicos están en uso.
No se puede reducir el archivo de registro 2 (XXLogicalNameXX) porque el archivo de registro lógico ubicado al final del archivo está en uso.

Medio Ambiente: mi base de datos fue el editor de mi réplica transaccional y el modelo de recuperación fue el modo simple.

Paso de solución de problemas
Paso 1: Si su modelo de recuperación se establece en FULL, asegúrese de hacer copias de seguridad del registro de transacciones. BACKUP LOG databaseName TO DISK='C:\fileName.TRN'

Paso 2: Compruebe el espacio del registro utilizado con el comando dbcc SQLperf(logspace). ¿Tiene un espacio libre?

Paso 3: Utilizar la instrucción DBCC OPENTRAN  para comprobar si hay una transacción activa en una base de datos. Si es así acabar con él.

Paso 4: Comprobar el valor de log_reuse_wait_desc

select name, database_id,recovery_model_desc,log_reuse_wait_desc from sys.databases where name LIKE 'yourDatabaseName'

Causa
En mi caso, la columna log_reuse_wait_desc devuelto REPLICACIÓN. (por ejemplo Factores que pueden ralentizar el truncamiento del registro). El registro no se trunca porque los registros en el registro están pendientes de replicación.

Asegúrese de que el Agente Log Reader se está ejecutando o use sp_repldone para marcar las transacciones como distribuidas. Normalmente, el Agente de registro del analizará el registro de errores y completa cada marca de registro de registro como replicado mediante la ejecución de sp_repldone.

Resolución
Cuando traté de hacer lo mismo manualmente, fija mi tema fue:

EXEC sp_repldone @xactid = NULL, @xact_segno = NULL, @numtrans = 0,    @time = 0, @reset = 1

Con sp_repldone, todas las transacciones replicadas en el registro son marcados como distribuidas. Esto es útil cuando hay transacciones replicadas en el registro de transacciones que ya no son válidas y desea truncar el registro.

Si se ejecuta sp_repldone manualmente, puede invalidar el orden y la consistencia de las transacciones entregadas. Así que si usted no es consciente con su impacto, le recomiendo que deje caer su publicación, suscripción y replicación reducida. A continuación, ejecute el comando y volver a reducir la replicación.

Referencia
- Un registro de transacciones crece inesperadamente o se completa en un equipo que ejecuta SQL Server
- Cómo utilizar la instrucción DBCC SHRINKFILE para reducir el archivo de registro de transacciones en SQL Server
- Truncación del registro de transacciones
- Reducir el registro de transacciones
- Cómo utilizar la instrucción DBCC SHRINKFILE para reducir el archivo de registro de transacciones en SQL Server

 

Michel Degremont | Premier Field Engineer - SQL Server Core Engineer |