Change Data Capture (CDC) con database SQL di Azure

Si applica a:database SQL di Azure

Questo articolo illustra come change data capture (CDC) viene implementato in database SQL di Azure per registrare l'attività in un database quando le tabelle e le righe sono state modificate. Per informazioni dettagliate sulla funzionalità CDC, inclusa la modalità di implementazione in SQL Server e Istanza gestita di SQL di Azure, vedere CDC con SQL Server.

Panoramica

In database SQL di Azure, un'utilità di pianificazione change data capture sostituisce i processi di SQL Server Agent che acquisisce e pulisce i dati delle modifiche per le tabelle di origine. L'utilità di pianificazione esegue automaticamente i processi di acquisizione e pulizia nell'ambito del database, garantendo affidabilità e prestazioni senza dipendenze esterne. Gli utenti mantengono l'opzione per avviare manualmente i processi di acquisizione e pulizia in base alle esigenze.

Un buon esempio di consumer di dati usato da questa tecnologia è un'applicazione di estrazione, trasformazione e caricamento (ETL). Un'applicazione ETL carica in modo incrementale i dati delle modifiche dalle tabelle di origine di SQL Server a un data warehouse o a un data mart. Anche se la rappresentazione delle tabelle di origine all'interno del data warehouse deve riflettere le modifiche apportate alle tabelle di origine, una tecnologia end-to-end che aggiorna una replica dell'origine non è appropriata. È necessario invece un flusso affidabile di dati delle modifiche strutturato in modo che i consumer possano applicarlo a rappresentazioni di destinazione dei dati diverse. SQL Server Change Data Capture offre questa tecnologia.

Per altre informazioni sull'acquisizione dei dati delle modifiche in database SQL di Azure, fare riferimento a questo episodio relativo all'esposizione dei dati:

Flusso di dati

La figura seguente illustra il flusso di dati principale per Change Data Capture con database SQL di Azure:

Diagram of a flow chart that depicts data flow for change data capture.

Prerequisiti

Autorizzazioni

Il db_owner ruolo è necessario per abilitare Change Data Capture per database SQL di Azure.

database SQL di Azure requisiti di calcolo

È possibile abilitare CDC in database SQL di Azure per qualsiasi livello di servizio all'interno del modello di acquisto basato su vCore, sia per i database singoli che per i pool elastici.

Per i database nel modello di acquisto DTU, CDC è supportato per i database nel livello S3 o versione successiva. I livelli subcore (Basic, S0, S1, S2) non sono supportati per CDC.

Abilitare CDC per database SQL di Azure

Prima di poter creare un'istanza di acquisizione per singole tabelle, è necessario abilitare CDC per il database SQL di Azure.

Per abilitare CDC, connettersi al database SQL di Azure tramite Azure Data Studio o SQL Server Management Studio (SSMS). Aprire una nuova finestra di query, quindi abilitare CDC eseguendo il T-SQL seguente:

EXEC sys.sp_cdc_enable_db;
GO

Nota

Per determinare se un database è già abilitato, eseguire una query sulla colonna is_cdc_enabled nella vista del catalogo sys.databases.

Quando Change Data Capture è abilitato per un database, vengono create le cdc schemacdc usertabelle di metadati , e altri oggetti di sistema per il database. cdc schema Contiene le tabelle dei metadati change data capture e, dopo l'abilitazione di cdc per le tabelle di origine, le singole tabelle delle modifiche fungono da repository per i dati delle modifiche. cdc schema Contiene anche le funzioni di sistema associate usate per eseguire query sui dati delle modifiche.

Importante

Change Data Capture richiede l'uso cdc schema esclusivo di e cdc user. Se uno schema o un utente di database denominato cdc attualmente esiste in un database, non è possibile abilitare cdc per il database finché lo schema e/o l'utente non viene eliminato o rinominato.

Abilitare CDC per una tabella

Dopo aver abilitato CDC per il database SQL di Azure, è possibile abilitare CDC a livello di tabella selezionando una o più tabelle per tenere traccia delle modifiche ai dati. Creare un'istanza di acquisizione per singole tabelle di origine usando la stored procedure sys.sp_cdc_enable_table.

