Dela via


Ändra datainsamling och andra funktioner

gäller för:SQL ServerAzure SQL Managed Instance

Den här artikeln beskriver hur följande funktioner interagerar med insamling av ändringsdata för SQL Server och Azure SQL Managed Instance. Information om Azure SQL Database finns i CDC med Azure SQL Database.

Spårning av ändringar

Ändringsdatainsamling och ändringsspårning kan aktiveras i samma databas. Inga särskilda överväganden krävs. Mer information finns i Arbeta med ändringsspårning.

Databasåterspegling

En databas som är aktiverad för insamling av ändringsdata kan speglas. Följ dessa steg för att säkerställa att datainsamling och rensning sker automatiskt efter en redundansväxling:

  1. Kontrollera att SQL Server-agenten körs på den nya huvudserverinstansen.

  2. Skapa avbildningsjobbet och rensningsjobbet i den nya huvuddatabasen (den tidigare speglingsdatabasen). För att skapa jobben använder du den lagrade proceduren sp_cdc_add_job.

Om du vill visa den aktuella konfigurationen av ett rensnings- eller avbildningsjobb, använder du den lagrade proceduren sys.sp_cdc_help_jobs på den nya instansen av huvudservern. För en viss databas heter avbildningsjobbet cdc. database_name_capture, och rensningsjobbet heter cdc. database_name_cleanup, där database_name är namnet på databasen.

Om du vill ändra konfigurationen av ett jobb, använder du sys.sp_cdc_change_job lagrade proceduren.

Information om databasspegling finns i Databasspegling (SQL Server).

Transaktionsreplikering

Ändring av datainsamling och transaktionsreplikering kan samexistera i samma databas, men populationen av ändringstabellerna hanteras på olika sätt när båda funktionerna är aktiverade. Dataändringsinsamling och transaktionsreplikering använder alltid samma procedur, sp_replcmds, för att läsa ändringar från transaktionsloggen. När ändringsdatainsamling är aktiverat på egen hand anropar ett SQL Server Agent-jobb sp_replcmds. När båda funktionerna är aktiverade i samma databas anropar Log Reader Agent sp_replcmds. Den här agenten fyller i både ändringstabellerna och distributionsdatabastabellerna. Mer information finns i Läsaragent för replikeringslogg.

Tänk dig ett scenario där ändringsdatainsamling är aktiverat i AdventureWorks2022 databasen och två tabeller är aktiverade för avbildning. För att fylla ändringstabellerna anropar capture-jobbet sp_replcmds. Databasen är aktiverad för transaktionsreplikering och en publikation skapas. Nu skapas loggläsaragenten för databasen och avbildningsjobbet tas bort. Loggläsaragenten fortsätter att genomsöka loggen från det senaste loggsekvensnumret som commiterades till ändringstabellen. Detta säkerställer datakonsekvens i ändringstabellerna. Om transaktionsreplikering har inaktiverats i den här databasen tas Log Reader Agent bort och capture-jobbet återskapas.

Anmärkning

När Log Reader Agent används för både ändringsdatainsamling och transaktionsreplikering skrivs replikerade ändringar först till distributionsdatabasen. Sedan skrivs insamlade ändringar till ändringstabellerna. Båda åtgärderna utförs tillsammans. Om det finns några svarstider i skrivning till distributionsdatabasen blir det en motsvarande svarstid innan ändringarna visas i ändringstabellerna.

Alternativet proc exec för transaktionsreplikering är inte tillgängligt när insamling av ändringsdata är aktiverat.

Återställa eller koppla databas

SQL Server använder följande logik för att avgöra om insamling av ändringsdata förblir aktiverad när en databas har återställts eller kopplats:

  • Om en databas återställs till samma server med samma databasnamn är datainsamlingen fortfarande aktiverad.

  • Om en databas återställs till en annan server inaktiveras som standard insamling av ändringsdata och alla relaterade metadata tas bort.

    Om du vill behålla insamling av ändringsdata använder du alternativet KEEP_CDC när du återställer databasen. Mer information om det här alternativet finns i ÅTERSTÄLL.

  • Om en databas kopplas från och kopplas till samma server eller en annan server förblir ändringsdatainsamling aktiverad.

  • Om en databas är ansluten eller återställd med alternativet KEEP_CDC till någon annan version än Standard, Enterprise eller SQL Managed Instance blockeras åtgärden eftersom ändringsdatainsamling kräver SQL Server Standard- eller SQL Managed Instance-utgåvor. Felmeddelandet 934 visas:

    SQL Server cannot load database '%.*ls' because change data capture is enabled. The currently installed edition of SQL Server does not support change data capture. Either restore database without KEEP_CDC option, or upgrade the instance to one that supports change data capture.

Du kan använda sys.sp_cdc_disable_db för att ta bort insamling av ändringsdata från en återställd eller ansluten databas.

När du har återställt en databas på Azure SQL Managed Instance förblir CDC aktiverat, men du måste se till att genomsöknings- och rensningsjobben läggs till och körs. Du kan lägga till jobben manuellt genom att köra sys.sp_cdc_add_job.

Avgränsade databaser

Ändringsdatainsamling stöds inte i inneslutna databaser.

Tillgänglighetsgrupper

När du använder AlwaysOn-tillgänglighetsgrupper bör ändringsuppräkning göras på den sekundära repliken för att minska diskbelastningen på den primära.

Kolumnlagerindexar

Ändringsdatainsamling kan inte aktiveras i tabeller med ett grupperat columnstore-index. Från och med SQL Server 2016 kan det aktiveras i tabeller med ett icke-grupperat kolumnlagringsindex.

Beräknade kolumner

CDC stöder inte värdena för beräknade kolumner även om den beräknade kolumnen definieras som persistent. Beräknade kolumner i en capture-instans har alltid värdet NULL. Det här beteendet är avsett och inte en bugg.

Linux

CDC stöds för SQL Server 2017 på Linux från och med CU18 och SQL Server 2019 i Linux.

Se även