jueves, 10 de abril de 2014

Error: "Cannot insert duplicate key row in object 'sys.syscommittab' with unique index 'si_xdes_id'... Microsoft SQL Server, Error 2601"


La documentación de Microsoft dice que para resolver este error es necesario actualizar el SQL con el Service Pack 3 y el  Cumulative Update 2, sin embargo luego de hacer esto en mi base de datos seguía marcando este error al querer hacer un backup o una reducción de tamaño de archivos.
Investigando un poco más, detecte que el problema es ocasionado por Change Tracking o Seguimiento de Cambios, por lo que una vez deshabilitada esta opción tanto en las tablas como en la base de datos ya fue posible realizar backups y reducción de la base de datos.

El Change Tracking o seguimiento de Cambios  es una solución ligera que proporciona un mecanismo de seguimiento de cambios eficaz para las aplicaciones, una vez configurado el seguimiento de cambios para una tabla, cualquier instrucción DML que afecte a las filas en la tabla, registra  la información de seguimiento de cambios pertinente para cada fila modificada.

--Resolver error provocado por Change Tracking o Seguimiento de Cambios
--Desactivar tabla por tabla el Change Tracking
DECLARE @TableName varchar(255)
DECLARE TableCursor CURSOR FOR
SELECT b.name
FROM sys.change_tracking_tables a
INNER JOIN sysobjects b
ON b.id=a.object_id
ORDER BY b.name
OPEN TableCursor
FETCH NEXT FROM TableCursor INTO @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
Exec ('ALTER TABLE ['+@TableName+'] DISABLE  CHANGE_TRACKING')
FETCH NEXT FROM TableCursor INTO @TableName
END
CLOSE TableCursor
DEALLOCATE TableCursor

--Desactivar el seguimiento de cambios en la base de datos
ALTER DATABASE [Nombre Base de Datos] SET CHANGE_TRACKING = OFF

Luego procedemos a realizar el backup o la instrucción ShrinkDB y al terminar volvemos a activar el seguimiento de cambios.

--Activar el seguimiento de cambios en la base de datos
ALTER DATABASE [Nombre Base de Datos] SET CHANGE_TRACKING = ON (CHANGE_RETENTION = 1 DAYS, AUTO_CLEANUP = ON)

No hay comentarios:

Publicar un comentario