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 tue istanze.

La tecnologia CDC consente di acquisire molti tipi di modifiche. Per informazioni sull'abilitazione e la disabilitazione della CDC, consulta la documentazione di Microsoft.

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

Vedi anche Utilizzare i dati delle modifiche.

Prima di iniziare

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

Conferma 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

Abilitazione di CDC e avvio dei job di acquisizione CDC

Il database include le seguenti stored procedure, che possono essere utilizzate dall'utente sqlserver:

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

Attiva CDC

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

EXEC msdb.dbo.gcloudsql_cdc_enable_db 'DATABASE_NAME'

Disattiva CDC

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

EXEC msdb.dbo.gcloudsql_cdc_disable_db 'DATABASE_NAME'

Avvia job di acquisizione CDC

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

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 sulla modifica dei job, vedi quanto segue:

Vedi anche sys.sp_cdc_add_job.

Attivazione della CDC per una tabella

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

Per informazioni sulle opzioni e sui comandi standard del CDC, consulta Attivare e disattivare la funzionalità Change Data Capture.

Tenere traccia delle 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'

Controlla se la CDC è abilitata su una tabella

Per verificare se la CDC è abilitata su 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'

Query sulle modifiche tramite una tabella delle modifiche CDC

Per visualizzare le modifiche apportate alla CDC in una tabella, utilizza una query SELECT nella tabella, creata automaticamente quando la CDC è abilitata su quella tabella.

Il nome della tabella è il seguente:

<schema>_<table_name>_CT

Ad esempio, puoi specificare un comando simile al seguente:

SELECT * FROM cdc.dbo_customer_CT

Abilita CDC su una tabella con un'istanza di acquisizione specificata

Per monitorare una tabella con un'"istanza di acquisizione", utilizza la procedura archiviata 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

Esegui una 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 stored procedure cdc.fn_cdc_get_all_changes_<capture_instance>.

Ad esempio, potresti 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');

Disattivazione della CDC per una tabella

Per disabilitare il monitoraggio CDC per una tabella, utilizza la procedura archiviata in 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'

Eliminazione di un database abilitato per CDC

Se la CDC è abilitata per un database e provi a eliminarlo, potrebbero verificarsi errori. In questo caso, disabilita la 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 le connessioni:

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

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

Importazione di un database abilitato per CDC

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