Activer la capture de données modifiées (CDC)

Cette page explique comment activer la capture des données modifiées (CDC) dans Cloud SQL pour SQL Server. Cette fonctionnalité est disponible pour les bases de données de vos instances.

La CDC vous permet de capturer de nombreux types de modifications. Pour en savoir plus sur l'activation et la désactivation de la CDC, consultez la documentation Microsoft.

Une fois que vous êtes connecté à une instance, l'utilisateur sqlserver peut effectuer de nombreuses opérations CDC.

Consultez également la page Utiliser les données de modification.

Avant de commencer

Avant de mettre en œuvre la CDC sur une instance, consultez toutes les informations qui figurent sur cette page.

Confirmer la disponibilité des fonctionnalités

La CDC est disponible pour les versions de base de données Cloud SQL pour SQL Server suivantes :

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

Activer la CDC et démarrer les tâches de capture CDC

Votre base de données dispose des procédures stockées suivantes, destinées à être utilisées par l'utilisateur sqlserver :

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

Activer la CDC

Pour activer cette fonctionnalité pour une base de données, exécutez la procédure stockée requise et transmettez le nom de la base de données. Exemple :

EXEC msdb.dbo.gcloudsql_cdc_enable_db 'DATABASE_NAME'

Désactiver la CDC

Pour désactiver cette fonctionnalité pour une base de données, exécutez une commande telle que celle-ci :

EXEC msdb.dbo.gcloudsql_cdc_disable_db 'DATABASE_NAME'

Lancer des tâches de capture CDC

Une fois la CDC activée, des tâches sont créées pour la capture et le nettoyage. Les tâches ne sont pas visibles par l'utilisateur sqlserver dans SQL Server Management Studio (SSMS). Toutefois, vous pouvez modifier les tâches à l'aide de procédures stockées intégrées. En outre, les tâches sont visibles via la procédure stockée suivante :

Pour lancer une tâche de nettoyage, vous pouvez utiliser la commande suivante :

EXEC sys.sp_cdc_start_job @job_type = N'cleanup'

Pour modifier les paramètres de la tâche, vous pouvez utiliser une commande semblable à celle-ci :

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

Pour plus d'informations sur le démarrage et la modification des tâches, consultez les ressources suivantes :

Voir aussi sys.sp_cdc_add_job.

Activer la CDC pour une table

Une fois que vous avez activé la CDC pour une base de données, tout utilisateur disposant de l'accès dbo (propriétaire de la base de données) peut configurer le suivi des tables de la base de données.

Pour en savoir plus sur les commandes et les options standards CDC, consultez la page Activer et désactiver la capture de données modifiées.

Suivre les modifications dans une table

Pour suivre une table, utilisez la procédure sys.sp_cdc_enable_table stockée.

Par exemple, vous pouvez spécifier une commande semblable à celle-ci :

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

Vérifier si la CDC est activée sur une table

Pour vérifier si la CDC est activée sur une table, utilisez la procédure sys.sp_cdc_help_change_data_capture stockée.

Par exemple, vous pouvez spécifier une commande semblable à celle-ci :

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

Interroger les modifications via une table de modifications CDC

Pour afficher les modifications apportées aux CDC dans une table, utilisez une requête SELECT sur la table qui est automatiquement créée lorsque la CDC est activée sur cette table.

La table est dénommée comme suit :

<schema>_<table_name>_CT

Par exemple, vous pouvez spécifier une commande semblable à celle-ci :

SELECT * FROM cdc.dbo_customer_CT

Activer la CDC sur une table avec une instance de capture spécifiée

Pour suivre une table avec une "instance de capture", utilisez la procédure stockée sys.sp_cdc_enable_table.

Par exemple, vous pouvez spécifier une commande semblable à celle-ci :

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

Interroger toutes les modifications d'une instance de capture

Pour afficher les modifications CDC apportées à une table au sein d'une "instance de capture", utilisez la procédure stockée cdc.fn_cdc_get_all_changes_<capture_instance>.

Par exemple, vous pouvez spécifier une instruction SQL semblable à la suivante :

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');

Désactiver la CDC pour une table

Pour désactiver le suivi CDC pour une table, utilisez la procédure stockée sys.sp_cdc_disable_table. Spécifiez une instance de capture pour la désactiver. Vous pouvez également spécifier une instance de capture en tant que 'all'.

Par exemple, vous pouvez spécifier une commande semblable à la suivante pour désactiver la CDC pour la table :

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

Supprimer une base de données avec la CDC activée

Si la CDC est activée sur une base de données et que vous essayez de la supprimer, vous pouvez rencontrer des erreurs. Dans ce cas, désactivez la CDC sur la base de données, puis supprimez la base de données.

Par exemple, vous pouvez spécifier une commande semblable à la suivante pour désactiver et supprimer une base de données :

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

Si vous ne pouvez pas supprimer la base de données, car elle contient des connexions ouvertes, utilisez la requête suivante pour les afficher :

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

Fermez toutes les connexions ouvertes. Désactivez la CDC sur la base de données, puis supprimez la base de données.

Importer une base de données compatible CDC

Lors de l'importation d'une base de données compatible CDC, Cloud SQL pour SQL Server conserve l'option KEEP_CDC activée et crée automatiquement des tâches de capture et de nettoyage avec les paramètres par défaut.