Per abilitare CDC per una tabella, eseguire il T-SQL seguente:

EXEC sys.sp_cdc_enable_table
    @source_schema = N'SchemaName',
    @source_name = N'TableName',
    @role_name = NULL;
GO

Suggerimento

L'esempio precedente non usa un @role_name esplicito impostando il parametro su NULL, ma è possibile usare un ruolo di controllo per limitare l'accesso ai dati delle modifiche.

Colonne nella tabella di origine da acquisire

Per impostazione predefinita, tutte le colonne della tabella di origine vengono identificate come colonne acquisite. Se è necessario tenere traccia solo di un subset di colonne, ad esempio per motivi di privacy o prestazioni, usare il parametro @captured_column_list per specificare il subset di colonne.

Per abilitare CDC per un elenco specifico di colonne in una tabella, eseguire il codice T-SQL seguente:

EXEC sys.sp_cdc_enable_table
    @source_schema = N'SchemaName',
    @source_name = N'TableName',
    @role_name = NULL,
    @captured_column_list = N'Column1, Column2, Column3';
GO

Suggerimento

Si noti che l'esempio precedente non usa un @role_name esplicito e impostando il parametro su NULL, ma è possibile usare un ruolo di controllo per limitare l'accesso ai dati delle modifiche.

Ruolo per controllare l'accesso a una tabella delle modifiche

Lo scopo del ruolo specificato consiste nel controllare l'accesso ai dati delle modifiche. Il ruolo specificato può essere un ruolo predefinito del server esistente o un ruolo del database. Se il ruolo specificato non esiste già, viene creato automaticamente un ruolo del database con tale nome. Gli utenti devono disporre dell'autorizzazione edizione Standard LECT per tutte le colonne acquisite della tabella di origine. Inoltre, quando viene specificato un ruolo, gli utenti che non sono membri del ruolo sysadmin o db_owner devono anche essere membri del ruolo specificato.

Per abilitare CDC per la tabella che specifica un ruolo di controllo, eseguire il T-SQL seguente:

EXEC sys.sp_cdc_enable_table
    @source_schema = N'SchemaName',
    @source_name = N'TableName',
    @role_name = N'RoleName'
GO

Se non si vuole usare un ruolo di controllo, impostare in modo esplicito il parametro @role_name su NULL.

Funzione su cui eseguire una query per le modifiche nette

Un'istanza di acquisizione include sempre una funzione con valori di tabella per restituire tutte le voci della tabella delle modifiche che si sono verificate entro un intervallo definito. Questa funzione viene denominata aggiungendo il nome dell'istanza di acquisizione a cdc.fn_cdc_get_all_changes_. Per altre informazioni, vedere cdc.fn_cdc_get_all_changes.

Se il parametro @supports_net_changes è impostato su 1, viene generata anche una funzione delle modifiche delta per l'istanza di acquisizione. Questa funzione restituisce solo una modifica per ogni riga distinta modificata nell'intervallo specificato nella chiamata. Per altre informazioni, vedere cdc.fn_cdc_get_net_changes.

Per supportare le query sulle modifiche delta, è necessario che la tabella di origine disponga di una chiave primaria o di un indice univoco per identificare le righe in modo univoco. Se viene usato un indice univoco, il nome dell'indice deve essere specificato con il parametro @index_name . Le colonne definite nella chiave primaria o nell'indice univoco devono essere incluse nell'elenco delle colonne di origine da acquisire.

Per abilitare CDC per una tabella con supporto per le modifiche nette, eseguire il T-SQL seguente:

EXEC sys.sp_cdc_enable_table
    @source_schema = N'SchemaName',
    @source_name = N'TableName',
    @role_name = NULL,
    @supports_net_changes = 1
GO

Se Change Data Capture è abilitato in una tabella con una chiave primaria esistente e il parametro @index_name non viene usato per identificare un indice univoco alternativo, la funzionalità Change Data Capture usa la chiave primaria. Le modifiche successive alla chiave primaria non sono consentite senza prima disabilitare Change Data Capture per la tabella. Questa regola è sempre valida, indipendentemente dal fatto che durante la configurazione di Change Data Capture sia stato o meno richiesto il supporto per le query sulle modifiche delta.

