Compartir a través de


cdc.<capture_instance>_CT (Transact-SQL)

Es la tabla de cambio creada cuando la captura de datos de cambio se habilita 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 el nombre de la tabla de cambio no se especifica en el momento que se habilita la tabla de origen, el nombre se deriva. El formato del nombre es cdc.instancia_captura_CT donde instancia_captura es el nombre de esquema de la tabla de origen y el nombre de la tabla de origen en formato tabla_esquema. Por ejemplo, si la tabla Person.Address de la base de datos de ejemplo de AdventureWorks se habilita para la captura de los datos del cambio, el nombre de tabla del cambio derivado sería cdc.Person_Address_CT.

Se recomienda que no consulte 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 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 en la tabla de origen quita dos filas, la tabla de cambio contendrá 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, esta columna siempre es NULL.

__$seqval

binary(10)

Valor de secuencia utilizado para ordenar los cambios de fila dentro de una transacción.

__$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.

<captured source table columns>

varies

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.

Comentarios

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 Identity 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

A las columnas del tipo de datos image, text y ntext siempre se les asigna un valor NULL cuando __$operation = 1 o __$operation = 3. A las columnas del 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 están incluidas en una instancia de captura siempre tienen el 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 a fin de admitir los datos LOB más grandes, utilice la opción Establecer la opción de configuración del servidor Tamaño de replicación de texto máximo para especificar un tamaño máximo mayor. Para obtener más información, vea 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 eliminar columnas, se registran en la tabla cdc.ddl_history. Estos cambios no se aplican a la tabla de cambio. Es decir, la definición de la tabla de cambio se mantiene constante. Al insertar las filas en la tabla de cambio, el proceso de captura omite esas columnas que no aparecen en la lista de columnas capturadas asociadas con 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 en 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 de smallint, comprendido entre -32.768 y 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 la información sobre esos cambios en el 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 confirmaron en la tabla de origen, aunque la confirmación de las entradas de la tabla de cambios se debe realizar normalmente en un grupo de cambios en lugar de para una sola entrada.

Dentro de la entrada de la tabla de cambios, la columna __$start_lsn se usa para registrar el LSN de confirmación que se asocia al cambio en la tabla de origen, y la columna __$seqval se usa para ordenar el cambio dentro de su transacción. 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 la información de los cambios en el registro de transacciones, es importante tener en cuenta que las entradas de la tabla de cambios no aparecen sincrónicamente con los cambios correspondientes de la tabla de origen. 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.

Vea también

Referencia

sys.sp_cdc_enable_table (Transact-SQL)

sys.sp_cdc_get_ddl_history (Transact-SQL)