Delen via


Gegevensopname wijzigen (CDC) met Azure SQL Database

van toepassing op:Azure SQL Database-

In dit artikel leert u hoe change data capture (CDC) wordt geïmplementeerd in Azure SQL Database om activiteiten op een database vast te leggen wanneer tabellen en rijen zijn gewijzigd. Zie Wat is change data capture (CDC) voor meer informatie over de CDC-functie, waaronder hoe deze wordt geïmplementeerd in SQL Server en Azure SQL Managed Instance?

Overzicht

In Azure SQL Database vervangt een scheduler voor het vastleggen van wijzigingen de SQL Server Agent-taken waarmee wijzigingsgegevens voor de brontabellen worden vastgelegd en opgeschoond. De scheduler voert de processen voor vastleggen en opschonen automatisch uit binnen het bereik van de database, waardoor betrouwbaarheid en prestaties zonder externe afhankelijkheden worden gegarandeerd. Gebruikers behouden de optie voor het handmatig initiëren van processen voor vastleggen en opschonen, indien nodig.

Een goed voorbeeld van een gegevensconsumer die door deze technologie wordt gebruikt, is een ETL-toepassing (extractie, transformatie en laden). Een ETL-toepassing laadt incrementeel gegevens van SQL Server-brontabellen naar een datawarehouse of datamart. Hoewel de weergave van de brontabellen in het datawarehouse wijzigingen in de brontabellen moet weerspiegelen, is een end-to-end-technologie die een replica van de bron vernieuwt niet geschikt. In plaats daarvan hebt u een betrouwbare stroom van wijzigingsgegevens nodig die is gestructureerd, zodat consumenten deze kunnen toepassen op verschillende doelweergaven van de gegevens. Sql Server change data capture biedt deze technologie.

Raadpleeg deze aflevering van Data Exposed voor meer informatie over het vastleggen van wijzigingen in gegevens in Azure SQL Database.

Gegevensstroom

In de volgende afbeelding ziet u de principal-gegevensstroom voor het vastleggen van wijzigingengegevens met Azure SQL Database:

diagram van een stroomdiagram waarin de gegevensstroom voor het vastleggen van wijzigingen wordt weergegeven.

Voorwaarden

Machtigingen

De db_owner rol is vereist om gegevensopname van wijzigingen in te schakelen voor Azure SQL Database.

Rekenvereisten voor Azure SQL Database

U kunt CDC inschakelen in Azure SQL Database voor elke servicelaag binnen het aankoopmodel op basis van vCore, voor zowel individuele databases als elastische pools.

Voor databases binnen het DTU-aankoopmodelwordt CDC ondersteund voor databases van de S3-laag of hoger. Subcore niveaus (Basic, S0, S1, S2) worden niet ondersteund voor CDC.

CDC inschakelen voor Azure SQL Database

Voordat u een capture-exemplaar voor afzonderlijke tabellen kunt maken, moet u CDC inschakelen voor uw Azure SQL Database.

Als u CDC wilt inschakelen, maakt u verbinding met uw Azure SQL Database via Azure Data Studio of SQL Server Management Studio (SSMS). Open een nieuw queryvenster en schakel CDC in door de volgende T-SQL uit te voeren:

EXEC sys.sp_cdc_enable_db;
GO

Notitie

Als u wilt bepalen of een database al is ingeschakeld, voert u een query uit op de kolom is_cdc_enabled in de sys.databases catalogusweergave.

Wanneer wijzigingsgegevens vastleggen is ingeschakeld voor een database, worden de cdc schema, cdc user, metagegevenstabellen en andere systeemobjecten voor de database gemaakt. De cdc schema bevat de metagegevenstabellen voor wijzigingsgegevens en nadat cdc is ingeschakeld voor de brontabellen, dienen de afzonderlijke wijzigingstabellen als opslagplaats voor wijzigingsgegevens. De cdc schema bevat ook gekoppelde systeemfuncties die worden gebruikt om query's uit te voeren op wijzigingsgegevens.

Belangrijk

Wijzigingsgegevens vastleggen vereist exclusief gebruik van de cdc schema en cdc user. Als een schema of een databasegebruiker met de naam cdc momenteel in een database bestaat, kunt u cdc niet inschakelen voor de database totdat het schema en/of de gebruiker is verwijderd of de naam ervan is gewijzigd.

CDC inschakelen voor een tabel

