Tarea de control de CDC

Se aplica a:SQL Server SSIS Integration Runtime en Azure Data Factory

Importante

Los componentes de flujo de CDC, incluidos la tarea de control de CDC, el origen de CDC y el divisor de CDC, están en desuso. Para más información, consulte el anuncio.

La tarea CDC Control se utiliza para controlar el ciclo de vida de los paquetes de captura de datos de cambios (CDC). Se encarga de la sincronización del paquete CDC con el paquete de carga inicial y de la gestión de los intervalos del número de secuencia de registro (LSN) que se procesan en una ejecución del paquete CDC. Además, la tarea «CDC Control» aborda los escenarios de error y la recuperación.

La tarea de control de CDC mantiene el estado del paquete CDC en una variable de paquete de SSIS y también puede conservar ese estado en una tabla de base de datos para que se mantenga entre ejecuciones del paquete y entre varios paquetes que, en conjunto, realizan un mismo proceso de CDC (por ejemplo, una tarea puede ser responsable de la carga inicial y otra de las actualizaciones incrementales).

La tarea de control de CDC admite dos grupos de operaciones. Un grupo se encarga de la sincronización de la carga inicial y del procesamiento de cambios, y el otro gestiona el intervalo de LSN para el procesamiento de cambios de una ejecución de un paquete CDC y lleva un registro de lo que se procesó correctamente.

Las siguientes operaciones controlan la sincronización de la carga inicial y el procesamiento de cambios:

Operación Descripción
ResetCdcState Esta operación se usa para restablecer el estado CDC persistente asociado al contexto CDC actual. Después de ejecutar esta operación, el LSN máximo actual de la tabla LSN-timestamp sys.fn_cdc_get_max_lsn pasa a ser el inicio del intervalo del siguiente intervalo de procesamiento. Esta operación requiere una conexión a la base de datos de origen.
MarkInitialLoadStart Esta operación se usa al comienzo de un paquete de carga inicial para registrar el LSN actual en la base de datos de origen antes de que el paquete de carga inicial comience a leer las tablas de origen. Esto requiere una conexión a la base de datos de origen para llamar a sys.fn_cdc_get_max_lsn.

Si selecciona MarkInitialLoadStart cuando trabaja en CDC de SQL Server (es decir, no en Oracle), el usuario especificado en el administrador de conexiones debe ser db_owner o sysadmin.
Marcar final de carga inicial Esta operación se usa al final de un paquete de carga inicial para registrar el LSN actual en la base de datos de origen después de que el paquete de carga inicial termine de leer las tablas de origen. Este LSN se determina registrando la hora actual en la que se produjo esta operación y consultando después la tabla de asignación cdc.lsn_time_ de la base de datos de CDC para buscar un cambio que se haya producido después de esa hora.

Si selecciona MarkInitialLoadEnd cuando trabaja en CDC de SQL Server (es decir, no en Oracle), el usuario especificado en el administrador de conexiones debe ser db_owner o sysadmin.
MarkCdcStart Esta operación se usa cuando la carga inicial se realiza desde una base de datos de instantáneas. En este caso, el procesamiento de cambios debe iniciarse inmediatamente después del LSN de la instantánea. Puede especificar el nombre de la base de datos de instantánea que se va a usar, y la tarea de control de CDC consulta en SQL Server el LSN de la instantánea. También puede especificar directamente el LSN de la instantánea.

Si selecciona MarkCdcStart cuando trabaja en CDC de SQL Server (es decir, no en Oracle), el usuario especificado en el administrador de conexiones debe ser db_owner o sysadmin.

Las operaciones siguientes se usan para administrar el intervalo de procesamiento:

Operación Descripción
ObtenerRangoDeProcesamiento Esta operación se usa antes de invocar el flujo de datos que usa el flujo de datos origen de CDC. Establece un intervalo de LSN que el flujo de datos de origen de CDC lee cuando se invoca. El intervalo se almacena en una variable de paquete de SSIS que es utilizada por el origen de CDC durante el procesamiento del flujo de datos.

Para obtener más información sobre los estados que se almacenan, vea Definir una variable de estado.
Marcar intervalo procesado : Esta operación se ejecuta después de cada ejecución del CDC (después de que el flujo de datos del CDC se complete correctamente) para registrar el último LSN que se procesó por completo en la ejecución del CDC. La próxima vez que se ejecute GetProcessingRange, esta posición será el inicio del intervalo de procesamiento.

Gestión de la persistencia del estado de CDC

