Captura de cambios en los datos y otras funciones

Se aplica a:SQL ServerAzure SQL Managed Instance

En este artículo se describe cómo interactúan las siguientes características con la captura de datos modificados para SQL Server y Azure SQL Managed Instance. Para Azure SQL Database, consulte CDC con Azure SQL Database.

Seguimiento de cambios

La captura de datos modificados y el seguimiento de cambios pueden habilitarse en la misma base de datos. No se requiere ninguna consideración especial. Para obtener más información, consulta Trabajar con Change Tracking.

Duplicación de la base de datos

Se puede duplicar en espejo una base de datos habilitada para la captura de datos de cambios. Para asegurarse de que la captura y la limpieza se realicen automáticamente tras una conmutación por error, siga estos pasos:

  1. Asegúrese de que el Agente SQL Server se ejecute en la nueva instancia del servidor principal.

  2. Cree el trabajo de captura y el trabajo de limpieza en la nueva base de datos principal, la antigua base de datos de reflejo. Para crear los trabajos, use el procedimiento almacenado sp_cdc_add_job .

Para ver la configuración actual de un trabajo de captura o limpieza, use el procedimiento almacenado sys.sp_cdc_help_jobs en la nueva instancia de servidor principal. Para una base de datos concreta, el trabajo de captura se denomina cdc.database_name_capture y el trabajo de limpieza, cdc.database_name_cleanup, donde database_name es el nombre de la base de datos.

Para cambiar la configuración de un trabajo, use el procedimiento almacenado sys.sp_cdc_change_job .

Para obtener más información sobre la creación de reflejo de la base de datos, vea Creación de reflejo de la base de datos (SQL Server).

Replicación transaccional

La captura de datos modificados y la replicación transaccional pueden coexistir en la misma base de datos, pero el relleno de las tablas de cambios se realiza de forma diferente cuando ambas características están habilitadas. La captura de datos modificados y la replicación transaccional siempre usan el mismo procedimiento, sp_replcmds, para leer los cambios del registro de transacciones. Cuando la captura de datos de cambios se habilita por sí sola, un trabajo del Agente de SQL Server llama a sp_replcmds. Cuando ambas características están activadas en la misma base de datos, el Agente Lector del Log llama a sp_replcmds. Este agente rellena las tablas de cambios y las tablas de base de datos de distribución. Para más información, consulte Replication Log Reader Agent.

Considere un escenario en el que la captura de datos modificados está habilitada en la base de datos AdventureWorks2025 y se habilitan dos tablas para la captura. Para rellenar las tablas de cambios, el trabajo de captura llama a sp_replcmds. La base de datos se habilita para la replicación transaccional y se crea una publicación. Ahora, se ha creado el Agente de lectura del registro para la base de datos y se ha eliminado el trabajo de captura. El Agente lector de registros continúa analizando el registro a partir del último número de secuencia de registro que se confirmó en la tabla de cambios. De esta forma se asegura de la coherencia de los datos en las tablas de cambios. Si la replicación transaccional está deshabilitada en esta base de datos, se quita el Agente de lectura del registro y se vuelve a crear el trabajo de captura.

Nota:

Cuando el Agente lector del registro se utiliza tanto para la captura de datos de cambios como para la replicación transaccional, los cambios replicados se escriben primero en la base de datos de distribución. A continuación, los cambios capturados se escriben en las tablas de cambios. Ambas operaciones se confirman conjuntamente. Si hay alguna latencia al escribir en la base de datos de distribución, habrá una latencia correspondiente antes de que los cambios aparezcan en las tablas de cambios.

La opción proc exec de la replicación transaccional no está disponible cuando la captura de datos modificados está habilitada.

Restaurar o adjuntar base de datos

SQL Server utiliza la lógica siguiente para determinar si la captura de datos modificados permanece habilitada una vez restaurada o asociada una base de datos:

  • Si una base de datos se restaura en el mismo servidor con el mismo nombre, la captura de datos modificados sigue habilitada.

  • Si una base de datos se restaura en otro servidor, de forma predeterminada la captura de datos modificados está deshabilitada y se eliminan todos los metadatos relacionados.

    Para conservar la captura de datos modificados, use la opción KEEP_CDC a la hora de restaurar la base de datos. Para obtener más información sobre esta opción, vea RESTORE.

  • Si una base de datos se separa y se vuelve a adjuntar al mismo servidor o a otro servidor, la captura de datos de cambios permanece habilitada.

  • Si una base de datos se asocia o restaura con la opción KEEP_CDC en cualquier edición distinta de Standard, Enterprise o SQL Managed Instance, la operación se bloquea porque la captura de datos modificados requiere ediciones Standard, Enterprise o SQL Managed Instance de SQL Server. Se muestra el mensaje de error 934:

    SQL Server cannot load database '%.*ls' because change data capture is enabled. The currently installed edition of SQL Server does not support change data capture. Either restore database without KEEP_CDC option, or upgrade the instance to one that supports change data capture.

Puede usar sys.sp_cdc_disable_db para quitar la captura de datos modificados desde una base de datos restaurada o asociada.

Después de restaurar una base de datos en Azure SQL Managed Instance, CDC permanecerá habilitado, pero debe asegurarse de que los trabajos de examen y limpieza se agregan y ejecutan. Puede agregar manualmente los trabajos ejecutando sys.sp_cdc_add_job.

Bases de datos contenidas

La captura de datos modificados no se admite en bases de datos independientes.

Grupos de disponibilidad

Cuando se usan grupos de disponibilidad AlwaysOn, la enumeración de cambios debe realizarse en la réplica secundaria para reducir la carga de disco en la principal.

Índices de almacén de columnas

La captura de datos modificados no se puede habilitar en las tablas con un índice de almacén de columnas agrupado. A partir de SQL Server 2016, se puede habilitar en las tablas con un índice de almacén de columnas no agrupado.

Columnas calculadas

CDC no admite los valores de columnas calculadas, incluso aunque la columna calculada esté definida como persistida. Las columnas calculadas que están incluidas en una instancia de captura siempre tienen el valor NULL. Este comportamiento es intencionado y no es un error.

Linux

CDC ahora es compatible con SQL Server 2017 en Linux a partir de CU18 y SQL Server 2019 en Linux.

Consulte también