Habilitar la captura de datos de cambios (CDC)

En esta página se describe cómo habilitar la captura de datos modificados (CDC) en Cloud SQL para SQL Server. Esta función está disponible para las bases de datos de tus instancias.

La CDC te permite registrar muchos tipos de cambios. Para obtener información sobre cómo habilitar e inhabilitar CDC, consulta la documentación de Microsoft.

Después de conectarte a una instancia, el sqlserver usuario puede realizar muchas operaciones de CDC.

Consulte también Trabajar con datos de cambios.

Antes de empezar

Antes de implementar CDC en una instancia, consulta toda la información de esta página.

Confirmar la disponibilidad de la función

La CDC está disponible en las siguientes versiones de la base de datos de Cloud SQL para SQL Server:

  • SQL Server 2022 Standard
  • SQL Server 2022 Enterprise
  • SQL Server 2019 Standard
  • SQL Server 2019 Enterprise
  • SQL Server 2017 Standard
  • SQL Server 2017 Enterprise

Habilitar CDC e iniciar tareas de captura de CDC

Tu base de datos tiene los siguientes procedimientos almacenados para que los use el sqlserver usuario:

  • msdb.dbo.gcloudsql_cdc_enable_db
  • msdb.dbo.gcloudsql_cdc_disable_db

Activar CDC

Para activar esta función en una base de datos, ejecuta el procedimiento almacenado necesario e introduce el nombre de la base de datos. Por ejemplo:

EXEC msdb.dbo.gcloudsql_cdc_enable_db 'DATABASE_NAME'

Desactivar CDC

Para desactivar esta función en una base de datos, ejecuta un comando como el siguiente:

EXEC msdb.dbo.gcloudsql_cdc_disable_db 'DATABASE_NAME'

Iniciar tareas de captura de CDC

Una vez habilitado el CDC, se crean trabajos para la captura y la limpieza. Los trabajos no son visibles para el usuario sqlserver en SQL Server Management Studio (SSMS). Sin embargo, puede modificar los trabajos mediante procedimientos almacenados integrados. Además, los trabajos se pueden ver mediante el siguiente procedimiento almacenado:

Para iniciar una tarea de limpieza, puedes usar el siguiente comando:

EXEC sys.sp_cdc_start_job @job_type = N'cleanup'

Para cambiar los parámetros del trabajo, puedes usar un comando similar al siguiente: por ejemplo:

EXEC sys.sp_cdc_change_job  @job_type = N'capture',
        @maxtrans = 20,
        @pollinginterval = NULL,
        @maxscans = NULL,
        @continuous = NULL

Para obtener más información sobre cómo iniciar y cambiar tareas, consulta lo siguiente:

Consulta también sys.sp_cdc_add_job.

Habilitar CDC en una tabla

Una vez que hayas activado CDC en una base de datos, cualquier usuario con acceso dbo (propietario de la base de datos) podrá configurar el seguimiento de las tablas de la base de datos.

Para obtener información sobre los comandos y las opciones estándar de CDC, consulta Habilitar e inhabilitar la captura de datos de cambios.

Registrar cambios en una tabla

Para monitorizar una tabla, usa el procedimiento almacenado sys.sp_cdc_enable_table.

Por ejemplo, puedes especificar un comando similar al siguiente:

EXEC sys.sp_cdc_enable_table
  @source_schema = N'dbo',
  @source_name = N'customer',
  @role_name = N'CDC'

Comprobar si CDC está habilitado en una tabla

Para comprobar si CDC está habilitado en una tabla, usa el procedimiento almacenado sys.sp_cdc_help_change_data_capture.

Por ejemplo, puedes especificar un comando similar al siguiente:

EXECUTE sys.sp_cdc_help_change_data_capture
  @source_schema = N'dbo',
  @source_name = N'customer'

Consultar cambios mediante una tabla de cambios de CDC

Para ver los cambios de CDC realizados en una tabla, usa una consulta SELECT en la tabla que se crea automáticamente cuando se habilita CDC en esa tabla.

La tabla se llama de la siguiente manera:

<schema>_<table_name>_CT

Por ejemplo, puedes especificar un comando similar al siguiente:

SELECT * FROM cdc.dbo_customer_CT

Habilitar CDC en una tabla con una instancia de captura especificada

Para monitorizar una tabla con una "instancia de captura", usa el procedimiento almacenado sys.sp_cdc_enable_table.

Por ejemplo, puedes especificar un comando similar al siguiente:

EXEC sys.sp_cdc_enable_table
    @source_schema = N'dbo',
    @source_name = N'customer',
    @role_name = N'CDC',
    @capture_instance = N'customer_cdc',
    @supports_net_changes = 1

Consultar todos los cambios de una instancia de captura

Para ver los cambios de CDC realizados en una tabla de una "instancia de captura", usa el procedimiento almacenado cdc.fn_cdc_get_all_changes_<capture_instance>.

Por ejemplo, puede especificar una instrucción SQL similar a la siguiente:

DECLARE @from_lsn binary(10), @to_lsn binary(10)
SET @from_lsn = sys.fn_cdc_get_min_lsn(N'customer_cdc')
SET @to_lsn = sys.fn_cdc_get_max_lsn()
SELECT * FROM cdc.fn_cdc_get_all_changes_customer_cdc(@from_lsn, @to_lsn, N'all');

Inhabilitar CDC en una tabla

Para inhabilitar el seguimiento de CDC en una tabla, usa el procedimiento almacenado sys.sp_cdc_disable_table. Especifica una instancia de captura para inhabilitarla. También puedes especificar una instancia de captura como 'all'.

Por ejemplo, puede especificar un comando similar al siguiente para inhabilitar CDC en la tabla:

EXEC sys.sp_cdc_disable_table
  @source_schema = N'dbo',
  @source_name = N'customer',
  @capture_instance = N'all'

Eliminar una base de datos con CDC habilitado

Si la función CDC está habilitada en una base de datos y intentas eliminarla, es posible que se produzcan errores. Si esto ocurre, inhabilita CDC en la base de datos y, a continuación, elimina la base de datos.

Por ejemplo, puedes especificar un comando similar al siguiente para inhabilitar y eliminar una base de datos:

EXEC msdb.dbo.gcloudsql_cdc_disable_db 'DATABASE_NAME'
DROP DATABASE 'DATABASE_NAME'

Si no puedes eliminar la base de datos porque tiene conexiones abiertas, usa la siguiente consulta para ver esas conexiones:

select db_name(dbid),* from sys.sysprocesses where db_name(dbid)= 'DATABASE_NAME'

Cierra todas las conexiones abiertas. Inhabilita CDC en la base de datos y, a continuación, elimina la base de datos.

Importar una base de datos con CDC habilitada

Al importar una base de datos con CDC habilitado, Cloud SQL para SQL Server mantiene habilitada la marca KEEP_CDC y crea automáticamente tareas de captura y limpieza con parámetros predeterminados.