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
De wijzigingstabel die wordt aangemaakt wanneer wijzigingsgegevensverzameling wordt ingeschakeld op een brontabel. De tabel geeft één rij terug voor elke invoeg- en verwijderoperatie die wordt uitgevoerd op de brontabel, en twee rijen voor elke updatebewerking die op de brontabel wordt uitgevoerd. Wanneer de naam van de wijzigingstabel niet is opgegeven op het moment dat de brontabel wordt ingeschakeld, wordt de naam afgeleid. De naam is cdc. capture_instance_CT waarbij capture_instance de schemanaam van de brontabel is en de naam van de brontabel in het formaat schema_table. Als bijvoorbeeld de tabel Person.Address in de AdventureWorks-voorbeelddatabase is ingeschakeld voor wijzigingsgegevensverzameling, zou de naam van de afgeleide wijzigingstabel cdc.Person_Address_CT zijn.
We raden aan om de systeemtabellen niet direct te bevragen. Voer in plaats daarvan de functies cdc.fn_cdc_get_all_changes_<capture_instance> en cdc.fn_cdc_get_net_changes_<capture_instance> uit.
| Kolomnaam | Gegevenstype | Description |
|---|---|---|
| __$start_lsn | binary(10) | Logvolgordenummer (LSN) dat is gekoppeld aan de commit-transactie voor de wijziging. Alle wijzigingen die in dezelfde transactie worden uitgevoerd, delen hetzelfde commit LSN. Als bijvoorbeeld een verwijderingsoperatie op de brontabel twee rijen verwijdert, bevat de wijzigingstabel twee rijen, elk met dezelfde __$start_lsn waarde. |
| __$end_lsn | binary(10) | Alleen ter informatie geïdentificeerd. Wordt niet ondersteund. Toekomstige compatibiliteit is niet gegarandeerd. In SQL Server 2012 (11.x) is deze kolom altijd NULL. |
| __$seqval | binary(10) | Volgorde van de bewerking zoals weergegeven in het transactielogboek. Mag niet worden gebruikt voor bestellingen. Gebruik in plaats daarvan de kolom __$command_id . |
| __$operatie | int | Identificeert de datamanipulatietaal (DML)-operatie die bij de wijziging hoort. Dit kan een van de volgende zijn: 1 = verwijderen 2 = invoegen 3 = bijwerken (oude waarden) Kolomgegevens hebben rijwaarden voordat de update-instructie wordt uitgevoerd. 4 = update (nieuwe waarden) Kolomgegevens hebben rijwaarden na het uitvoeren van de update-instructie. |
| __$update_mask | varbinary(128) | Een bitmasker gebaseerd op de kolomordinaaltalen van de wijzigingstabel die die kolommen identificeert die zijn veranderd. |
| <Kolommen van gevangen brontabellen> | varies | De overige kolommen in de wijzigingstabel zijn de kolommen uit de brontabel die als gevangen kolommen werden geïdentificeerd toen de capture-instantie werd aangemaakt. Als er geen kolommen zijn gespecificeerd in de lijst met vastgelegde kolommen, worden alle kolommen in de brontabel opgenomen in deze tabel. |
| __$command_id | int | Houdt de volgorde van bewerkingen binnen een transactie bij. |
Opmerkingen
De __$command_id kolom werd geïntroduceerd in een cumulatieve update in versies van 2012 tot en met 2016. Voor versie- en downloadinformatie, zie KB-artikel 3030352 bij FIX: De wijzigingstabel is verkeerd gerangschikt voor bijgewerkte rijen nadat je wijzigingsdataverzameling voor een Microsoft SQL Server-database hebt ingeschakeld. Voor meer informatie, zie CDC-functionaliteit kan breken na een upgrade naar de nieuwste CU voor SQL Server 2012, 2014 en 2016.
Vastgelegde kolomgegevenstypen
Vastgelegde kolommen die in deze tabel zijn opgenomen, hebben hetzelfde datatype en dezelfde waarde als hun overeenkomstige bronkolommen, met de volgende uitzonderingen:
Tijdstempelkolommen worden gedefinieerd als binair(8).
Identiteitskolommen worden gedefinieerd als int of bigint.
De waarden in deze kolommen zijn echter hetzelfde als de waarden van de bronkolom.
Grote Objectgegevenstypen
Kolommen met datatype afbeelding, tekst en ntext krijgen altijd een NULL-waarde toegewezen wanneer __$operatie = 1 of __$operatie = 3. Kolommen van het datatype varbinary(max),varchar(max) of nvarchar(max) krijgen een NULL-waarde toegewezen wanneer __$operation = 3 is, tenzij de kolom tijdens de update is veranderd. Wanneer __$operatie = 1, krijgen deze kolommen hun waarde toegewezen op het moment van het verwijderen. Berekende kolommen die in een capture-instantie zijn opgenomen, hebben altijd de waarde NULL.
Standaard is de maximale grootte die aan een vastgelegde kolom kan worden toegevoegd in een enkele INSERT, UPDATE, WRITETEXT of UPDATETEXT-instructie 65.536 bytes of 64 KB. Om deze grootte te vergroten en grotere LOB-data te ondersteunen, gebruik je de optie Server Configuratie Configureer de maximale tekstrepl-grootte om een grotere maximale grootte aan te geven. Voor meer informatie, zie De maximale tekstrepl-grootte Serverconfiguratieoptie Configureren.
Wijzigingen in de datadefinitie van de taal
DDL-aanpassingen aan de brontabel, zoals het toevoegen of verwijderen van kolommen, worden geregistreerd in de cdc.ddl_history tabel. Deze wijzigingen worden niet toegepast op de wijzigingstabel. Dat wil zeggen, de definitie van de wijzigingstabel blijft constant. Bij het invoegen van rijen in de wijzigingstabel negeert het captureproces die kolommen die niet voorkomen in de verzamelde kolomlijst die aan de brontabel is gekoppeld. Als een kolom in de vastgelegde kolomlijst voorkomt die niet langer in de brontabel staat, krijgt de kolom een nulwaarde toegewezen.
Het wijzigen van het datatype van een kolom in de brontabel wordt ook vastgelegd in de cdc.ddl_history-tabel. Deze wijziging verandert echter wel de definitie van de wijzigingstabel. Het datatype van de vastgelegde kolom in de wijzigingstabel wordt aangepast wanneer het captureproces het logrecord tegenkomt voor de DDL-wijziging die aan de brontabel is aangebracht.
Als je het datatype van een vastgelegde kolom in de brontabel moet aanpassen op een manier die de grootte van het datatype verkleint, gebruik dan de volgende procedure om ervoor te zorgen dat de equivalente kolom in de wijzigingstabel succesvol kan worden gewijzigd.
In de brontabel werkt u de waarden in de kolom die aangepast moet worden bij om binnen de geplande datatypegrootte te passen. Als je bijvoorbeeld het datatype verandert van int naar smallint, werk je de waarden bij tot een grootte die binnen het smallint-bereik valt, -32.768 tot 32.767.
In de wijzigingstabel voert u dezelfde update-operatie uit op de equivalente kolom.
Verander de brontabel door het nieuwe datatype te specificeren. De wijziging van het datatype wordt succesvol doorgegeven aan de wijzigingstabel.
Wijzigingen in datamanipulatietaal
Wanneer invoeg-, bijwerk- en verwijderingsoperaties worden uitgevoerd op een brontabel met wijzigingsdataverzameling, verschijnt er een record van die DML-bewerkingen in het databasetransactielogboek. Het wijzigingsdataverzamelproces haalt informatie over die wijzigingen op uit het transactielogboek en voegt één of twee rijen toe aan de wijzigingstabel om de wijziging vast te leggen. Vermeldingen worden in dezelfde volgorde aan de wijzigingstabel toegevoegd als waarin ze in de brontabel zijn gecommand. Dat gezegd hebbende, moet de commit van wijzigingstabel-items doorgaans worden uitgevoerd op een groep wijzigingen in plaats van per invoer per item.
Een invoegoperatie resulteert in één rij die aan de wijzigingstabel wordt toegevoegd; een verwijderingsoperatie resulteert in één rij die aan de wijzigingstabel wordt toegevoegd; als SQL Server een update implementeert als een "uitgestelde update", wat betekent dat het een paar verwijder- en invoegoperaties is, resulteert de updateoperatie in twee rijen die aan de wijzigingstabel worden toegevoegd: de eerste rij die het verwijderen van de vastgelegde data weergeeft, en de tweede rij die het invoegen van de bijgewerkte, vastgelegde data weerspiegelt; als SQL Server een update niet implementeert als een "uitgestelde update", resulteert de update-operatie in twee rijen die aan de wijzigingstabel worden toegevoegd: de eerste rij weerspiegelt de vastgelegde gegevens vóór de update, en de tweede rij de vastgelegde data na de update.
Binnen de wijzigingstabel wordt de kolom __$start_lsn gebruikt om het commit-LSN vast te leggen dat gekoppeld is aan de wijziging in de brontabel, de kolom __$command_id wordt gebruikt om de wijziging binnen de transactie te ordenen, en de kolom __$operatie om de uitgevoerde operatie vast te leggen. Samen kunnen deze metadatakolommen worden gebruikt om ervoor te zorgen dat de commitvolgorde van de bronwijzigingen behouden blijft. Omdat het capture-proces zijn wijzigingsinformatie uit het transactielogboek haalt, is het belangrijk op te merken dat wijzigingstabelvermeldingen niet synchroon verschijnen met hun overeenkomstige brontabelwijzigingen. In plaats daarvan verschijnen overeenkomstige wijzigingen asynchroon, nadat het capture-proces de relevante wijzigingsposten uit het transactielogboek heeft verwerkt.
Voor insert- en delete-operaties worden alle bits in het updatemasker ingesteld. Voor update-operaties wordt het updatemasker in zowel de update-oude als update-nieuwe rijen aangepast om de kolommen te weerspiegelen die tijdens de update zijn veranderd.
Zie ook
sys.sp_cdc_enable_table (Transact-SQL)
sys.sp_cdc_get_ddl_history (Transact-SQL)