Administrar el seguimiento de cambios (SQL Server)

Se aplica a:SQL ServerAzure SQL DatabaseInstancia administrada de Azure SQLBase de datos SQL en Microsoft Fabric

En este artículo se describe cómo administrar el seguimiento de cambios. También se describe cómo configurar la seguridad y determinar los efectos en el almacenamiento y el rendimiento cuando se utiliza el seguimiento de cambios.

Administrar el seguimiento de cambios

En las secciones siguientes se enumeran las vistas de catálogo, los permisos y los valores de configuración que son importantes para la administración del seguimiento de cambios.

Vistas de catálogo

Para determinar qué tablas y bases de datos tienen habilitado el seguimiento de cambios, use las siguientes vistas de catálogo:

También, la vista de catálogo sys.internal_tables genera una lista de las tablas internas que se crean al habilitar el seguimiento de cambios para una tabla de usuario.

Seguridad

Para tener acceso a información del seguimiento de cambios mediante las funciones de seguimiento de cambios, la entidad de seguridad debe tener los permisos siguientes:

  • SELECTPermiso SELECT para la tabla que se consulta, por lo menos para las columnas de clave principal de la tabla sometida a seguimiento de cambios.

  • VIEW CHANGE TRACKING autorización en la tabla en la cual se obtienen los cambios. El VIEW CHANGE TRACKING permiso es necesario por los siguientes motivos:

    • Los registros de seguimiento de cambios incluyen información sobre las filas que se eliminan. Los registros usan los valores de clave primaria de las filas eliminadas. Se le puede conceder a una entidad de seguridad el permiso SELECT para una tabla con seguimiento de cambios después de que se eliminen algunos datos confidenciales. En este caso, no desea que esa entidad de seguridad acceda a la información eliminada mediante el seguimiento de cambios.

    • La información de seguimiento de cambios puede almacenar información sobre qué columnas se modifican mediante las operaciones de actualización. Es posible que se le haya denegado a una entidad de seguridad el permiso para una columna que contiene información confidencial. Sin embargo, dado que la información del seguimiento de cambios está disponible, una entidad de seguridad puede determinar que el valor de una columna ha sido actualizado, pero no puede determinar el valor la citada columna.

Comprender la sobrecarga del seguimiento de cambios

Al habilitar el seguimiento de cambios para una tabla, afecta a algunas operaciones de administración. En la tabla siguiente se enumeran las operaciones y los efectos que se deben considerar.

Operación Cuando el seguimiento de cambios está habilitado
DROP TABLE Se elimina toda la información de seguimiento de cambios de la tabla eliminada.
ALTER TABLE DROP CONSTRAINT Se produce un error al intentar quitar la PRIMARY KEY restricción. Debe deshabilitar el seguimiento de cambios para poder quitar una PRIMARY KEY restricción.
ALTER TABLE DROP COLUMN Si una columna que va a quitar forma parte de la clave principal, no se permite quitar la columna, independientemente del seguimiento de cambios.

Si la columna que se desea quitar no forma parte de la clave principal, la columna se quita correctamente. Sin embargo, primero debe comprender el efecto en cualquier aplicación que sincronice estos datos. Si el seguimiento de cambios de la columna está habilitado para la tabla, es posible que la columna quitada siga formando parte de la información del seguimiento de cambios obtenida. Es responsabilidad de la aplicación gestionar la columna eliminada.
ALTER TABLE ADD COLUMN Si agrega una nueva columna a la tabla de seguimiento de cambios, no se realiza el seguimiento de la adición de la columna. Solo se realiza el seguimiento de las actualizaciones y los cambios que se efectúen en la columna nueva.
ALTER TABLE ALTER COLUMN No se realiza un seguimiento de los cambios de tipo de datos de una columna de clave no principal.
ALTER TABLE SWITCH Se produce un error al cambiar una partición si una o ambas tablas tienen habilitado el seguimiento de cambios.
DROP INDEX, or ALTER INDEX DISABLE El índice que exige la clave principal no se puede quitar ni deshabilitar.
TRUNCATE TABLE Puede truncar una tabla que tenga habilitado el seguimiento de cambios. Sin embargo, no se realiza el seguimiento de las filas eliminadas por la operación, y se actualiza la versión válida mínima. Cuando una aplicación comprueba su versión, la comprobación indica que la versión es demasiado antigua y se requiere una reinicialización. Esta condición equivale a deshabilitar el seguimiento de cambios y, a continuación, volver a habilitarlo para la tabla.

El uso del seguimiento de cambios agrega cierta sobrecarga a las operaciones DML porque la operación almacena información de seguimiento de cambios.

Efectos en DML

El seguimiento de cambios está optimizado para minimizar la sobrecarga de rendimiento en las operaciones DML. La sobrecarga incremental de rendimiento que conlleva usar el seguimiento de cambios en una tabla es similar a la sobrecarga que se produce al crear y mantener un índice de una tabla.

Para cada fila que cambia una operación DML, el sistema agrega una fila a la tabla interna de seguimiento de cambios. El efecto de esta acción, en relación con la operación DML, depende de varios factores, como:

  • El número de columnas de clave principal

  • Cantidad de datos modificados en la fila de la tabla de usuario

  • Número de operaciones realizadas en una transacción

El aislamiento de instantáneas, si se usa, también afecta al rendimiento de todas las operaciones DML, independientemente de si el seguimiento de cambios está habilitado o no.

Efectos en el almacenamiento

Los datos del seguimiento de cambios se almacenan en los tipos siguientes de tablas internas:

  • Tabla de cambios interna

    Cada tabla de usuario que tiene habilitado el seguimiento de cambios obtiene su propia tabla de cambios interna.

  • Tabla de transacciones interna

    La base de datos tiene una tabla de transacciones interna.

Estas tablas internas afectan a los requisitos de almacenamiento de las maneras siguientes:

  • Para cada cambio en cada fila de la tabla de usuario, el seguimiento de cambios agrega una fila a la tabla de cambios interna. Esta fila tiene una pequeña sobrecarga fija más una sobrecarga variable equivalente al tamaño de las columnas de clave principal. La fila puede contener información de contexto opcional establecida por una aplicación. Si habilita el seguimiento de columnas, cada columna modificada requiere 4 bytes en la tabla de seguimiento.

  • Para cada transacción confirmada, el seguimiento de cambios agrega una fila a una tabla de transacciones interna.

Como en el caso de otras tablas internas, es posible determinar el espacio usado para las tablas de seguimiento de cambios a través del procedimiento almacenado sp_spaceused . Puede obtener los nombres de las tablas internas mediante la vista de catálogo de sys.internal_tables , como se muestra en el ejemplo siguiente.

sp_spaceused 'sys.change_tracking_309576141'  
sp_spaceused 'sys.syscommittab'