La tarea de control CDC mantiene un estado persistente entre una activación y otra. La información almacenada en el estado CDC se usa para determinar y mantener el intervalo de procesamiento del paquete CDC y para detectar condiciones de error. El estado persistente se almacena como una cadena. Para obtener más información, consulte Definir una variable de estado.

La tarea de control de CDC admite dos tipos de persistencia de estado

  • Persistencia de estado manual: en este caso, la tarea Control CDC administra el estado almacenado en una variable de paquete pero el desarrollador del paquete debe leer la variable desde un almacén persistente antes de llamar al Control CDC y después escribirla de nuevo en el almacén persistente cuando el Control CDC se llame por última vez y la ejecución del CDC se complete.

  • Persistencia de estado automática: el estado del CDC se almacena en una tabla de una base de datos. El estado se almacena con el nombre especificado en la propiedad StateName, en una tabla indicada en la propiedad Tabla que se usará para almacenar el estado, que se encuentra en un administrador de conexiones seleccionado para almacenar el estado. El valor predeterminado es el administrador de conexiones de origen pero la práctica común es que sea el administrador de conexiones de destino. La tarea de control de CDC actualiza el valor de estado en la tabla de estados, y esta actualización se confirma como parte de la transacción ambiental.

Tratamiento de errores

La tarea de control de CDC puede informar de un error cuando:

  • No se puede leer el estado persistente de CDC o falla la actualización del estado persistente.

  • No puede leer la información del LSN actual desde la base de datos de origen.

  • La lectura del estado de CDC no es consistente.

En todos estos casos, la tarea CDC Control informa de un error que puede controlarse de la forma estándar en que SSIS controla los errores del flujo de control.

La tarea de control de CDC también puede generar una advertencia cuando la operación Get Processing Range se invoca directamente después de otra operación Get Processing Range sin que se llame a Mark Processed Range. Esta es una indicación de que la ejecución anterior dio error o de que otro paquete CDC puede estar ejecutándose con el mismo nombre del estado CDC.

Configuración de la tarea de control de CDC

Puede establecer propiedades a través del Diseñador de SSIS o mediante programación.

En esta sección

Definir una variable de estado

Editor de tareas de control de CDC

Use el cuadro de diálogo Editor de tareas de control de CDC para configurar la tarea de control de CDC. La configuración de la tarea de control de CDC incluye definir una conexión a la base de datos de CDC, la operación de la tarea de CDC y la información de gestión del estado.

Para obtener más información sobre la tarea Control CDC, consulte Tarea Control CDC.

Para abrir el editor de tareas de control de CDC

  1. En SQL Server Data Tools, abra el paquete de SQL Server 2019 Integration Services (SSIS) que contiene la tarea de control de CDC.

  2. En la pestaña Flujo de control, haga doble clic en la tarea CDC Control.

Opciones

Administrador de conexiones de ADO.NET para la base de datos CDC de SQL Server
Seleccione un administrador de conexiones existente de la lista o haga clic en Nueva para crear una nueva conexión. Es preciso realizar la conexión a una base de datos de SQL Server habilitada para CDC y donde se encuentre la tabla de cambios seleccionada.