Se non è presente alcuna chiave primaria in una tabella al momento in cui è abilitata per Change Data Capture, l'aggiunta successiva di una chiave primaria viene ignorata da Change Data Capture. Poiché Change Data Capture non usa una chiave primaria creata dopo l'abilitazione della tabella, le colonne chiave e chiave possono essere rimosse senza restrizioni.

Per altre informazioni sugli argomenti della sys.sp_cdc_enable_table stored procedure, vedere sys.sp_cdc_enable_table (Transact-SQL).

Suggerimento

Per determinare se una tabella di origine è già stata abilitata per Change Data Capture, esaminare la is_tracked_by_cdc colonna nella vista del sys.tables catalogo.

Disabilitare CDC per database SQL di Azure

La disabilitazione di CDC per il database SQL di Azure rimuove tutti i metadati di Change Data Capture associati, inclusi i processi di acquisizione e pulizia dell'utilità cdc usercdc schemadi pianificazione esterna. Tuttavia, tutti i ruoli di controllo creati da Change Data Capture non vengono rimossi automaticamente e devono essere eliminati in modo esplicito.

Nota

Per determinare se un database è abilitato, eseguire una query sulla is_cdc_enabled colonna nella vista del sys.databases catalogo.

Non è necessario disabilitare CDC per le singole tabelle prima di disabilitare CDC a livello di database.

Per disabilitare CDC a livello di database, eseguire il T-SQL seguente:

EXEC sys.sp_cdc_disable_db;
GO

Suggerimento

Dopo aver disabilitato CDC a livello di database, sarà necessario abilitare di nuovo CDC per le singole tabelle se si vuole usare ancora una volta la funzionalità CDC.

Gestire CDC

In database SQL di Azure CDC è una funzionalità fondamentale per tenere traccia e gestire le modifiche nelle tabelle di database. A differenza degli ambienti SQL Server tradizionali, database SQL di Azure usa un'utilità di pianificazione change data capture per gestire le attività CDC invece di basarsi sui processi di SQL Server Agent. Questa utilità di pianificazione avvia automaticamente processi di acquisizione e pulizia periodici per le tabelle CDC all'interno del database, garantendo affidabilità e prestazioni senza dipendenze esterne.

Acquisizione e pulizia cdc automatiche

Il processo di acquisizione CDC in database SQL di Azure funziona senza problemi, eseguendo ogni 20 secondi per tenere traccia delle modifiche in modo efficiente. Contemporaneamente, il processo di pulizia viene eseguito ogni ora, assicurandosi che le tabelle CDC rimangano ottimizzate. Gli utenti possono garantire che la gestione di CDC venga eseguita automaticamente senza intervento manuale.

Importante

Se un database serverless è abilitato e si trova in uno stato sospeso, CDC non viene eseguito. L'analisi CDC non influirà sulla funzionalità di utilizzo automatico.

Controllo CDC manuale

Mentre CDC viene eseguito automaticamente, gli utenti mantengono la flessibilità necessaria per eseguire operazioni CDC manuali su richiesta. Le procedure sp_cdc_scan e sp_cdc_cleanup_change_tables consentono di attivare le attività di acquisizione e pulizia in base alle esigenze.

Monitorare CDC

database SQL di Azure fornisce strumenti preziosi per monitorare le attività CDC. Due viste a gestione dinamica, sys.dm_cdc_log_scan_sessions e sys.dm_cdc_errors, offrono informazioni dettagliate sui processi CDC, garantendo una visibilità completa sulle modifiche dei dati.

Personalizzazione cdc

Mentre database SQL di Azure semplifica la gestione cdc, esistono alcune limitazioni:

  • La frequenza dei processi di acquisizione e pulizia cdc non può essere personalizzata.
  • I valori e continuous per i pollinginterval processi di acquisizione e pulizia non sono applicabili in database SQL di Azure.
  • La rimozione della voce del processo di acquisizione dalla cdc.cdc_jobs tabella non interrompe il processo di acquisizione in background.
  • L'eliminazione della voce del processo di pulizia arresta il processo di pulizia.
  • La cdc.cdc_jobs tabella risiede nello cdc schema, non msdb.

