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 Database
Azure SQL Managed Instance
In dit artikel wordt de functie voor het bijhouden van wijzigingen voor SQL Server beschreven. Dit is een lichtgewicht oplossing die een efficiënt mechanisme voor het bijhouden van wijzigingen biedt voor toepassingen.
Om aan de slag te gaan, raadpleeg Wijzigingen bijhouden configureren.
Overzicht
Voorheen moesten applicatieontwikkelaars aangepaste mechanismen voor het bijhouden van wijzigingen implementeren om applicaties in staat te stellen wijzigingen in gegevens in een database op te vragen en toegang te krijgen tot informatie die verband houdt met deze wijzigingen. Deze mechanismen hebben doorgaans veel werk met zich mee gebracht, zoals een combinatie van triggers, tijdstempel kolommen, nieuwe tabellen voor het opslaan van traceringsgegevens en aangepaste opschoningsprocessen. De functie voor het bijhouden van wijzigingen van SQL Server vereenvoudigt dit proces, waardoor u eenvoudig informatie kunt identificeren met betrekking tot wijzigingen zonder dat hiervoor een aangepaste oplossing nodig is.
Verschillende typen toepassingen hebben verschillende vereisten voor hoeveel informatie ze nodig hebben over de wijzigingen. Toepassingen kunnen wijzigingen bijhouden gebruiken om de volgende vragen te beantwoorden over de wijzigingen die zijn aangebracht in een gebruikerstabel:
Welke rijen zijn gewijzigd voor een gebruikerstabel?
Alleen het feit dat een rij is gewijzigd, is vereist, niet hoe vaak de rij is gewijzigd of de waarden van tussenliggende wijzigingen.
De meest recente gegevens kunnen rechtstreeks worden verkregen uit de tabel die wordt bijgehouden.
Is er een rij gewijzigd?
- Het feit dat een rij is gewijzigd en informatie over de wijziging moet beschikbaar zijn en vastgelegd op het moment dat de wijziging in dezelfde transactie is aangebracht.
Notitie
Als voor een toepassing informatie nodig is over alle wijzigingen die zijn aangebracht en de tussenliggende waarden van de gewijzigde gegevens, kan het handig zijn om wijzigingen vast te leggen in plaats van wijzigingen bij te houden. Zie Over Change Data Capture (SQL Server)voor meer informatie.
One-Way- en Two-Way-synchronisatietoepassingen
Toepassingen die gegevens moeten synchroniseren met een exemplaar van de SQL Server Database Engine, moeten query's kunnen uitvoeren op wijzigingen. Wijzigingen bijhouden kan worden gebruikt als basis voor zowel eenrichtings- als tweerichtingssynchronisatietoepassingen.
One-Way synchronisatietoepassingen
Eénrichtingssynchronisatie-applicaties, zoals een client- of middellaagcachingapplicatie, kunnen worden gebouwd die gebruikmaken van het volgen van wijzigingen. Zoals wordt weergegeven in de volgende afbeelding, moeten gegevens worden opgeslagen in de database-engine en worden gecached in andere gegevensarchieven. De toepassing moet de cache up-to-date kunnen houden met eventuele wijzigingen die zijn aangebracht in de databasetabellen. Er zijn geen wijzigingen die moeten worden doorgevoerd in de database-engine.
Two-Way synchronisatietoepassingen
Bidirectionele synchronisatietoepassingen kunnen ook worden ontwikkeld die gebruikmaken van wijzigingsbeheer. In dit scenario worden de gegevens in een exemplaar van de database-engine gesynchroniseerd met een of meer gegevensarchieven. De gegevens in deze archieven kunnen worden bijgewerkt en de wijzigingen moeten worden gesynchroniseerd met de database-engine.
Een goed voorbeeld van een tweerichtingssynchronisatietoepassing is een af en toe verbonden toepassing. In dit type toepassing voert een clienttoepassing query's uit en werkt een lokale database bij. Wanneer er een verbinding beschikbaar is tussen een client en server, wordt de toepassing gesynchroniseerd met een server en worden gegevensstromen in beide richtingen gewijzigd.
De synchronisatietoepassingen in twee richtingen moeten conflicten kunnen detecteren. Er treedt een conflict op als dezelfde gegevens in beide gegevensarchieven in de tijd tussen synchronisaties zijn gewijzigd. Met de mogelijkheid om conflicten te detecteren, kan een toepassing ervoor zorgen dat wijzigingen niet verloren gaan.
Hoe Wijzigingen bijhouden werkt
Als u wijzigingen bijhouden wilt configureren, kunt u DDL-instructies of SQL Server Management Studio gebruiken. Zie Wijzigingen bijhouden in- en uitschakelenvoor meer informatie. Als u wijzigingen wilt bijhouden, moet het bijhouden van wijzigingen eerst zijn ingeschakeld voor de database en vervolgens zijn ingeschakeld voor de tabellen die u in die database wilt bijhouden. De tabeldefinitie hoeft op geen enkele manier te worden gewijzigd en er worden geen triggers gemaakt.
Nadat het bijhouden van wijzigingen is geconfigureerd voor een tabel, zorgt een DML-instructie die van invloed is op rijen in de tabel ervoor dat wijzigingen bijhouden voor elke gewijzigde rij worden vastgelegd. Als u een query wilt uitvoeren op de rijen die zijn gewijzigd en om informatie over de wijzigingen te verkrijgen, kunt u functies voor het bijhouden van wijzigingen gebruiken.
De waarden van de primaire sleutelkolom zijn de enige informatie uit de bijgehouden tabel die naast de wijzigingsgegevens wordt vastgelegd. Deze waarden identificeren de rijen die zijn gewijzigd. Om de nieuwste gegevens voor deze rijen te verkrijgen, kan een toepassing waarden uit de primaire sleutelkolom gebruiken om de brontabel te verbinden met de gesynchroniseerde tabel.
Informatie over de wijziging die in elke rij is aangebracht, kan ook worden verkregen met behulp van wijzigingen bijhouden. Bijvoorbeeld het type DML-bewerking dat de wijziging heeft veroorzaakt (invoegen, bijwerken of verwijderen) of de kolommen die zijn gewijzigd als onderdeel van een updatebewerking.
Alle DML-bewerkingen worden bijgehouden, zelfs als de waarde van een kolom niet verandert. Als een update-instructie bijvoorbeeld een kolom instelt op dezelfde waarde als die al is, wordt de kolom nog steeds beschouwd als gewijzigd.
Opschonen van Wijzigingsgeschiedenis
Informatie over het bijhouden van wijzigingen voor alle tabellen (ingeschakeld voor Wijzigingen bijhouden) wordt opgeslagen in een in-memory rowstore. Gegevens voor Wijzigingen bijhouden die zijn gekoppeld aan elke tabel die is ingeschakeld voor Wijzigingen bijhouden, worden bij elk controlepunt overgebracht van het geheugenrijarchief naar de bijbehorende interne tabel op schijf. Tijdens een controlepunt wordt de in-memory rowstore ook opgeschoond nadat de rijen naar de tabellen op de schijf zijn verplaatst.
Elke tabel die is ingeschakeld voor Wijzigingen bijhouden, heeft een interne tabel op schijf die wordt gebruikt door de functies Wijzigingen bijhouden om de wijzigingsversie en de rijen te bepalen die zijn gewijzigd sinds een bepaalde versie. Telkens wanneer de automatisch opschonen thread wordt geactiveerd, worden alle gebruikersdatabases op het SQL Server-exemplaar gescand om de voor wijzigingen bijhouden ingeschakelde databases te identificeren. Op basis van de retentieperiode-instelling van de database wordt elke interne tabel op schijf verwijderd van de verlopen records.
Er is een opgeslagen procedure toegevoegd in Service Packs voor SQL Server 2014 (12.x) en SQL Server 2016 (13.x) voor het handmatig opschonen van interne tabellen voor wijzigingen bijhouden. Meer informatie over de opgeslagen procedure is beschikbaar in KB173157.