Cdc.<>capture_instance_CT (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

La tabla de cambios creada cuando la captura de datos modificados está habilitada en una tabla de origen. La tabla devuelve una fila para cada inserción y elimina la operación realizada contra la tabla de origen y dos filas para cada operación de actualización realizada contra la tabla de origen. Cuando no se especifica el nombre de la tabla de cambios en el momento en que se habilita la tabla de origen, se deriva el nombre. El formato del nombre es cdc. capture_instance_CT donde capture_instance es el nombre de esquema de la tabla de origen y el nombre de la tabla de origen en el formato schema_table. Por ejemplo, si la tabla Person.Address de la base de datos de ejemplo AdventureWorks está habilitada para la captura de datos modificados, el nombre de la tabla de cambios derivada sería cdc.Person_Address_CT.

Se recomienda no consultar directamente las tablas del sistema. En su lugar, ejecute las funciones cdc.fn_cdc_get_all_changes_<capture_instance> y cdc.fn_cdc_get_net_changes_<capture_instance> .

Nombre de la columna Tipo de datos Descripción
__$start_lsn binary(10) Número de flujo de registro (LSN) asociado con la transacción de confirmación para el cambio.

Todos los cambios confirmados en la misma transacción comparten el mismo LSN de confirmación. Por ejemplo, si una operación de eliminación de la tabla de origen quita dos filas, la tabla de cambios contiene dos filas, cada una con el mismo valor __$start_lsn .
__$end_lsn binary(10) Solamente se identifica con fines informativos. No compatible. La compatibilidad con versiones posteriores no está garantizada.

En SQL Server 2012 (11.x), esta columna siempre es NULL.
__$seqval binary(10) Secuencia de la operación tal como se representa en el registro de transacciones. No se debe usar para ordenar. En su lugar, use la columna __$command_id .
__$operation int Identifica la operación del lenguaje de manipulación de datos (DML) asociada con el cambio. Puede ser uno de los siguientes:

1 = eliminar

2 = insertar

3 = actualizar (valores anteriores)

Los datos de columna tienen valores de fila antes de ejecutar la instrucción de actualización.

4 = actualizar (valores nuevos)

Los datos de columna tienen valores de fila después de ejecutar la instrucción de actualización.
__$update_mask varbinary(128) Máscara de bits basada en los índices de columna de la tabla de cambios que identifica las columnas que cambiaron.
<columnas de la tabla de origen capturadas> Varía Las columnas restantes de la tabla de cambios son las columnas de la tabla de origen que se identificaron como columnas capturadas cuando se creó la instancia de captura. Si no se especificó ninguna columna en la lista de columnas capturadas, todas las columnas en la tabla de origen se incluyen en esta tabla.
__$command_id int Realiza un seguimiento del orden de las operaciones dentro de una transacción.

Comentarios

La __$command_id columna se introdujo en una actualización acumulativa de las versiones 2012 a 2016. Para obtener información de versión y descarga, consulte el artículo de KB 3030352 en FIX: La tabla de cambios se ordena incorrectamente para las filas actualizadas después de habilitar la captura de datos modificados para una base de datos de Microsoft SQL Server. Para obtener más información, consulte Funcionalidad CDC puede interrumpirse después de actualizar a la CU más reciente para SQL Server 2012, 2014 y 2016.

Tipos de datos de columna capturados

Las columnas capturadas incluidas en esta tabla tienen el mismo valor y tipo de datos que sus columnas de origen correspondientes con las excepciones siguientes:

  • Las columnas timestamp se definen como binary(8).

  • Las columnas de identidad se definen como int o bigint.

Sin embargo, los valores de estas columnas son iguales que los valores de las columnas de origen.

Tipos de datos de objetos grandes

Siempre se asigna un valor NULL a las columnas de tipo de datos image, text y ntext cuando __$operation = 1 o __$operation = 3. A las columnas de tipo de datos varbinary(max),varchar(max)o nvarchar(max) se les asigna un valor NULL cuando __$operation = 3 a menos que la columna cambie durante la actualización. Cuando __$operation = 1, a estas columnas se les asigna su valor en el momento de la eliminación. Las columnas calculadas que se incluyen en una instancia de captura siempre tienen un valor NULL.

De forma predeterminada, el tamaño máximo que se pueden agregar a una columna capturada en una sola instrucción INSERT, UPDATE, WRITETEXT o UPDATETEXT es 65.536 bytes o 64 KB. Para aumentar este tamaño para admitir datos loB de mayor tamaño, use la opción Configurar el tamaño máximo de repl size del servidor para especificar un tamaño máximo mayor. Para más información, consulte Establecer la opción de configuración del servidor Tamaño de replicación de texto máximo.

Modificaciones del lenguaje de definición de datos

Las modificaciones de DDL en la tabla de origen, como agregar o quitar columnas, se registran en la tabla cdc.ddl_history . Estos cambios no se aplican a la tabla de cambios. Es decir, la definición de la tabla de cambio se mantiene constante. Al insertar filas en la tabla de cambios, el proceso de captura omite las columnas que no aparecen en la lista de columnas capturadas asociada a la tabla de origen. Si en la lista de columnas capturadas aparece una columna que ya no se encuentra en la tabla de origen, se asignará un valor nulo a la columna.

El cambio del tipo de datos de una columna de la tabla de origen también se registra en la tabla cdc.ddl_history . Sin embargo, este cambio altera la definición de la tabla de cambio. El tipo de datos de la columna capturada en la tabla de cambio se modifica cuando el proceso de captura detecta la entrada de registro para el cambio DDL realizado en la tabla de origen.

Si debe modificar el tipo de datos de una columna capturada en la tabla de origen de tal modo que disminuye el tamaño del tipo de datos, utilice el procedimiento siguiente para asegurarse de que puede modificar correctamente la columna equivalente en la tabla de cambio.

  1. En la tabla de origen, actualice los valores en la columna que se va a modificar para ajustar al tamaño del tipo de datos planeado. Por ejemplo, si cambia el tipo de datos de int a smallint, actualice los valores a un tamaño que se ajuste al intervalo smallint , de -32 768 a 32 767.

  2. En la tabla de cambio, realice la misma operación de actualización en la columna equivalente.

  3. Altere la tabla de origen especificando el nuevo tipo de datos. El cambio del tipo de datos se propaga correctamente a la tabla de cambio.

Modificaciones del lenguaje de manipulación de datos

Cuando las operaciones de inserción, actualización y eliminación se realizan en una tabla de origen habilitada para la captura de datos modificados, un registro de esas operaciones DML aparece en el registro de transacciones de la base de datos. El proceso de captura de datos modificados recupera información sobre esos cambios del registro de transacciones y agrega una o dos filas a la tabla de cambios para registrar el cambio. Las entradas se agregan a la tabla de cambios en el mismo orden en que se han confirmado en la tabla de origen. Dicho esto, la confirmación de las entradas de la tabla de cambios normalmente se debe realizar en un grupo de cambios en lugar de realizar por cada entrada.

Una operación de inserción da como resultado una fila agregada a la tabla de cambios; una operación de eliminación da como resultado una fila agregada a la tabla de cambios; si SQL Server implementa una actualización como una "actualización diferida", lo que significa como un par de operaciones de eliminación e inserción, la operación de actualización da como resultado dos filas agregadas a la tabla de cambios: la primera fila que refleja la eliminación de los datos capturados y la segunda fila que refleja la inserción de los datos actualizados, capturados; si SQL Server no implementa una actualización como una "actualización diferida", la operación de actualización da como resultado dos filas agregadas a la tabla de cambios: la primera fila que refleja los datos capturados antes de la actualización y la segunda fila que refleja los datos capturados después de la actualización.

Dentro de la entrada de la tabla de cambios, la columna __$start_lsn se usa para registrar el LSN de confirmación asociado al cambio en la tabla de origen, la columna __$command_id se usa para ordenar el cambio dentro de su transacción y la columna __$operation se usa para registrar la operación realizada. Juntas, estas columnas de metadatos se pueden utilizar para asegurarse de que el orden de confirmación de los cambios de origen se conserva. Dado que el proceso de captura obtiene su información de cambio del registro de transacciones, es importante tener en cuenta que las entradas de tabla de cambios no aparecen sincrónicamente con sus cambios de tabla de origen correspondientes. Por el contrario, los cambios correspondientes aparecen de forma asincrónica, después de que el proceso de captura haya procesado las entradas de cambios pertinentes del registro de transacciones.

Para operaciones de inserción y eliminación, todos los bits de la máscara de actualización están activados. Para las operaciones de actualización, la máscara de actualización tanto en las filas de actualización antiguas como nuevas se modificará para reflejar las columnas que cambiaron durante la actualización.

Consulte también

sys.sp_cdc_enable_table (Transact-SQL)
sys.sp_cdc_get_ddl_history (Transact-SQL)