Aktivera och inaktivera insamling av ändringsdata
gäller för:SQL Server
Azure SQL Managed Instance
Den här artikeln beskriver hur du aktiverar och inaktiverar insamling av ändringsdata (CDC) för en databas och en tabell för SQL Server och Azure SQL Managed Instance. Information om Azure SQL Database finns i CDC med Azure SQL Database.
Behörigheter
sysadmin
behörigheter krävs för att aktivera eller inaktivera insamling av ändringsdata i SQL Server och Azure SQL Managed Instance.
Aktivera för en databas
Innan du kan skapa en avbildningsinstans för enskilda tabeller måste du aktivera insamling av ändringsdata för databasen.
Om du vill aktivera insamling av ändringsdata kör du den lagrade proceduren sys.sp_cdc_enable_db (Transact-SQL) i databaskontexten. För att avgöra om en databas redan har CDC aktiverat, frågar du efter kolumnen is_cdc_enabled i sys.databases
katalogvyn.
När en databas har aktiverat ändringsdatainsamling skapas cdc- schema, cdc- användare, metadatatabeller och andra systemobjekt för databasen. Det cdc--schemat innehåller metadatatabellerna för ändringsdatainsamling och när källtabeller har aktiverats för insamling av ändringsdata fungerar de enskilda ändringstabellerna som en lagringsplats för ändringsdata. Schemat cdc innehåller även associerade systemfunktioner som används för att fråga efter ändringsdata.
Ändringsdatainsamling kräver exklusiv användning av cdc--schema och cdc- användare. Om antingen ett schema eller en databasanvändare med namnet cdc för närvarande finns i en databas, kan ändringsdatafångst inte aktiveras för databasen förrän schemat och/eller användaren tas bort eller bytt namn.
-- ====
-- Enable Database for CDC
-- ====
USE MyDB
GO
EXEC sys.sp_cdc_enable_db
GO
Not
Om du vill hitta CDC-relaterade mallar i SQL Server Management Studio går du till Visa, väljer Mallutforskarenoch väljer sedan SQL Server-mallar. Ändra datainsamling är en undermapp som innehåller mallarna
Inaktivera för en databas
Använd sys.sp_cdc_disable_db (Transact-SQL) i databaskontexten för att inaktivera insamling av ändringsdata för en databas. Det är inte nödvändigt att inaktivera CDC för enskilda tabeller innan du inaktiverar CDC för databasen. Om du inaktiverar CDC för databasen tar du bort alla associerade metadata för insamling av ändringsdata, inklusive cdc- användare, schema och jobb för insamling av ändringsdata. Eventuella gatingroller som skapats av CDC tas dock inte bort automatiskt och måste tas bort manuellt. Om du vill ta reda på om en databas har CDC aktiverat, kontrollerar du kolumnen is_cdc_enabled i katalogvyn sys.databases
.
Om en CDC-aktiverad databas tas bort tas jobb för ändringsdatainsamling bort automatiskt.
-- Disable Database for change data capture
USE MyDB
GO
EXEC sys.sp_cdc_disable_db
GO
Aktivera för en tabell
När en databas har aktiverats för insamling av ändringsdata kan medlemmar i den db_owner fasta databasrollen skapa en insamlingsinstans för enskilda källtabeller med hjälp av den lagrade proceduren sys.sp_cdc_enable_table
. Om du vill ta reda på om en källtabell redan har aktiverats för insamling av ändringsdata granskar du kolumnen is_tracked_by_cdc i sys.tables
katalogvy.
Viktig
Mer information om argumenten för sys.sp_cdc_enable_table
lagrade procedurer finns i sys.sp_cdc_enable_table (Transact-SQL).
Följande alternativ kan anges när du skapar en avbildningsinstans:
Kolumner i källtabellen som ska samlas in.
Som standard identifieras alla kolumner i källtabellen som insamlade kolumner. Om endast en delmängd av kolumnerna behöver spåras, till exempel av sekretess- eller prestandaskäl, använder du parametern @captured_column_list för att ange delmängden av kolumner.
En filgrupp som ska innehålla ändringstabellen.
Som standard finns ändringstabellen i databasens standardfilgrupp. Databasägare som vill styra placeringen av enskilda ändringstabeller kan använda parametern @filegroup_name för att ange en viss filgrupp för den ändringstabell som är associerad med avbildningsinstansen. Den namngivna filgruppen måste redan finnas. I allmänhet rekommenderar vi att ändringstabeller placeras i en filgrupp separat från källtabeller. Se mallen för Aktivera alternativet för att ange filgrupp i en tabell för ett exempel som visar användningen av parametern @filegroup_name.
-- Enable CDC for a table specifying filegroup
USE MyDB
GO
EXEC sys.sp_cdc_enable_table
@source_schema = N'dbo',
@source_name = N'MyTable',
@role_name = N'MyRole',
@filegroup_name = N'MyDB_CT',
@supports_net_changes = 1
GO
En roll för att styra åtkomsten till en ändringstabell.
Syftet med den namngivna rollen är att styra åtkomsten till ändringsdata. Den angivna rollen kan vara en befintlig fast serverroll eller en databasroll. Om den angivna rollen inte redan finns skapas en databasroll med det namnet automatiskt. Användarna måste ha SELECT-behörighet för alla insamlade kolumner i källtabellen. När en roll anges måste dessutom användare som inte är medlemmar i sysadmin eller db_owner rollen också vara medlemmar i den angivna rollen.
Om du inte vill använda en gating-roll anger du uttryckligen parametern @role_name till NULL. Titta på mallen Aktivera en tabell utan att använda en gate-roll för ett exempel på hur du aktiverar en tabell utan en gate-roll.
-- Enable CDC for a table using a gating role option
USE MyDB
GO
EXEC sys.sp_cdc_enable_table
@source_schema = N'dbo',
@source_name = N'MyTable',
@role_name = NULL,
@supports_net_changes = 1
GO
En funktion för att fråga efter nettoändringar.
En avbildningsinstans innehåller alltid en tabellvärdesfunktion (TVF) för att returnera alla ändringstabellposter som inträffat inom ett definierat intervall. Den här funktionen namnges genom att namnet på capture-instansen läggs till i "cdc.fn_cdc_get_all_changes_". Mer information finns i cdc.fn_cdc_get_all_changes_<capture_instance> (Transact-SQL).
Om parametern @supports_net_changes är inställd på 1 genereras även en funktion för nettoändringar för avbildningsinstansen. Den här funktionen returnerar endast en ändring för varje distinkt rad som ändrats i intervallet som anges i anropet. Mer information finns i cdc.fn_cdc_get_net_changes_<capture_instance> (Transact-SQL).
För att stödja frågor om nettoändringar måste källtabellen ha en primärnyckel eller ett unikt index för att unikt identifiera rader. Om ett unikt index används måste namnet på indexet anges med hjälp av parametern @index_name. Kolumnerna som definieras i primärnyckeln eller det unika indexet måste ingå i listan över källkolumner som ska avbildas.
Se mallen Enable a Table for All and Net Changes Queries för ett exempel som demonstrerar skapandet av en instans med båda frågefunktionerna.
-- Enable CDC for a table for all and net changes queries
USE MyDB
GO
EXEC sys.sp_cdc_enable_table
@source_schema = N'dbo',
@source_name = N'MyTable',
@role_name = N'MyRole',
@supports_net_changes = 1
GO
Notera
Om insamling av ändringsdata är aktiverad i en tabell med en befintlig primärnyckel och parametern @index_name inte används för att identifiera ett alternativt unikt index, använder funktionen för att avbilda ändringsdata primärnyckeln. Efterföljande ändringar av primärnyckeln tillåts inte utan att du först inaktiverar insamling av ändringsdata för tabellen. Detta gäller oavsett om stöd för frågor om nettoändringar begärdes när insamling av ändringsdata konfigurerades. Om det inte finns någon primärnyckel i en tabell när den är aktiverad för insamling av ändringsdata ignoreras efterföljande tillägg av en primärnyckel av insamling av ändringsdata. Eftersom ändringsdatainsamling inte använder en primärnyckel som skapas efter att tabellen har aktiverats kan nyckel- och nyckelkolumnerna tas bort utan begränsningar.
Inaktivera för en tabell
Medlemmar i den fasta databasrollen db_owner kan med hjälp av lagringsproceduren sys.sp_cdc_disable_table
ta bort en fångstinstans för enskilda källtabeller. Om du vill ta reda på om en källtabell för närvarande är aktiverad för insamling av ändringsdata granskar du kolumnen is_tracked_by_cdc
i sys.tables
katalogvyn. Om det inte finns några tabeller aktiverade för databasen efter inaktivering tas även jobben för datainsamling bort.
Om en ändringsdatainsamlingsaktiverad tabell tas bort tas metadata för datainsamling som är associerade med tabellen bort automatiskt.
I mallen Inaktivera en avbildningsinstans för en tabell finns ett exempel på hur du inaktiverar en tabell.
-- Disable a Capture Instance for a table
USE MyDB
GO
EXEC sys.sp_cdc_disable_table
@source_schema = N'dbo',
@source_name = N'MyTable',
@capture_instance = N'dbo_MyTable'
GO