Captura de datos modificados y otras características

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.

Creación de reflejo de la base de datos

Se puede reflejar una base de datos que está habilitada para la captura de datos modificados. Para asegurarse de que la captura y la limpieza se producen 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 rellenado de las tablas de cambios se trata de forma diferente cuando se habilitan ambas características. 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 modificados se habilita sola, un trabajo del Agente SQL Server llama a sp_replcmds. Cuando ambas características están habilitadas en la misma base de datos, el Agente de registro 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 AdventureWorks2022 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 crea el Agente de registro del LOG para la base de datos y se elimina el trabajo de captura. El Agente de registro del LOG continúa examinando el registro desde el ú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 registro del LOG y vuelve a recrear el trabajo de captura.

Nota:

Cuando el Agente de registro del LOG se utiliza para la captura de datos modificados y 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.

Restauración o asociación de 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 acerca de esta opción, vea RESTORE.

  • Si una base de datos se desasocia y asocia en el mismo servidor o en otro servidor, la captura de datos modificados sigue estando 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 independientes

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

Grupos de disponibilidad

Cuando se usan Grupos de disponibilidad Always On, la enumeración de los cambios debe realizarse en la réplica secundaria con el fin de reducir la carga del disco en la réplica 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 es compatible con SQL Server 2017 en Linux a partir de CU18 y SQL Server 2019 en Linux.

Consulte también