Operación de Control CDC
Seleccione la operación que vaya a ejecutar para esta tarea. Todas las operaciones usan la variable de estado que se almacena en una variable de paquete SSIS donde se almacena el estado y lo pasa entre los distintos componentes del paquete.

  • Marcar comienzo de carga inicial: esta operación se usa cuando se ejecuta una carga inicial desde una base de datos activa sin una instantánea. Se invoca al comienzo de un paquete de carga inicial para registrar el LSN actual en la base de datos de origen antes de que el paquete de carga inicial comience a leer las tablas de origen. Esto requiere una conexión a la base de datos de origen.

    Si selecciona Mark Initial Load Start cuando trabaja en CDC de SQL Server (es decir, no en Oracle), el usuario especificado en el administrador de conexiones debe ser db_owner o sysadmin.

  • Marcar fin de la carga inicial: Esta operación se usa al ejecutar una carga inicial desde una base de datos activa sin una instantánea. Se invoca al final de un paquete de carga inicial para registrar el LSN actual en la base de datos de origen después de que el paquete de carga inicial termine de leer las tablas de origen. Este LSN se determina registrando la hora actual en que ocurre esta operación y, a continuación, consultando la tabla de asignación de cdc.lsn_time_en la base de datos CDC buscando un cambio que tuvo lugar después de ese tiempo.

    Si selecciona Mark Initial Load End cuando trabaja en CDC de SQL Server (es decir, no en Oracle), el usuario especificado en el administrador de conexiones debe ser db_owner o sysadmin.

  • Marcar el inicio de CDC: Esta operación se utiliza cuando la carga inicial se realiza desde una base de datos de instantáneas o desde una base de datos en estado de inactividad. Se invoca en cualquier punto del paquete de carga inicial. La operación acepta un parámetro que puede ser un LSN de instantánea, un nombre de una base de datos de instantánea (desde la que el LSN de instantánea se deriva automáticamente) o se puede dejar vacío, en cuyo caso el LSN de la base de datos actual se usa como el LSN de inicio para el paquete de procesamiento de cambios.

    Esta operación se usa en lugar de las operaciones Marcar inicio y fin de carga inicial.

    Si selecciona Mark CDC Start cuando trabaja en CDC de SQL Server (es decir, no en Oracle), el usuario especificado en el administrador de conexiones debe ser db_owner o sysadmin.

  • Obtener intervalo de procesamiento: esta operación se usa en un paquete de procesamiento de cambios antes de invocar el flujo de datos que usa el flujo de datos de origen de CDC. Establece un intervalo de LSN que el flujo de datos de origen de CDC lee cuando se invoca. El intervalo se almacena en una variable de paquete de SSIS que es utilizada por el origen de CDC durante el procesamiento del flujo de datos.

    Para obtener más información sobre los posibles estados CDC que se almacenan, vea Definir una variable de estado.

  • Marcar intervalo procesado: Esta operación se utiliza en un paquete de procesamiento de cambios al final de una ejecución de CDC (después de que el flujo de datos de CDC se haya completado correctamente) para registrar el último LSN que se procesó por completo en la ejecución de CDC. La próxima vez que se ejecute GetProcessingRange , esta posición determinará el inicio del siguiente intervalo de procesamiento.

  • Restablecer estado CDC: esta operación se usa para restablecer el estado CDC persistente asociado al contexto CDC actual. Después de ejecutar esta operación, el LSN máximo actual de la tabla LSN-timestamp sys.fn_cdc_get_max_lsn pasa a ser el inicio del intervalo del siguiente intervalo de procesamiento. Esta operación requiere una conexión a la base de datos de origen.

    Un ejemplo de uso de esta operación es cuando se desea procesar solo los registros de cambios creados recientemente y omitir todos los registros de cambios anteriores.

Variable que contiene el estado CDC
Seleccione la variable del paquete SSIS que almacena la información sobre el estado de la operación de la tarea. Debe definir una variable antes de empezar. Si selecciona Persistencia de estado automática, la variable de estado se carga y guarda automáticamente.

Para obtener más información sobre cómo se define la variable de estado, vea Definir una variable de estado.

LSN de SQL Server para iniciar el nombre de CDC/instantánea:
Escriba el LSN actual de la base de datos de origen o el nombre de la base de datos de instantánea desde la que se realiza la carga inicial para determinar dónde se inicia CDC. Esto solo está disponible si la Operación de control CDC está configurada como Marcar inicio de CDC.

Para obtener más información acerca de estas operaciones, vea CDC Control Task.

Almacenar automáticamente el estado en una tabla de base de datos
Active esta casilla para que la tarea Control CDC controle automáticamente la carga y el almacenamiento del estado de CDC en una tabla de estado que se encuentre en una base de datos especificada. Si no se ha activado, el desarrollador debe cargar el estado de CDC cuando el paquete se inicie y guardarlo cada vez que cambie el estado de CDC.

Administrador de conexiones para la base de datos donde se almacena el estado
Seleccione un administrador de conexiones de ADO.NET existente de la lista o haga clic en Nueva para crear una nueva conexión. Esta conexión es a una base de datos de SQL Server que contenga la tabla de estado. La tabla de estado contiene la información sobre el estado.

Esto solo está disponible si se ha seleccionado Persistencia de estado automática y es un parámetro obligatorio.

Tabla que se va a usar para almacenar el estado
Escriba el nombre de la tabla de estado que se va a usar para almacenar el estado de CDC. La tabla especificada debe tener dos columnas denominadas nombre y estado y ambas columnas deben ser del tipo de datos varchar (256).

Opcionalmente, puede seleccionar Nuevo para obtener un script SQL que compile una nueva tabla de estado con las columnas necesarias. Cuando se selecciona Persistencia de estado automática , el desarrollador debe crear una tabla de estado según los requisitos descritos anteriormente.

Esto solo está disponible si se ha seleccionado Persistencia de estado automática y es un parámetro obligatorio.

Nombre del estado
Escriba un nombre para asociarlo con el estado persistente de CDC. Los paquetes de carga completa y CDC que funcionan con el mismo contexto CDC especificarán un nombre de estado común. Este nombre se usa para localizar la fila de estado en la tabla de estado.