Abilita Change Data Capture (CDC)

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

La CDC consente di acquisire molti tipi di modifiche. Per informazioni su come attivare e disattivare la funzionalità CDC, consulta la documentazione di Microsoft.

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

Consulta anche Utilizzare i dati delle modifiche.

Prima di iniziare

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

Verificare la disponibilità delle funzionalità

La tecnologia 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

Attivazione di CDC e avvio dei job di acquisizione CDC

Il database contiene le seguenti stored procedure, da utilizzare dall'utente sqlserver:

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

Attivare la funzionalità CDC

Per attivare questa funzionalità per un database, esegui la procedura memorizzata necessaria e passa il nome del database. Ad esempio:

EXEC msdb.dbo.gcloudsql_cdc_enable_db 'DATABASE_NAME'

Disattivare il CDC

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

EXEC msdb.dbo.gcloudsql_cdc_disable_db 'DATABASE_NAME'

Avvia i job di acquisizione CDC

Dopo l'attivazione del CDC, vengono creati 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 le procedure memorizzate incorporate. Inoltre, i job sono visualizzabili 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 su come avviare e modificare i job, consulta quanto segue:

Vedi anche sys.sp_cdc_add_job.

Attivazione della CDC per una tabella

Dopo aver attivato la copia dei dati incrementale 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 disattivare 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 la CDC è attivata in una tabella

Per verificare se la funzionalità CDC è attivata in una tabella, utilizza la procedura memorizzata 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'

Esegui query sulle modifiche tramite una tabella delle modifiche CDC

Per visualizzare le modifiche CDC apportate a una tabella, utilizza una query SELECT sulla tabella che viene creata automaticamente quando la funzionalità CDC è attivata nella 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

Attivare la CDC in una tabella con un'istanza di acquisizione specificata

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

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 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 procedura memorizzata cdc.fn_cdc_get_all_changes_<capture_instance>.

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

Disattivazione di CDC per una tabella

Per disattivare il monitoraggio CDC per una tabella, utilizza la procedura memorizzata sys.sp_cdc_disable_table. Specifica un'istanza di acquisizione per disattivarla. In alternativa, specifica un'istanza di acquisizione come 'all'.

Ad esempio, puoi specificare un comando simile al seguente per disattivare la 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 tecnologia CDC è attivata per un database e provi a eliminarlo, potresti riscontrare degli errori. In questo caso, disabilita la tecnologia CDC per il database ed eliminalo.

Ad esempio, puoi specificare un comando simile al seguente per disattivare 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 visualizzarle:

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

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

Importazione di un database abilitato per CDC

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