Nonostante queste limitazioni, è comunque possibile personalizzare le opzioni seguenti:

  • Eseguire una query sulla cdc.cdc_jobs tabella per i dettagli di configurazione correnti.
  • Modificare le maxtrans opzioni e maxscans usando la sp_cdc_change_job stored procedure.
  • Gestire i processi impiegando sp_cdc_drop_job e sp_cdc_add_job in base alle esigenze.

Considerazioni sulle prestazioni e raccomandazioni

L'abilitazione di Change Data Capture per database SQL di Azure ha un effetto sulle prestazioni paragonabile all'abilitazione di CDC per SQL Server o Istanza gestita di SQL di Azure. Tuttavia, diversi fattori influenzano l'effetto delle prestazioni quando si abilita CDC, tra cui:

  • Numero di tabelle abilitate per CDC nel database SQL di Azure.

  • Frequenza delle modifiche nelle tabelle rilevate o volume di transazioni. Le transazioni attive impediscono il troncamento del log fino a quando il commit della transazione e l'analisi CDC non viene aggiornata o la transazione viene interrotta. Questo potrebbe comportare il riempimento del log delle transazioni più del solito e deve essere monitorato in modo che il log delle transazioni non venga compilato.

  • Assicurarsi che nel database di origine sia disponibile spazio libero, perché gli artefatti CDC ,ad esempio tabelle CT, cdc_jobs e così via, vengono archiviati nello stesso database.

  • Indipendentemente dal fatto che sia disponibile un database singolo o che faccia parte di un pool elastico.

  • I database in una risorsa di condivisione del pool elastico,ad esempio lo spazio su disco, pertanto l'abilitazione di CDC in più database comporta il rischio di raggiungere le dimensioni massime del disco del pool elastico. Monitorare le risorse, ad esempio CPU, memoria e velocità effettiva del log. Per altre informazioni, vedere Gestione delle risorse in pool elastici densi.

  • Quando si gestiscono i database nei pool elastici, è fondamentale considerare il numero di tabelle abilitate per CDC e il numero di database a cui appartengono tali tabelle. È consigliabile valutare il carico di lavoro e adottare misure necessarie, ad esempio il ridimensionamento del pool elastico. Per altre informazioni, vedere Ridimensionare le risorse del pool elastico in database SQL di Azure.

Importante

Queste considerazioni sono indicazioni generali. Per indicazioni precise per ottimizzare le prestazioni per un carico di lavoro specifico, contattare il supporto Tecnico Microsoft.

Quando si usa CDC con database SQL di Azure, prendere in considerazione le procedure consigliate seguenti:

  • Testare accuratamente il carico di lavoro prima di abilitare CDC nei database nell'ambiente di produzione per determinare l'SLO appropriato per il carico di lavoro. Per altre informazioni sulle dimensioni di calcolo database SQL di Azure, vedere Livelli di servizio.

  • Valutare la possibilità di ridimensionare il numero di vCore o di passare a un livello di database superiore, ad esempio Hyperscale, per mantenere il livello di prestazioni precedente dopo l'abilitazione di CDC nel database SQL di Azure. Per altre informazioni, vedere modello di acquisto vCore - database SQL di Azure e livello di servizio Hyperscale.

  • Monitorare attentamente l'utilizzo dello spazio. Per altre informazioni, vedere Gestire lo spazio file per i database in database SQL di Azure.

  • Monitorare la frequenza di generazione dei log. Per altre informazioni, vedere Consumo di risorse in base ai carichi di lavoro degli utenti e ai processi interni.

  • I processi di analisi e pulizia CDC fanno parte del normale carico di lavoro del database (anche usando le risorse). A seconda del volume delle transazioni, la riduzione delle prestazioni può essere sostanziale a causa dei processi di analisi e pulizia che non mantengono il carico di lavoro man mano che vengono aggiunte intere righe alle tabelle delle modifiche e per le operazioni di aggiornamento, è inclusa anche l'immagine preliminare. È consigliabile valutare il carico di lavoro e adottare le misure necessarie in base alle raccomandazioni precedenti. Per altre informazioni, vedere la sezione relativa alla gestione cdc in questo articolo.

Importante