Nadat u CDC hebt ingeschakeld voor uw Azure SQL Database, kunt u CDC vervolgens inschakelen op tabelniveau door een of meer tabellen te selecteren om gegevenswijzigingen bij te houden. Maak een capture-exemplaar voor afzonderlijke brontabellen met behulp van de opgeslagen procedure sys.sp_cdc_enable_table.

Voer de volgende T-SQL uit om CDC in te schakelen voor een tabel:

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

Tip

In het vorige voorbeeld wordt geen expliciete @role_name gebruikt door de parameter in te stellen op NULL, maar u kunt een gatingsrol gebruiken om de toegang tot de wijzigingsgegevens te beperken.

Kolommen in de brontabel die moeten worden vastgelegd

Standaard worden alle kolommen in de brontabel als vastgelegde kolommen aangemerkt. Als alleen een subset van kolommen moet worden bijgehouden, zoals om privacy- of prestatieredenen, gebruikt u de parameter @captured_column_list om de subset van kolommen op te geven.

Als u CDC wilt inschakelen voor een specifieke lijst met kolommen in een tabel, voert u de volgende T-SQL uit:

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

Tip

In het vorige voorbeeld wordt geen expliciete @role_name gebruikt door de parameter in te stellen op NULL. U kunt echter een gatingsrol gebruiken om de toegang tot de wijzigingsgegevens te beperken.

Een rol voor het beheren van de toegang tot een wijzigingstabel

Het doel van de benoemde rol is om de toegang tot de wijzigingsgegevens te beheren. De opgegeven rol kan een bestaande vaste serverfunctie of een databaserol zijn. Als de opgegeven rol nog niet bestaat, wordt automatisch een databaserol van die naam gemaakt. Gebruikers moeten een SELECT-machtiging hebben voor alle vastgelegde kolommen van de brontabel. Wanneer een rol is opgegeven, moeten gebruikers die geen lid zijn van de sysadmin- of db_owner rol ook lid zijn van de opgegeven rol.

Voer de volgende T-SQL uit om CDC in te schakelen voor tabel die een gatingsrol opgeeft:

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

Als u geen gate-rol wilt gebruiken, stelt u de parameter @role_name expliciet in op NULL.

Een functie voor het uitvoeren van query's op nettowijzigingen

Een capture-exemplaar bevat altijd een tabelwaardefunctie om alle tabelvermeldingen te retourneren die binnen een gedefinieerd interval zijn opgetreden. Deze functie wordt benoemd door de naam van het capture-exemplaar toe te voegen aan cdc.fn_cdc_get_all_changes_. Zie cdc.fn_cdc_get_all_changesvoor meer informatie.

Als de parameter @supports_net_changes is ingesteld op 1, wordt er ook een functie voor nettowijzigingen gegenereerd voor het capture-exemplaar. Deze functie retourneert slechts één wijziging voor elke afzonderlijke rij die is gewijzigd in het interval dat is opgegeven in de aanroep. Zie cdc.fn_cdc_get_net_changesvoor meer informatie.

Ter ondersteuning van query's voor netwijzigingen moet de brontabel een primaire sleutel of unieke index hebben om rijen uniek te identificeren. Als er een unieke index wordt gebruikt, moet de naam van de index worden opgegeven met behulp van de parameter @index_name. De kolommen die zijn gedefinieerd in de primaire sleutel of unieke index, moeten worden opgenomen in de lijst met bronkolommen die moeten worden vastgelegd.

Als u CDC wilt inschakelen voor een tabel met ondersteuning voor netwijzigingen, voert u de volgende T-SQL uit:

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

Als wijzigingsgegevens vastleggen is ingeschakeld in een tabel met een bestaande primaire sleutel en de parameter @index_name niet wordt gebruikt om een alternatieve unieke index te identificeren, gebruikt de functie voor het vastleggen van wijzigingen de primaire sleutel. Volgende wijzigingen in de primaire sleutel zijn niet toegestaan zonder eerst het vastleggen van wijzigingsgegevens voor de tabel uit te schakelen. Dit geldt ongeacht of er ondersteuning voor query's over netto wijzigingen werd aangevraagd wanneer de vastlegging van wijzigingsgegevens werd geconfigureerd.

