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
SQL-database in Microsoft Fabric Preview
In dit artikel wordt beschreven hoe u wijzigingen bijhouden beheert. Ook wordt beschreven hoe u beveiliging configureert en de gevolgen voor opslag en prestaties bepaalt wanneer wijzigingen bijhouden wordt gebruikt.
Wijzigingen bijhouden beheren
De volgende secties bevatten catalogusweergaven, machtigingen en instellingen die relevant zijn voor het beheren van wijzigingen bijhouden.
Catalogusweergaven
Als u wilt bepalen welke tabellen en databases wijzigingen bijhouden zijn ingeschakeld, kunt u de volgende catalogusweergaven gebruiken:
De sys.internal_tables catalogusweergave bevat ook de interne tabellen die worden gemaakt wanneer wijzigingen bijhouden is ingeschakeld voor een gebruikerstabel.
Security
Als u toegang wilt krijgen tot informatie over wijzigingen bijhouden met behulp van de functies voor het bijhouden van wijzigingen, moet de principal over de volgende machtigingen beschikken:
SELECTmachtiging voor ten minste de primaire-sleutelkolommen in de bijgehouden tabel voor de tabel waarop een query wordt uitgevoerd.VIEW CHANGE TRACKINGmachtiging voor de tabel waarvoor wijzigingen worden verkregen. DeVIEW CHANGE TRACKINGmachtiging is om de volgende redenen vereist:Records voor wijzigingen bijhouden bevatten informatie over rijen die zijn verwijderd. De records gebruiken de primaire sleutelwaarden van de rijen die zijn verwijderd. Een principal kan zijn gemachtigd
SELECTvoor een bijgehouden wijzigingstabel nadat bepaalde gevoelige gegevens zijn verwijderd. In dit geval wilt u niet dat die principal toegang heeft tot die verwijderde informatie met behulp van wijzigingen bijhouden.Bijhouden van wijzigingen kan informatie opslaan over welke kolommen zijn gewijzigd door updatebewerkingen. Een principal kan worden geweigerd voor een kolom die gevoelige informatie bevat. Omdat er echter informatie over wijzigingen bijhouden beschikbaar is, kan een principal bepalen dat een kolomwaarde is bijgewerkt, maar de principal kan de waarde van de kolom niet bepalen.
Inzicht in overhead voor het bijhouden van wijzigingen
Wanneer wijzigingen bijhouden is ingeschakeld voor een tabel, worden sommige beheerbewerkingen beïnvloed. De volgende tabel bevat de bewerkingen en de effecten die u moet overwegen.
| Operation | Wanneer wijzigingen bijhouden is ingeschakeld |
|---|---|
DROP TABLE |
Alle informatie over het bijhouden van wijzigingen voor de verwijderde tabel wordt verwijderd. |
ALTER TABLE DROP CONSTRAINT |
Een poging om de PRIMARY KEY beperking te verwijderen mislukt. Wijzigingen bijhouden moet worden uitgeschakeld voordat een PRIMARY KEY beperking kan worden verwijderd. |
ALTER TABLE DROP COLUMN |
Als een kolom die wordt verwijderd deel uitmaakt van de primaire sleutel, is het verwijderen van de kolom niet toegestaan, ongeacht het bijhouden van wijzigingen. Als de kolom die wordt verwijderd geen deel uitmaakt van de primaire sleutel, slaagt het verwijderen van de kolom. Het effect op elke toepassing die deze gegevens synchroniseert, moet echter eerst worden begrepen. Als het bijhouden van wijzigingen in kolommen is ingeschakeld voor de tabel, wordt de verwijderde kolom mogelijk nog steeds geretourneerd als onderdeel van de informatie over het bijhouden van wijzigingen. Het is de verantwoordelijkheid van de toepassing om de verwijderde kolom te verwerken. |
ALTER TABLE ADD COLUMN |
Als er een nieuwe kolom wordt toegevoegd aan de bijgehouden tabel, wordt de toevoeging van de kolom niet bijgehouden. Alleen de updates en wijzigingen die in de nieuwe kolom worden aangebracht, worden bijgehouden. |
ALTER TABLE ALTER COLUMN |
Wijzigingen in gegevenstypen van een niet-primaire-sleutelkolom worden niet bijgehouden. |
ALTER TABLE SWITCH |
Schakelen tussen partities mislukt als voor een of beide tabellen wijzigingen bijhouden is ingeschakeld. |
DROP INDEX, or ALTER INDEX DISABLE |
De index waarmee de primaire sleutel wordt afgedwongen, kan niet worden verwijderd of uitgeschakeld. |
TRUNCATE TABLE |
Het afkappen van een tabel kan worden uitgevoerd op een tabel waarvoor wijzigingen bijhouden is ingeschakeld. De rijen die door de bewerking worden verwijderd, worden echter niet bijgehouden en de minimaal geldige versie wordt bijgewerkt. Wanneer een toepassing de versie controleert, geeft de controle aan dat de versie te oud is en een herinitialisatie is vereist. Dit is hetzelfde als het bijhouden van wijzigingen wordt uitgeschakeld en vervolgens opnieuw kan worden uitgevoerd voor de tabel. |
Als u wijzigingen bijhouden gebruikt, wordt er enige overhead toegevoegd aan DML-bewerkingen vanwege de informatie over het bijhouden van wijzigingen die wordt opgeslagen als onderdeel van de bewerking.
Effecten op DML
Wijzigingen bijhouden is geoptimaliseerd om de prestatieoverhead voor DML-bewerkingen te minimaliseren. De overhead voor incrementele prestaties die is gekoppeld aan het gebruik van wijzigingen bijhouden in een tabel, is vergelijkbaar met de overhead die wordt gemaakt wanneer een index voor een tabel wordt gemaakt en moet worden onderhouden.
Voor elke rij die wordt gewijzigd door een DML-bewerking, wordt er een rij toegevoegd aan de interne tabel voor het bijhouden van wijzigingen. Het effect hiervan ten opzichte van de DML-bewerking is afhankelijk van verschillende factoren, zoals:
Het aantal primaire-sleutelkolommen
De hoeveelheid gegevens die wordt gewijzigd in de rij van de gebruikerstabel
Het aantal bewerkingen dat wordt uitgevoerd in een transactie
Isolatie van momentopnamen, indien gebruikt, heeft ook invloed op de prestaties voor alle DML-bewerkingen, ongeacht of wijzigingen bijhouden is ingeschakeld of niet.
Effecten op opslag
Wijzigingen bijhouden wordt opgeslagen in de volgende typen interne tabellen:
Interne wijzigingstabel
Er is één interne wijzigingstabel voor elke gebruikerstabel waarvoor wijzigingen bijhouden is ingeschakeld.
Interne transactietabel
Er is één interne transactietabel voor de database.
Deze interne tabellen zijn op de volgende manieren van invloed op opslagvereisten:
Voor elke wijziging in elke rij in de gebruikerstabel wordt er een rij toegevoegd aan de interne wijzigingstabel. Deze rij heeft een kleine vaste overhead plus een variabele overhead die gelijk is aan de grootte van de primaire-sleutelkolommen. De rij kan optionele contextinformatie bevatten die door een toepassing is ingesteld. En als het bijhouden van kolommen is ingeschakeld, vereist elke gewijzigde kolom 4 bytes in de traceringstabel.
Voor elke vastgelegde transactie wordt een rij toegevoegd aan een interne transactietabel.
Net als bij andere interne tabellen kunt u de ruimte bepalen die wordt gebruikt voor de tabellen voor het bijhouden van wijzigingen met behulp van de sp_spaceused opgeslagen procedure. De namen van de interne tabellen kunnen worden verkregen met behulp van de sys.internal_tables catalogusweergave, zoals wordt weergegeven in het volgende voorbeeld.
sp_spaceused 'sys.change_tracking_309576141'
sp_spaceused 'sys.syscommittab'
Verwante inhoud
- Gegevenswijzigingen bijhouden (SQL Server)
- ALTER TABLE (Transact-SQL)
- Database-eigenschappen (ChangeTracking-pagina)
- OPTIES VOOR ALTER DATABASE SET (Transact-SQL)
- sys.change_tracking_databases (Transact-SQL)
- sys.change_tracking_tables (Transact-SQL)
- over wijzigingen bijhouden (SQL Server)
- Werken met wijzigingsgegevens