L'utilità di pianificazione esegue automaticamente l'acquisizione e la pulizia all'interno del database SQL. Il processo di acquisizione CDC viene eseguito ogni 20 secondi e il processo di pulizia viene eseguito ogni ora.

  • Per evitare un aumento della latenza, verificare che il numero di database abilitati per CDC non superi il numero di vCore allocati a un pool elastico. Per altre informazioni, vedere Gestione delle risorse in pool elastici densi.

  • In base al carico di lavoro e al livello di prestazioni, è consigliabile modificare il periodo di conservazione CDC impostando un numero inferiore rispetto al valore predefinito di tre giorni per garantire che il processo di pulizia possa mantenere il passo con le modifiche nella tabella delle modifiche. Mantenere un periodo di conservazione inferiore durante il monitoraggio delle dimensioni del database è una procedura consigliata.

  • Non viene fornito alcun contratto di servizio per quando le modifiche vengono popolate nelle tabelle delle modifiche. Anche la latenza di sottosecondo non è supportata.

Problemi noti e limitazioni

Troncamento del log aggressivo

Quando si abilita Change Data Capture (CDC) in database SQL di Azure, la funzionalità di troncamento aggressivo del log di Ripristino accelerato del database (ADR) è disabilitata. Ciò è dovuto al fatto che l'analisi di CDC accede al log delle transazioni del database. Le transazioni attive impediscono il troncamento del log delle transazioni fino a quando non viene eseguito il commit della transazione e l'analisi CDC viene interrotta. Questo potrebbe comportare il riempimento del log delle transazioni più del solito e deve essere monitorato in modo che il log delle transazioni non venga compilato.

Quando si abilita CDC, è consigliabile usare l'opzione ripristinabile per l'indice quando si crea o si ricompila un indice. Gli indici ripristinabili non mantengono aperta una transazione con esecuzione prolungata e consentono il troncamento del log durante l'operazione per una migliore gestione dello spazio di log. Per altre informazioni, vedere Linee guida per le operazioni sugli indici online - Considerazioni sugli indici ripristinabili.

database SQL di Azure livello di servizio

Anche se CDC è supportato per database e pool elastici in qualsiasi livello di servizio all'interno del modello di acquisto basato su vCore, i database inferiori a S3 (ad esempio Basic, S0, S1, S2) non sono supportati nel modello di acquisto DTU.

limiti del log database SQL di Azure

Il ripristino accelerato del database e CDC non sono compatibili in database SQL di Azure. Ciò è dovuto al fatto che l'analisi CDC accede attivamente e interagisce con il log delle transazioni del database, che può essere in conflitto con il comportamento aggressivo di troncamento del log di AdR.

Per evitare problemi di scalabilità e gestione dello spazio, monitorare attentamente i database SQL di Azure e prendere in considerazione il ridimensionamento a un livello di database superiore e consentire al log delle transazioni di aumentare in base alle esigenze del carico di lavoro.

Suggerimento

Se il carico di lavoro richiede prestazioni complessive più elevate a causa di una maggiore velocità effettiva del log delle transazioni e tempi di commit delle transazioni più veloci, usare il livello di servizio Hyperscale.

Personalizzazione di acquisizione e pulizia

La configurazione della frequenza dell'acquisizione e dei processi di pulizia per CDC in database SQL di Azure non è possibile. L'utilità di pianificazione esegue automaticamente l'acquisizione e la pulizia.

Failover in database SQL di Azure

In caso di scenari di failover locale o geoDR, se il database ha abilitato CDC, il processo di acquisizione e pulizia delle modifiche dei dati verrà eseguito automaticamente nel nuovo database primario dopo il failover.

Microsoft Entra ID

Nota

Microsoft Entra ID era precedentemente noto come Azure Active Directory (Azure AD).

Se si crea un database in database SQL di Azure come utente di Microsoft Entra e si abilita CDC su di esso, un utente SQL (ad esempio, anche uno nel sysadmin ruolo) non è in grado di disabilitare/apportare modifiche agli artefatti CDC. Tuttavia, un altro utente di Microsoft Entra è in grado di abilitare/disabilitare CDC nello stesso database.

