Abilita Change Data Capture (CDC)

Questa pagina descrive come abilitare Change Data Capture (CDC) in Cloud SQL per SQL Server. Questa funzionalità è disponibile per i database delle istanze.

CDC consente di acquisire molti tipi di modifiche. Per informazioni su come abilitare e disabilitare CDC, consulta la documentazione di Microsoft.

Dopo aver eseguito la connessione a un' istanza, l'utente sqlserver può eseguire molte operazioni CDC.

Consulta anche Utilizzare i dati di modifica.

Prima di iniziare

Prima di implementare CDC in un'istanza, esamina tutte le informazioni riportate in questa pagina.

Verifica la disponibilità della funzionalità

CDC è disponibile per le seguenti versioni del database Cloud SQL per 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

Abilitare CDC e avviare i job di acquisizione CDC

Il database ha le seguenti stored procedure, da utilizzare per l'utente sqlserver:

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

Attivare CDC

Per attivare questa funzionalità per un database, esegui la stored procedure necessaria e inserisci il nome del database. Ad esempio:

EXEC msdb.dbo.gcloudsql_cdc_enable_db 'DATABASE_NAME'

Disattivare CDC

Per disattivare questa funzionalità per un database, esegui un comando come il seguente:

EXEC msdb.dbo.gcloudsql_cdc_disable_db 'DATABASE_NAME'

Avviare i job di acquisizione CDC

Dopo aver abilitato CDC, vengono creati job per l'acquisizione e la pulizia. I job non sono visibili all'utente sqlserver in SQL Server Management Studio (SSMS). Tuttavia, puoi modificare i job utilizzando le stored procedure integrate. Inoltre, i job sono visibili tramite la seguente stored procedure:

Per avviare un job di pulizia, puoi utilizzare il seguente comando:

EXEC sys.sp_cdc_start_job @job_type = N'cleanup'

Per modificare i parametri del job, puoi utilizzare un comando simile al seguente, ad esempio:

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

Per ulteriori informazioni sull'avvio e la modifica dei job, consulta:

Consulta anche sys.sp_cdc_add_job.

Abilitare CDC per una tabella

Dopo aver attivato CDC per un database, qualsiasi utente con accesso dbo (proprietario del database) può configurare il monitoraggio delle tabelle nel database.

Per informazioni sui comandi e sulle opzioni CDC standard, consulta Abilitare e disabilitare Change Data Capture.

Monitorare le modifiche in una tabella

Per monitorare una tabella, utilizza la stored procedure sys.sp_cdc_enable_table.

Ad esempio, puoi specificare un comando simile al seguente:

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

Verificare se CDC è abilitato in una tabella

Per verificare se CDC è abilitato in una tabella, utilizza la stored procedure sys.sp_cdc_help_change_data_capture.

Ad esempio, puoi specificare un comando simile al seguente:

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

Eseguire query sulle modifiche tramite una tabella di modifica CDC

Per visualizzare le modifiche CDC apportate a una tabella, utilizza una query SELECT sulla tabella creata automaticamente quando CDC è abilitato in quella tabella.

La tabella è denominata come segue:

<schema>_<table_name>_CT

Ad esempio, puoi specificare un comando simile al seguente:

SELECT * FROM cdc.dbo_customer_CT

Abilitare CDC in una tabella con un'istanza di acquisizione specificata

Per monitorare una tabella con un'"istanza di acquisizione", utilizza la stored procedure sys.sp_cdc_enable_table.

Ad esempio, puoi specificare un comando simile al seguente:

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

Eseguire query su tutte le modifiche all'interno di un'istanza di acquisizione

Per visualizzare le modifiche CDC apportate a una tabella all'interno di un'"istanza di acquisizione", utilizza la cdc.fn_cdc_get_all_changes_<capture_instance> stored procedure.

Ad esempio, puoi specificare un'istruzione SQL simile alla seguente:

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

Disabilitare CDC per una tabella

Per disabilitare il monitoraggio CDC per una tabella, utilizza la stored procedure sys.sp_cdc_disable_table. Specifica un'istanza di acquisizione per disabilitarla. In alternativa, specifica un' istanza di acquisizione come 'all'.

Ad esempio, puoi specificare un comando simile al seguente per disabilitare CDC per la tabella:

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

Eliminare un database con CDC abilitato

Se CDC è abilitato per un database e provi a eliminarlo, potresti riscontrare errori. In questo caso, disabilita CDC per il database, quindi elimina il database.

Ad esempio, puoi specificare un comando simile al seguente per disabilitare ed eliminare un database:

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

Se non riesci a eliminare il database perché ha connessioni aperte, utilizza la seguente query per visualizzare queste connessioni:

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

Chiudi tutte le connessioni aperte. Disabilita CDC per il database, quindi elimina il database.

Importare un database con CDC abilitato

Quando importi un database con CDC abilitato, Cloud SQL per SQL Server mantiene abilitato il flag KEEP_CDC e crea automaticamente job di acquisizione e pulizia con i parametri predefiniti.