Als er geen primaire sleutel in een tabel is op het moment dat u het vastleggen van wijzigingen inschakelt, wordt de latere toevoeging van een primaire sleutel door het vastleggen van wijzigingen genegeerd. Omdat het vastleggen van wijzigingen geen primaire sleutel gebruikt die wordt gemaakt nadat de tabel is ingeschakeld, kunnen de sleutel- en sleutelkolommen zonder beperkingen worden verwijderd.

Zie sys.sp_cdc_enable_tablevoor meer informatie over de sys.sp_cdc_enable_table opgeslagen procedureargumenten.

Fooi

Als u wilt bepalen of een brontabel al is ingeschakeld voor het vastleggen van wijzigingengegevens, bekijkt u de kolom is_tracked_by_cdc in de sys.tables catalogusweergave.

CDC uitschakelen voor Azure SQL Database

Als u CDC uitschakelt voor uw Azure SQL Database, worden alle gekoppelde metagegevens voor het vastleggen van wijzigingengegevens verwijderd, inclusief de cdc user, cdc schemaen de externe scheduler-opname- en opschoonprocessen. Eventuele toegangsrollen die door vastlegging van wijzigingsgegevens worden gemaakt, worden echter niet automatisch verwijderd en moeten expliciet worden verwijderd.

Notitie

Als u wilt bepalen of een database cdc heeft ingeschakeld, voert u een query uit op de kolom is_cdc_enabled in de sys.databases catalogusweergave.

Het is niet nodig om CDC uit te schakelen voor afzonderlijke tabellen voordat u CDC uitschakelt op databaseniveau.

Als u CDC wilt uitschakelen op databaseniveau, voert u de volgende T-SQL uit:

EXEC sys.sp_cdc_disable_db;
GO

Suggestie

Nadat u CDC op databaseniveau hebt uitgeschakeld, moet u CDC opnieuw inschakelen voor afzonderlijke tabellen als u de FUNCTIE CDC nogmaals wilt gebruiken.

CDC beheren

In Azure SQL Database is CDC een cruciale functie voor het bijhouden en beheren van wijzigingen in uw databasetabellen. In tegenstelling tot traditionele SQL Server-omgevingen maakt Azure SQL Database gebruik van een scheduler voor het vastleggen van wijzigingen van gegevens om CDC-taken af te handelen in plaats van te vertrouwen op SQL Server Agent-taken. Deze scheduler initieert automatisch periodieke opname- en opschoonprocessen voor CDC-tabellen in uw database, waardoor betrouwbaarheid en prestaties worden gegarandeerd zonder externe afhankelijkheden.

Automatische CDC-opname en -opschoning

De CDC-opnametaak in Azure SQL Database werkt naadloos en wordt elke 20 seconden uitgevoerd om wijzigingen efficiënt bij te houden. Tegelijkertijd wordt de opschoontaak elk uur uitgevoerd, zodat uw CDC-tabellen geoptimaliseerd blijven. Gebruikers kunnen er zeker van zijn dat CDC-beheer automatisch plaatsvindt zonder handmatige tussenkomst.

Belangrijk

Als een serverloze database CDC heeft ingeschakeld en zich in een gepauzeerde staat bevindt, wordt CDC niet uitgevoerd. De CDC-scan heeft geen invloed op de autopause-functie.

Handmatige CDC-besturing

Hoewel CDC automatisch wordt uitgevoerd, behouden gebruikers de flexibiliteit om handmatige CDC-bewerkingen op aanvraag uit te voeren. Met de procedures sp_cdc_scan en sp_cdc_cleanup_change_tables kunt u activering van vastlegging- en opschoningtaken naar behoefte starten.

CDC monitoren

Azure SQL Database biedt waardevolle hulpprogramma's voor het bewaken van CDC-activiteiten. Twee dynamische beheerweergaven, sys.dm_cdc_log_scan_sessions en sys.dm_cdc_errors, bieden inzicht in CDC-processen, zodat u volledig inzicht hebt in uw gegevenswijzigingen.

Aanpassing van de CDC

Hoewel Azure SQL Database CDC-beheer stroomlijnt, zijn er enkele beperkingen:

  • De frequentie van CDC-opname- en opschoontaken kan niet worden aangepast.
  • De waarden voor pollinginterval en continuous voor het vastleggen en opschonen van taken zijn niet van toepassing in Azure SQL Database.
  • Als u de vermelding van de opnametaak uit de cdc.cdc_jobs tabel verwijdert, wordt de achtergrondopnametaak niet gestopt.
  • Als u de opschoontaakvermelding laat vallen, wordt de opschoontaak gestopt.
  • De cdc.cdc_jobs tabel bevindt zich in het cdc schema, niet in msdb.