Analogamente, se si crea un database come utente SQL, l'abilitazione o la disabilitazione di Change Data Capture come utente di Microsoft Entra non funziona.

L'abilitazione di CDC ha esito negativo se si crea un database in database SQL di Azure come utente di Microsoft Entra, non abilitare CDC e quindi provare ad abilitare CDC dopo il ripristino del database.

Per risolvere questo problema, connettersi al database con l'account amministratore di Microsoft Entra ed eseguire il T-SQL seguente:

ALTER AUTHORIZATION ON DATABASE::[<restored_db_name>] TO [<azuread_admin_login_name>];

EXEC sys.sp_cdc_enable_db;

Ripristino temporizzato

Se è stato abilitato CDC nel database SQL di Azure come utente SQL, il ripristino temporizzato mantiene cdc nel database ripristinato, a meno che non venga ripristinato in un SLO del subcore. Se ripristinato nel subcore SLO, gli artefatti CDC non sono disponibili.

Se si abilita CDC nel database come utente di Microsoft Entra, non è possibile eseguire il ripristino temporizzato (PITR) in un SLO del subcore. Ripristinare il database nello stesso SLO o superiore dell'origine e quindi disabilitare CDC, se necessario.

Risoluzione dei problemi

Questa sezione fornisce indicazioni e procedure di risoluzione dei problemi associate a CDC in database SQL di Azure. Gli errori correlati a CDC potrebbero impedire il corretto funzionamento del processo di acquisizione e portare all'espansione del log delle transazioni del database.

Per esaminare questi errori, è possibile eseguire una query sulla vista a gestione dinamica sys.dm_cdc_errors. Se la sys.dm_cdc_errors visualizzazione a gestione dinamica restituisce errori, fare riferimento alla sezione seguente per comprendere i passaggi di mitigazione.

Nota

Per altre informazioni su un codice di errore specifico, vedere motore di database eventi ed errori.

Queste sono le diverse categorie di risoluzione dei problemi incluse in questa sezione:

Categoria Descrizione
Metadati modificati Include informazioni su come attenuare i problemi relativi a CDC quando la presentazione rilevata è stata modificata o eliminata.
Gestione dello spazio del database Include informazioni su come attenuare i problemi quando lo spazio del database è stato esaurito.
Limitazione cdc Include informazioni su come attenuare i problemi causati dalle limitazioni di CDC.

Metadati modificati

Errore 200/208 - Nome oggetto non valido

  • Causa: l'errore potrebbe verificarsi quando i metadati CDC sono stati eliminati. Affinché CDC funzioni correttamente, non è consigliabile modificare manualmente metadati CDC, ad esempio tabelle CDC schemadi modifica, stored procedure di sistema CDC, autorizzazioni predefinite cdc user (sys.database_principals) o rinominare cdc user.

  • Raccomandazione: per risolvere questo problema, è necessario disabilitare e riabilitare CDC per il database. Quando si abilita Change Data Capture per un database, viene creato lo schema cdc, l'utente cdc, le tabelle di metadati e altri oggetti di sistema per il database. È necessario riabilitare manualmente CDC per le singole tabelle dopo l'abilitazione di CDC per il database.

Nota

Gli oggetti trovati nella vista del catalogo di sistema sys.objects con is_ms_shipped=1 e schema_name=cdc non devono essere modificati o eliminati.

Errore 1202 - L'entità di database non esiste o l'utente non è membro

  • Causa: l'errore può verificarsi quando l'utente CDC è stato eliminato. Affinché CDC funzioni correttamente, non è consigliabile modificare manualmente metadati CDC, ad CDC schemaesempio , modificare tabelle, stored procedure di sistema CDC, autorizzazioni predefinite cdc user (sys.database_principals) o rinominare cdc user.

  • Raccomandazione: assicurarsi che l'utente cdc esista nel database e abbia anche il db_owner ruolo assegnato. Per creare l'utente cdc , vedere l'esempio Creare un utente cdc e assegnare il ruolo.

