Si por algún motivo los jobs creados por default en nuestro SQL Agent, como parte de la implementación del CDC, no aparecen o los eliminamos accidentalmente. No hay que entrar en pánico. A continuación te muestro cómo crear los jobs de Change Data Capture (CDC) en SQL Server de manera manual usando un par de procedimientos almacenados:
- Para crear el job de captura (capture):
El job de captura lee el log e inserta la información de los cambios sucedidos en la tabla de cambios asociada a la tabla a capturar. El siguiente ejemplo crea un job de captura con valores predeterminados:
USE AdventureWorks2019;
GO
EXEC sys.sp_cdc_add_job @job_type = N'capture'
GO
2. Para crear el job de limpieza (cleanup):
El job de limpieza es el responsable de hacer que se cumpla la política de retención de los datos capturados, eliminando los registros anteriores al tiempo indicado por el parámetro de retención. El siguiente ejemplo crea un job de limpieza en la base de datos AdventureWorks2019. Los valores de los parámetros start_job y retention son 0 y 4320, respectivamente; indicando que el job no se ejecutara apenas lo creemos y que la retención de la data capturada sera de 4320 minutos (3 días):
USE AdventureWorks2019;
GO
EXEC sys.sp_cdc_add_job @job_type = N'cleanup', @start_job = 0, @retention = 4320;
Después de ejecutar esto, veremos que en el SQL Agent se han creado 2 jobs:
- cdc.<database_name>_cleanup
- cdc.<database_name>_capture
Donde <database_name> es el nombre de la base de datos actual.
Nota: Si nuestra instancia tiene rol de publicador (publisher) en una replicación transaccional, no veremos el job de ‘capture’ aunque lo agreguemos manualmente. Esto se debe a que ambas funcionalidades (Replicación y CDC) usan el Log-Reader de la replicación para rastrear los cambios ocurridos en la data; por lo que SQL Server ve innecesario crear otro job para un mismo fin.
Y LISTO!!
Si tienes alguna duda, comentario o sugerencia, puedes mandarme un email a bitácoradeundba@gmail.com.