Ondanks deze beperkingen kunt u nog steeds de volgende opties aanpassen:

  • Voer een query uit op de cdc.cdc_jobs tabel voor de huidige configuratiedetails.
  • Pas de maxtrans en maxscans opties aan door het gebruik van de opgeslagen procedure sp_cdc_change_job.
  • Gebruik sp_cdc_drop_job en sp_cdc_add_job indien nodig om taken te beheren.

Prestatieoverwegingen en aanbevelingen

Het inschakelen van wijzigingsgegevens vastleggen voor Azure SQL Database heeft een prestatie-effect dat vergelijkbaar is met het inschakelen van CDC voor SQL Server of Azure SQL Managed Instance. Verschillende factoren beïnvloeden echter het prestatie-effect bij het inschakelen van CDC, waaronder:

  • Het aantal tabellen met CDC-functionaliteit in uw Azure SQL Database.

  • Frequentie van wijzigingen in de bijgehouden tabellen of het volume van transacties. Actieve transacties verhinderen afkapping van logboeken totdat de transactie wordt voltooid en de CDC-scan is bijgewerkt, of de transactie wordt afgebroken. Dit kan ertoe leiden dat het transactielogboek meer invult dan normaal en moet worden bewaakt, zodat het transactielogboek niet wordt ingevuld.

  • Zorg ervoor dat er vrije ruimte beschikbaar is in de brondatabase, omdat CDC-artefacten (bijvoorbeeld CT-tabellen, cdc_jobs enzovoort) zijn opgeslagen in dezelfde database.

  • Of u nu één database hebt of deel uitmaakt van een elastische pool.

  • Databases in een elastische pool delen resources, zoals schijfruimte, met elkaar. Hierdoor loopt het uitvoeren van CDC op meerdere databases het risico de maximale grootte van de elastic pool te bereiken. Bewaak resources zoals CPU, geheugen en logboekdoorvoer. Zie Resourcebeheer in dichte elastische poolsvoor meer informatie.

  • Bij het omgaan met databases in elastische pools is het van cruciaal belang om rekening te houden met het aantal tabellen met CDC-functionaliteit en het aantal databases waartoe deze tabellen behoren. We raden u aan om uw workload te beoordelen en vereiste maatregelen te nemen, zoals het schalen van de elastische pool. Zie Elastische poolresources schalen in Azure SQL Databasevoor meer informatie.

Belangrijk

Deze overwegingen zijn algemene richtlijnen. Neem contact op met Microsoft-ondersteuningvoor nauwkeurige richtlijnen voor het optimaliseren van de prestaties voor een specifieke workload.

Houd rekening met de volgende aanbevolen procedures wanneer u CDC gebruikt met Azure SQL Database:

  • Test uw workload grondig voordat u CDC inschakelt voor databases in productie, zodat u de juiste SLO kunt bepalen die geschikt is voor uw workload. Zie Service-lagenvoor meer informatie over azure SQL Database-rekengrootten.

  • Overweeg om het aantal vCores te schalen of over te stappen op een hogere databaselaag, zoals Hyperscale, om het vorige prestatieniveau te behouden zodra CDC is ingeschakeld in uw Azure SQL Database. Zie vCore-aankoopmodel - Azure SQL Database en hyperscale-servicelaagvoor meer informatie.

  • Bewaak het ruimtegebruik nauwkeurig. Zie Bestandsruimte voor databases beheren in Azure SQL Databasevoor meer informatie.

  • Bewaak de snelheid van het genereren van logboeken; voor meer informatie, zie Het resourceverbruik door gebruikersworkloads en interne processen.

  • De CDC-scan- en opschoonprocessen maken deel uit van uw normale databaseworkload (ook resources verbruiken). Afhankelijk van het volume van transacties kan de prestatievermindering aanzienlijk zijn doordat de scan- en opschoonprocessen de workload niet kunnen bijhouden. Volledige rijen worden toegevoegd aan wijzigingstabellen en voor updatebewerkingen wordt ook de voorafbeelding opgenomen. We raden u aan om uw workload te beoordelen en de vereiste maatregelen te nemen volgens de vorige aanbevelingen. Zie de sectie CDC-beheer in dit artikel voor meer informatie.

Belangrijk