Errore 15517 - Non è possibile eseguire come entità di database perché l'entità di sicurezza non esiste

  • Causa: questo tipo di entità non può essere rappresentato o non si dispone dell'autorizzazione. L'errore può verificarsi quando i metadati CDC sono stati eliminati o non fanno più parte del db_owner ruolo. Affinché CDC funzioni correttamente, non è consigliabile modificare manualmente metadati CDC, ad CDC schemaesempio , modificare tabelle, stored procedure di sistema CDC, autorizzazioni predefinite cdc user (sys.database_principals) o rinominare cdc user.

  • Raccomandazione: assicurarsi che l'utente cdc esista nel database e abbia anche il db_owner ruolo assegnato. Per creare l'utente cdc , vedere l'esempio Creare un utente cdc e assegnare il ruolo.

Errore 18807 - Impossibile trovare un ID oggetto per la tabella del sistema di replica

  • Causa: questo errore si verifica quando SQL Server non riesce a trovare o accedere alla tabella di sistema di replica '%s'. Ciò potrebbe essere dovuto al fatto che la tabella è mancante o non raggiungibile. CDC per funzionare correttamente, non è consigliabile modificare manualmente metadati CDC, ad CDC schemaesempio , modificare tabelle, stored procedure di sistema CDC, autorizzazioni predefinite cdc user (sys.database_principals) o rinominare .cdc user

  • Raccomandazione: verificare che la tabella di sistema esista ed è accessibile eseguendo direttamente una query sulla tabella. Eseguire una query sul catalogo di sistema sys.objects , impostare la clausola predicato con is_ms_shipped=1 e schema_name=cdc per elencare tutti gli oggetti correlati a CDC. Se la query non restituisce oggetti, è necessario disabilitare e quindi riabilitare CDC per il database. L'abilitazione di Change Data Capture per un database crea le cdc schematabelle di cdc usermetadati , e altri oggetti di sistema per il database. È necessario riabilitare manualmente CDC per le singole tabelle dopo l'abilitazione di CDC per il database.

Errore 21050: solo i membri del ruolo predefinito del server sysadmin o db_owner possono eseguire questa operazione

  • Causa: l'utente cdc è stato rimosso dal ruolo del db_owner database o dal ruolo del sysadmin server.

  • Raccomandazione: assicurarsi che all'utente cdc sia assegnato il db_owner ruolo. Per creare l'utente cdc , vedere l'esempio Creare un utente cdc e assegnare il ruolo.

Gestione dello spazio del database

Errore 1105 - Non è stato possibile allocare spazio per l'oggetto nel database perché il filegroup è pieno

  • Causa: questo errore si verifica quando il filegroup primario di un database esaurisce lo spazio e database SQL non è in grado di allocare più spazio per un oggetto (ad esempio una tabella o un indice) all'interno di tale filegroup.

  • Raccomandazione: per risolvere questo problema, eliminare eventuali dati non necessari all'interno del database per liberare spazio. Identificare tabelle, indici o altri oggetti inutilizzati nel filegroup che possono essere rimossi in modo sicuro. Monitorare attentamente l'utilizzo dello spazio. Per altre informazioni, vedere Gestire lo spazio dei file per i database in database SQL di Azure.

    Nel caso in cui l'eliminazione di dati/oggetti non necessari non sia un'opzione, è consigliabile passare a un livello di database superiore.

Importante

Per informazioni dettagliate sulle dimensioni di calcolo di database SQL di Azure (database singolo), vedere Limiti delle risorse per database singoli usando il modello di acquisto vCore e Limiti delle risorse per i database singoli usando il modello di acquisto DTU - database SQL di Azure.

Errore 1132 - Il pool elastico ha raggiunto il limite di archiviazione

  • Causa: questo errore si verifica quando l'utilizzo dello spazio di archiviazione nel pool elastico ha superato il limite allocato.

  • Raccomandazione: per risolvere questo problema, implementare strategie di archiviazione ed eliminazione dei dati per mantenere solo i dati necessari nei database che fanno parte del pool elastico. Monitorare attentamente l'utilizzo dello spazio. Per altre informazioni, vedere Gestire lo spazio file per i database in database SQL di Azure.

    Se l'archiviazione o l'eliminazione di dati/oggetti non necessari non è un'opzione, è consigliabile passare a un livello di database superiore.

Importante

