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.
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.
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.
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
a
INNER JOIN sysobjects b
ON
b.id=a.object_id
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 de la 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.
cambios.
–Activar el seguimiento de cambios en la base de datos
ALTER DATABASE [Nombre de la base de datos] SET CHANGE_TRACKING = ON (CHANGE_RETENTION = 1 DAYS, AUTO_CLEANUP = ON)