De scheduler voert automatisch vastleggen en opschonen uit in de SQL Database. De CDC-opnametaak wordt elke 20 seconden uitgevoerd en de opschoontaak wordt elk uuruitgevoerd.

  • Als u een toename van de latentie wilt voorkomen, moet u ervoor zorgen dat het aantal databases met CDC-functionaliteit niet groter is dan het aantal vCores dat is toegewezen aan een elastische pool. Zie Resourcebeheer in dichte elastische poolsvoor meer informatie.

  • Op basis van uw workload en prestatieniveau kunt u overwegen om de CDC-bewaarperiode te wijzigen in een kleiner getal dan de standaardwaarde van drie dagen om ervoor te zorgen dat het opschoningsproces de wijzigingen in de wijzigingstabel kan bijhouden. Het onderhouden van een lagere bewaarperiode tijdens het bewaken van de databasegrootte is een goede gewoonte.

  • Er wordt geen SLA (Service Level Agreement) verstrekt voor wanneer wijzigingen in de wijzigingstabellen worden doorgevoerd. Latentie van subseconden wordt ook niet ondersteund.

Bekende problemen en beperkingen

Agressieve inkorting van logboeken

Wanneer u change data capture (CDC) inschakelt in Azure SQL Database, wordt de agressieve functie voor het afkappen van logboeken van Accelerated Database Recovery (ADR) uitgeschakeld. Dit komt doordat de CDC-scan toegang heeft tot het transactielogboek van de database. Actieve transacties verhinderen het afkappen van het transactielogboek totdat de transactie wordt afgerond en de CDC-scan voltooid is, of de transactie wordt afgebroken.

Bij het inschakelen van CDC wordt u aangeraden de optie hervatbare index te gebruiken wanneer u een index maakt of herbouwt. Hervatbare indexen houden een langlopende transactie niet open en staan het afkappen van logboeken toe tijdens de bewerking voor beter beheer van logboekruimte. Zie Richtlijnen voor online indexbewerkingen - Overwegingen voor hervatbare indexenvoor meer informatie.

Azure SQL Database-servicelaag

CDC wordt ondersteund voor databases en elastische pools in elke servicelaag binnen het aankoopmodel op basis van vCore, databases lager dan S3 (zoals Basic, S0, S1, S2) worden niet ondersteund in het DTU-aankoopmodel.

Azure SQL Database-logboeklimieten

Versneld databaseherstel en CDC zijn compatibel. Het agressieve afkappingsgedrag van ADR voor logboeken wordt echter uitgeschakeld wanneer CDC is ingeschakeld. Dit komt doordat de CDC-scan actief toegang heeft tot en communiceert met het databasetransactielogboek, waardoor het agressieve afkappingsgedrag van ADR voorkomt.

Wanneer u CDC inschakelt, ziet u mogelijk een hoger gebruik van transactielogboeken. Mogelijk moet u omhoog schalen naar een hogere servicelaag of rekenkracht om ervoor te zorgen dat er voldoende transactielogboekruimte beschikbaar is voor de behoeften van al uw workloads.

Fooi

Als uw workload hogere algehele prestaties vereist vanwege een hogere doorvoer van transactielogboeken en snellere transactiedoorvoertijden, gebruikt u de Hyperscale-servicelaag.

Online DDL-instructies worden niet ondersteund

Online DDL-instructies worden niet ondersteund wanneer het vastleggen van wijzigingsgegevens is ingeschakeld voor een database.

Vastleggen en aanpassen en opschonen

Het configureren van de frequentie van de opname en de opschoonprocessen voor CDC in Azure SQL Databases is niet mogelijk. De scheduler voert automatisch vastleggen en opschonen uit.

Failover in Azure SQL Database

Als in lokale of GeoDR-failoverscenario's CDC is ingeschakeld, vindt het proces van het vastleggen en opschonen van gegevens automatisch plaats op de nieuwe primaire database nadat de failover is uitgevoerd.

Microsoft Entra ID

Notitie

Microsoft Entra ID voorheen Azure Active Directory (Azure AD) werd genoemd.

Als u een database in Azure SQL Database als Microsoft Entra-gebruiker maakt en CDC hierop inschakelt, kan een SQL-gebruiker (bijvoorbeeld zelfs een in de sysadmin rol) cdc-artefacten niet uitschakelen/wijzigen. Een andere Microsoft Entra-gebruiker kan ECHTER CDC in- of uitschakelen in dezelfde database.