Per informazioni dettagliate sulle dimensioni di calcolo di database SQL di Azure (database singolo), vedere Limiti delle risorse per i pool elastici usando il modello di acquisto vCore e Limiti delle risorse per i pool elastici usando il modello di acquisto DTU.

Limitazione cdc

Errore 2628: i dati stringa o binari verrebbero troncati nella tabella

  • Causa: la modifica delle dimensioni delle colonne di una tabella abilitata per CDC tramite istruzioni DDL può causare problemi con il processo di acquisizione CDC successivo. La sys.dm_cdc_errors DMV (Dynamic Management View) è utile per controllare eventuali problemi segnalati da CDC, ad esempio il numero di errori 2628 e 8115.

  • Raccomandazione: prima di apportare modifiche alle dimensioni delle colonne, è necessario valutare se la modifica è compatibile con i dati esistenti nelle tabelle delle modifiche CDC. Per risolvere questo problema, è necessario disabilitare e riabilitare CDC per il database. Per altre informazioni sull'abilitazione di CDC per un database o una tabella, vedere Abilitare CDC per database SQL di Azure e Abilitare CDC per una tabella in questo articolo.

Errore 22830 : la funzione predefinita 'SU edizione Standard R_SNAME' nel contesto di rappresentazione non è supportata in questa versione di SQL Server

  • Causa: questo errore si verifica durante l'abilitazione di CDC se nel database esiste un trigger utente, che ha una chiamata a SUSER_SNAME() su create_table. È possibile elencare i trigger con lo script Transact-SQL seguente. Questo comando fornisce i dettagli del trigger dell'oggetto e il corrispondente object_id:

    SELECT name,
        object_id
    FROM sys.triggers
    WHERE parent_class_desc = 'DATABASE'
        AND is_disabled = 0;
    

    Dopo aver ottenuto le definizioni di trigger, è possibile cercare le chiamate a SYSTEM_USER con lo script seguente:

    SELECT OBJECT_DEFINITION(object_id) AS trigger_definition;
    
  • Raccomandazione: per risolvere questo problema, seguire questa procedura per ogni trigger utente ottenuto dallo script precedente.

    • Disabilitare il trigger
    • Abilitare CDC
    • Riabilitare il trigger

Per altre informazioni, vedere DISABLE TRIGGER (Transact-SQL).

Errore 913 - Processo di acquisizione CDC non riuscito durante l'elaborazione delle modifiche per una tabella con tipo di dati CLR di sistema

  • Causa: questo errore si verifica quando si abilita CDC in una tabella con il tipo di dati CLR di sistema, si apportano modifiche DML e quindi si apportano modifiche DDL nella stessa tabella mentre il processo di acquisizione CDC elabora le modifiche correlate ad altre tabelle.

  • Raccomandazione: la procedura consigliata consiste nel disattivare DML nella tabella, eseguire un processo di acquisizione per elaborare le modifiche, eseguire DDL per la tabella, eseguire un processo di acquisizione per elaborare le modifiche DDL e quindi riabilitare l'elaborazione DML. Per altre informazioni, vedere Processo di acquisizione CDC non riuscito durante l'elaborazione delle modifiche.

Creare un utente e assegnare il ruolo

Se è cdc user stato rimosso, è possibile aggiungere manualmente l'utente.

Usare lo script T-SQL seguente per creare un utente (cdc) e assegnare il ruolo appropriato (db_owner).

IF NOT EXISTS (
    SELECT *
    FROM sys.database_principals
    WHERE NAME = 'cdc'
)
BEGIN
    CREATE USER [cdc] WITHOUT LOGIN
    WITH DEFAULT_SCHEMA = [cdc];
END

EXEC sp_addrolemember 'db_owner', 'cdc';

Controllare e aggiungere l'appartenenza al ruolo

Per verificare se cdc l'utente appartiene al sysadmin ruolo o db_owner , eseguire la query T-SQL seguente:

EXECUTE AS USER = 'cdc';

SELECT is_srvrolemember('sysadmin'), is_member('db_owner');

Se l'utente cdc non appartiene a nessuno dei due ruoli, eseguire la query T-SQL seguente per aggiungere db_owner un ruolo all'utente cdc .

EXEC sp_addrolemember 'db_owner' , 'cdc';