Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Managed Instance
In dit artikel wordt beschreven hoe de volgende functies communiceren met wijzigingsgegevens vastleggen voor SQL Server en Azure SQL Managed Instance. Voor Azure SQL Database, zie CDC met Azure SQL Database.
Wijzigingen bijhouden
Wijzigingen vastleggen en wijzigingen bijhouden kunnen worden ingeschakeld in dezelfde database. Er zijn geen speciale overwegingen vereist. Zie Werken met wijzigingen bijhoudenvoor meer informatie.
Databasespiegeling
Een database die is ingeschakeld voor het vastleggen van wijzigingsgegevens, kan worden gespiegeld. Volg deze stappen om ervoor te zorgen dat vastleggen en opschonen automatisch wordt uitgevoerd na een failover:
Zorg ervoor dat SQL Server Agent draait op het nieuwe principale serverexemplaar.
Maak de opnametaak en opschoontaak op de nieuwe principal-database (de voormalige gespiegelde database). Gebruik de opgeslagen procedure sp_cdc_add_job om de jobs aan te maken.
Als u de huidige configuratie van een opschonings- of opnametaak wilt weergeven, gebruikt u de opgeslagen procedure sys.sp_cdc_help_jobs op het nieuwe principal-serverexemplaar. Voor een bepaalde database krijgt de capture-taak de naam cdc.database_name_capture en de opschoontaak heet cdc.database_name_cleanup, waarbij database_name de naam van de database is.
Als u de configuratie van een taak wilt wijzigen, gebruikt u de sys.sp_cdc_change_job opgeslagen procedure.
Zie Database Mirroring (SQL Server)voor meer informatie over databasespiegeling.
Transactionele replicatie
Het vastleggen van gegevens en transactionele replicatie kan naast elkaar bestaan in dezelfde database, maar de populatie van de wijzigingstabellen wordt anders verwerkt wanneer beide functies zijn ingeschakeld. Wijziging van gegevensopname en transactionele replicatie gebruiken altijd dezelfde procedure, sp_replcmds, om wijzigingen uit het transactielogboek te lezen. Wanneer vastleggen van gegevenswijzigingen alleen is ingeschakeld, roept een SQL Server Agent-taak sp_replcmdsaan. Wanneer beide functies zijn ingeschakeld voor dezelfde database, roept de logboeklezeragent sp_replcmdsaan. Deze agent vult zowel de wijzigingstabellen als de distributiedatabasetabellen in. Voor meer informatie, zie Agent voor replicatielogboeklezer.
Overweeg een scenario waarin wijzigingsgegevens vastleggen is ingeschakeld op de AdventureWorks2022
-database en twee tabellen zijn ingeschakeld voor vastleggen. Om de wijzigingstabellen te vullen, roept de capture-taak sp_replcmdsaan. De database is ingeschakeld voor transactionele replicatie en er wordt een publicatie gemaakt. De logboeklezeragent wordt nu gemaakt voor de database en de opnametaak wordt verwijderd. De logboeklezeragent blijft het logboek scannen vanaf het laatste logboekreeksnummer dat is doorgevoerd in de wijzigingstabel. Dit zorgt voor gegevensconsistentie in de wijzigingstabellen. Als transactionele replicatie is uitgeschakeld in deze database, wordt de logboeklezeragent verwijderd en wordt de opnametaak opnieuw gemaakt.
Notitie
Wanneer de logboeklezeragent wordt gebruikt voor zowel het vastleggen van wijzigingen als transactionele replicatie, worden gerepliceerde wijzigingen eerst naar de distributiedatabase geschreven. Vervolgens worden vastgelegde wijzigingen naar de wijzigingstabellen geschreven. Beide bewerkingen worden samen doorgevoerd. Als er een latentie is bij het schrijven naar de distributiedatabase, is er een overeenkomstige latentie voordat wijzigingen in de wijzigingstabellen worden weergegeven.
De proc exec optie voor transactionele replicatie is niet beschikbaar wanneer wijzigingsgegevens vastleggen is ingeschakeld.
Database herstellen of koppelen
SQL Server gebruikt de volgende logica om te bepalen of het vastleggen van wijzigingen van gegevens is ingeschakeld nadat een database is hersteld of gekoppeld:
Als een database wordt hersteld naar dezelfde server met dezelfde databasenaam, blijft wijzigingsgegevens vastleggen ingeschakeld.
Als een database wordt hersteld naar een andere server, wordt het vastleggen van wijzigingen van gegevens standaard uitgeschakeld en worden alle gerelateerde metagegevens verwijderd.
Als u het vastleggen van wijzigingen wilt behouden, gebruikt u de optie KEEP_CDC bij het herstellen van de database. Zie RESTOREvoor meer informatie over deze optie.
Als een database is losgekoppeld en is gekoppeld aan dezelfde server of een andere server, blijft wijzigingsgegevens vastleggen ingeschakeld.
Als een database is gekoppeld aan of hersteld met de optie KEEP_CDC voor een andere editie dan Standard, Enterprise of SQL Managed Instance, wordt de bewerking geblokkeerd omdat voor het vastleggen van wijzigingsgegevens SQL Server Standard-, Enterprise- of SQL Managed Instance-edities zijn vereist. Foutbericht 934 wordt weergegeven:
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.
U kunt sys.sp_cdc_disable_db gebruiken om het vastleggen van wijzigingsgegevens uit een herstelde of gekoppelde database te verwijderen.
Na het herstellen van een database in Azure SQL Managed Instance blijft CDC ingeschakeld, maar moet u ervoor zorgen dat de scan- en opschoontaken worden toegevoegd en uitgevoerd. U kunt de taken handmatig toevoegen door sys.sp_cdc_add_jobuit te voeren.
Ingesloten databases
Gegevenswijzigingen vastleggen wordt niet ondersteund in geïsoleerde databases.
Beschikbaarheidsgroepen
Wanneer u AlwaysOn-beschikbaarheidsgroepen gebruikt, moet u de inventarisatie op de secundaire replica wijzigen om de schijfbelasting op de primaire replica te verminderen.
Columnstore-indexen
Gegevenswijzigingen vastleggen kan niet worden ingeschakeld voor tabellen met een geclusterde columnstore-index. Vanaf SQL Server 2016 kan deze worden ingeschakeld voor tabellen met een niet-geclusterde columnstore-index.
Berekende kolommen
CDC biedt geen ondersteuning voor de waarden voor berekende kolommen, zelfs niet als de berekende kolom is gedefinieerd als persistent. Berekende kolommen die zijn opgenomen in een capture-exemplaar, hebben altijd een waarde van NULL
. Dit gedrag is bedoeld en geen bug.
Linux
CDC wordt ondersteund voor SQL Server 2017 op Linux vanaf CU18 en SQL Server 2019 op Linux.