Als u een database als een SQL-gebruiker maakt, werkt het inschakelen/uitschakelen van change data capture als Microsoft Entra-gebruiker niet.

Het inschakelen van CDC mislukt als u een database in Azure SQL Database als Microsoft Entra-gebruiker maakt, CDC niet inschakelt en vervolgens CDC inschakelt nadat de database is hersteld.

U kunt dit probleem oplossen door verbinding te maken met uw database met uw Microsoft Entra-beheerdersaccount en de volgende T-SQL uit te voeren:

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

EXEC sys.sp_cdc_enable_db;

Herstel naar een bepaald tijdstip (PITR)

Als u CDC hebt ingeschakeld in Azure SQL Database als een SQL-gebruiker, behoudt herstel naar een bepaald tijdstip (PITR) CDC in de herstelde database, tenzij deze wordt hersteld naar een subcore SLO. Wanneer een systeem wordt hersteld naar een subcore SLO, zijn CDC-artefacten niet beschikbaar.

Als u CDC inschakelt voor uw database als Microsoft Entra-gebruiker, is het niet mogelijk om de database naar een specifiek tijdstip te herstellen met een subcore SLO (Point-in-time restore, PITR). Herstel de database naar dezelfde of hogere SLO als de bron en schakel indien nodig CDC uit.

Probleemoplossing

Deze sectie bevat richtlijnen en stappen voor probleemoplossing die zijn gekoppeld aan CDC in Azure SQL Database. CDC-gerelateerde fouten kunnen de goede werking van het opnameproces belemmeren en leiden tot de uitbreiding van het databasetransactielogboek.

Als u deze fouten wilt onderzoeken, kunt u een query uitvoeren op de dynamische beheerweergave sys.dm_cdc_errors. Als de sys.dm_cdc_errors dynamische beheerweergave fouten retourneert, raadpleegt u de volgende sectie om inzicht te hebben in de risicobeperkingsstappen.

Notitie

Zie Database Engine-gebeurtenissen en -foutenvoor meer informatie over een bepaalde foutcode.

Dit zijn de verschillende categorieën voor probleemoplossing die in deze sectie zijn opgenomen:

Categorie Beschrijving
metagegevens aangepast Bevat informatie over hoe problemen met betrekking tot CDC kunnen worden beperkt wanneer de bijgehouden tabel is gewijzigd of verwijderd.
databaseruimtebeheer Bevat informatie over het beperken van problemen wanneer de databaseruimte is uitgeput.
CDC-beperking Bevat informatie over het beperken van problemen die worden veroorzaakt door CDC-beperkingen.

Gewijzigde metagegevens

Fout 200/208 - Ongeldige objectnaam

  • Oorzaak: de fout kan optreden wanneer CDC-metagegevens zijn verwijderd. Voor een goede werking van CDC moet u geen CDC-metagegevens zoals de CDC schemahandmatig wijzigen, tabellen wijzigen, opgeslagen procedures van het CDC-systeem, cdc user standaardmachtigingen (sys.database_principals) of de naam van het cdc userwijzigen.

  • aanbeveling: om dit probleem op te lossen, moet u CDC uitschakelen en opnieuw inschakelen voor uw database. Wanneer u de vastlegging van wijzigingsgegevens voor een database inschakelt, worden het cdc-schema, de cdc-gebruiker, de metagegevenstabellen en andere systeemobjecten voor de database gemaakt. Je moet CDC handmatig opnieuw inschakelen voor afzonderlijke tabellen, nadat CDC is ingeschakeld voor de database.

Notitie

Objecten in de sys.objects systeemcatalogusweergave met is_ms_shipped=1 en schema_name=cdc mogen niet worden gewijzigd of verwijderd.

Fout 1202: de database-principal bestaat niet of de gebruiker is geen lid

  • Oorzaak: de fout kan optreden wanneer de CDC-gebruiker is verwijderd. Voor een goede werking van CDC moet u geen CDC-metagegevens zoals CDC schema, tabellen wijzigen, opgeslagen procedures van cdc user het CDC-systeem, standaardmachtigingen (sys.database_principals) wijzigen of de naam van cdc userwijzigen.

  • Aanbeveling: zorg ervoor dat de cdc gebruiker in uw database bestaat en of er ook de db_owner rol is toegewezen. Als u de cdc gebruiker wilt maken, raadpleegt u het voorbeeld Cdc-gebruiker maken en roltoewijzen.

