Compartir por


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, así como determinar los efectos en el almacenamiento y en el rendimiento cuando se utiliza esta característica.

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 el seguimiento de cambios habilitado, puede utilizar las vistas de catálogo siguientes:

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:

  • SELECT permiso en al menos las columnas de clave principal de la tabla de seguimiento de cambios a la tabla que se está consultando.

  • 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 han eliminado. Los registros usan los valores de clave principal de las filas que se han eliminado. Se podría haber concedido a un principal SELECT permiso para la tabla de seguimiento de cambios después de que se eliminaran algunos datos confidenciales. En este caso, no querrá que ese principal pueda acceder a esa información eliminada mediante el seguimiento de cambios.

    • El seguimiento de cambios puede contener información sobre qué columnas se han visto modificadas por 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, algunas operaciones de administración quedan afectadas. 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 quita toda la información del seguimiento de cambios para la tabla quitada.
ALTER TABLE DROP CONSTRAINT Se produce un error al intentar quitar la PRIMARY KEY restricción. El seguimiento de cambios debe deshabilitarse antes de que se pueda quitar una PRIMARY KEY restricción.
ALTER TABLE DROP COLUMN Si la columna que se desea quitar forma parte de la clave principal, no se permite la eliminación, independientemente del seguimiento de cambios.

Si la columna que se desea quitar no forma parte de la clave principal, la columna se quita correctamente. No obstante, es preciso ser consciente del efecto que se provocará en cualquier aplicación que esté sincronizando 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. El trato que se deba dar a la columna quitada es responsabilidad de la aplicación.
ALTER TABLE ADD COLUMN Si se agrega una columna nueva a la tabla sometida a seguimiento de cambios, la incorporación de la columna no se incluye en el seguimiento. 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 o deshabilitar.
TRUNCATE TABLE Es posible aplicar truncamiento sobre tablas que tengan el seguimiento de cambios habilitado. 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. Esto es lo mismo que deshabilitar el seguimiento de cambios y, a continuación, volverlo a habilitar para la tabla.

Cuando se usa el seguimiento de cambios, se agrega cierta sobrecarga a las operaciones DML debido a que la información correspondiente se almacena como parte de la operación.

Efectos en DML

El seguimiento de cambios se ha optimizado para minimizar la sobrecarga de rendimiento en operaciones de DML. El incremento en la sobrecarga de rendimiento que se asocia al uso del seguimiento de cambios en una tabla es similar a la sobrecarga en que se incurre cuando se crea un índice para una tabla y hay que mantenerlo.

Para cada fila modificada por una operación DML, se agrega una fila a la tabla de seguimiento de cambios interna. El efecto de esto en relación con la operación DML depende de varios factores, como:

  • El número de columnas de clave principal

  • La cantidad de datos que se modifican en la fila de la tabla de usuario

  • El número de operaciones que se realizan en una transacción

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

Efectos en el almacenamiento

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

  • Tabla de cambios interna

    Hay una tabla de cambios interna para cada tabla de usuario que tenga habilitado el seguimiento de cambios.

  • Tabla de transacciones interna

    Hay una tabla de transacciones interna para la base de datos.

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

  • Para cada cambio realizado en cada fila de la tabla de usuario, se 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. Y, si el seguimiento de la columna está habilitado, cada columna modificada requiere 4 bytes en la tabla de seguimiento.

  • Por cada transacción confirmada, se 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 . Los nombres de las tablas internas se pueden obtener con la vista de catálogo sys.internal_tables , como se muestra en el ejemplo siguiente.

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