Fout 15517: kan niet worden uitgevoerd als database-principal omdat de principal niet bestaat

  • Oorzaak: dit type principal kan niet worden geïmiteerd of u bent niet gemachtigd. De fout kan optreden wanneer CDC-metagegevens zijn verwijderd of niet meer deel uitmaken van de db_owner rol. Voor een goede werking van CDC moet u geen CDC-metagegevens zoals CDC schemahandmatig wijzigen, tabellen wijzigen, opgeslagen procedures van cdc user het CDC-systeem, standaardmachtigingen (sys.database_principals) of de naam van de cdc userwijzigen.

  • Aanbeveling: zorg ervoor dat de cdc gebruiker in uw database bestaat en of er ook de db_owner rol is toegewezen. Als u de cdc gebruiker wilt maken, raadpleegt u het voorbeeld Cdc-gebruiker maken en roltoewijzen.

Fout 18807 : kan geen object-id vinden voor de tabel van het replicatiesysteem

  • Oorzaak: deze fout treedt op wanneer de SQL Server-database-engine de%svan de replicatiesysteemtabel niet kan vinden of openen. De tabel ontbreekt of is niet bereikbaar. Opdat CDC goed functioneert, pas geen cdc-metagegevens handmatig aan, zoals de CDC schema, veranderingstabellen, opgeslagen procedures van het CDC-systeem, cdc user standaardmachtigingen (sys.database_principals), en wijzig de naam van het cdc userniet.

  • Aanbeveling: controleer of de systeemtabel bestaat en toegankelijk is door rechtstreeks een query uit te voeren op de tabel. Voer een query uit op de sys.objects systeemcatalogus, stel predicaatcomponent in met is_ms_shipped=1 en schema_name=cdc om alle CDC-gerelateerde objecten weer te geven. Als de query geen objecten retourneert, moet u CDC uitschakelen en vervolgens opnieuw inschakelen voor uw database. Als u detectie van wijzigingsgegevens inschakelt voor een database, worden de cdc schema, cdc user, metagegevenstabellen en andere systeemobjecten voor de database gemaakt. Je moet handmatig opnieuw CDC inschakelen voor afzonderlijke tabellen nadat CDC is ingeschakeld voor de database.

Fout 21050- Alleen leden van de sysadmin of db_owner vaste serverfunctie kunnen deze bewerking uitvoeren

  • Oorzaak: de cdc gebruiker is verwijderd uit de db_owner-databaserol of uit de sysadmin-serverfunctie.

  • Aanbeveling: zorg ervoor dat aan de cdc gebruiker de rol db_owner is toegewezen. Als u de cdc gebruiker wilt maken, raadpleegt u het voorbeeld Cdc-gebruiker maken en roltoewijzen.

Databaseruimtebeheer

Fout 1105: kan geen ruimte toewijzen voor object in de database omdat de bestandsgroep vol is

  • Oorzaak: deze fout treedt op wanneer de primaire bestandsgroep van een database onvoldoende ruimte heeft en SQL Database geen ruimte kan toewijzen voor een object (zoals een tabel of index) binnen die bestandsgroep.

  • aanbeveling: verwijder overbodige gegevens in uw database om ruimte vrij te maken om dit probleem op te lossen. Identificeer ongebruikte tabellen, indexen of andere objecten in de bestandsgroep die veilig kunnen worden verwijderd. Bewaak het ruimtegebruik nauwkeurig voor meer informatie Bestandsruimte beheren voor databases in Azure SQL Database.

    Als onnodige gegevens/objecten worden verwijderd, is geen optie, kunt u overwegen om naar een hogere databaselaag te schalen.

Belangrijk

Zie Resourcelimieten voor enkele databases met het vCore-aankoopmodel en Resourcelimieten voor enkele databases met het DTU-aankoopmodel - Azure SQL Databasevoor gedetailleerde informatie over de rekengrootten van Azure SQL Database (enkele database).

Fout 1132: de opslaglimiet voor de elastische pool is bereikt

  • Oorzaak: deze fout treedt op wanneer het opslaggebruik in uw elastische pool de toegewezen limiet heeft overschreden.

  • aanbeveling: als u dit probleem wilt oplossen, implementeert u strategieën voor gegevensarchivering en opschonen om alleen de benodigde gegevens in de databases te bewaren die deel uitmaken van de elastische pool. Bewaak het ruimtegebruik nauwkeurig. Zie Bestandsruimte voor databases beheren in Azure SQL Databasevoor meer informatie.

    Als het archiveren van gegevens of het verwijderen van onnodige gegevens/objecten geen optie is, kunt u overwegen om naar een hogere databaselaag te schalen.

Belangrijk

Voor gedetailleerde informatie over de rekengrootten van Azure SQL Database (enkele database), zie Limieten van resources voor elastische pools met behulp van het vCore-aankoopmodel en Limieten van resources voor elastische pools met behulp van het DTU-aankoopmodel .

CDC-beperking

Fout 2628: tekenreeks- of binaire gegevens worden afgekort in tabel

  • Oorzaak: als u de grootte van kolommen van een tabel met CDC wijzigt met behulp van DDL-instructies, kan dit problemen veroorzaken met het volgende CDC-opnameproces. De sys.dm_cdc_errors Dynamische Beheerweergave (DMV) is een nuttige tool voor het controleren van CDC op gemelde problemen, zoals foutcodes 2628 en 8115.

  • aanbeveling: voordat u wijzigingen aanbrengt in de kolomgrootte, moet u beoordelen of de wijziging compatibel is met de bestaande gegevens in CDC-wijzigingstabellen. U kunt dit probleem oplossen door CDC uit te schakelen en opnieuw in te schakelen voor uw database. Zie voor meer informatie over het inschakelen van CDC voor een database of tabel CDC inschakelen voor Azure SQL Database en CDC inschakelen voor een tabel secties in dit artikel.

Fout 22830 - Ingebouwde functie 'SUSER_SNAME' in imitatiecontext wordt niet ondersteund in deze versie van SQL Server

  • Oorzaak: deze fout treedt op tijdens het inschakelen van CDC als er een gebruikerstrigger bestaat in de database, die een aanroep van SUSER_SNAME() op create_tableheeft. U kunt triggers weergeven met het volgende Transact-SQL script. Deze opdracht geeft de details van de objecttrigger en de bijbehorende object_id:

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

    Zodra u de triggerdefinities hebt ontvangen, kunt u zoeken naar aanroepen die worden gedaan naar SYSTEM_USER met het volgende script:

    SELECT OBJECT_DEFINITION(object_id) AS trigger_definition;
    
  • aanbeveling: volg deze stappen voor elke gebruikerstrigger die is verkregen uit het vorige script om dit probleem op te lossen.

    • De trigger uitschakelen
    • CDC inschakelen
    • De trigger opnieuw inschakelen

Zie TRIGGER uitschakelenvoor meer informatie.

Fout 913- CDC-opnametaak mislukt bij het verwerken van wijzigingen voor een tabel met het gegevenstype SYSTEEM-CLR

  • Oorzaak: deze fout treedt op bij het inschakelen van CDC in een tabel met het gegevenstype SYSTEM CLR, het aanbrengen van DML-wijzigingen en het aanbrengen van DDL-wijzigingen in dezelfde tabel terwijl de CDC-capturetaak wijzigingen verwerkt die betrekking hebben op andere tabellen.

  • aanbeveling: de aanbevolen stappen zijn het tijdelijk stoppen van DML op de tabel, een capture-taak uitvoeren om wijzigingen te verwerken, DDL-opdrachten op de tabel toepassen, nog een capture-taak uitvoeren om DDL-wijzigingen te verwerken, en vervolgens DML-verwerking opnieuw in te schakelen. Voor meer informatie, zie CDC-opnametaak mislukt bij het verwerken van wijzigingen voor een tabel met het systeem-CLR-gegevenstype (geometrie, geografie of hiërarchieid).

Gebruiker maken en rol toewijzen

Als de cdc user is verwijderd, kunt u de gebruiker handmatig opnieuw toevoegen.

Gebruik het volgende T-SQL-script om een gebruiker (cdc) te maken en de juiste rol (db_owner) toe te wijzen.

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

Controleer en voeg roltoewijzingen toe

Als u wilt controleren of cdc gebruiker deel uitmaakt van de sysadmin of db_owner rol, voert u de volgende T-SQL-query uit:

EXECUTE AS USER = 'cdc';

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

Als de cdc gebruiker geen deel uitmaakt van een van beide rollen, voert u de volgende T-SQL-query uit om db_owner rol toe te voegen aan de cdc gebruiker.

EXEC sp_addrolemember 'db_owner' , 'cdc';