Delen via


Systeemversiebeheer op een tijdelijke tabel met systeemversies stoppen

Van toepassing op: SQL Server 2016 (13.x) en latere versies Azure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric

Mogelijk wilt u het versiebeheer op uw tijdelijke tabel tijdelijk of permanent stoppen. U kunt dit doen door de SYSTEM_VERSIONING component in te stellen op OFF.

SYSTEM_VERSIONING instellen op UIT

Stop systeemversiebeheer als u specifieke onderhoudsbewerkingen wilt uitvoeren op een tijdelijke tabel of geen geversiede tabel meer nodig hebt. Vanwege deze bewerking krijgt u twee onafhankelijke tabellen:

  • Huidige tabel met een periodedefinitie
  • Geschiedenistabel als een gewone tabel

Opmerkingen

De geschiedenistabel stopt met het vastleggen van de updates tijdens SYSTEM_VERSIONING = OFF.

Er gebeurt geen gegevensverlies in de tijdelijke tabel wanneer u SYSTEM_VERSIONING = OFF instelt of de SYSTEM_TIME periode neer zet.

Wanneer u SYSTEM_VERSIONING = OFF instelt en de SYSTEM_TIME periode niet verwijdert, blijft het systeem de periodekolommen voor elke invoeg- en bijwerkbewerkingen bijwerken. Verwijderingen in de huidige tabel zijn permanent.

U moet de SYSTEM_TIME periode verwijderen om de puntkolommen te verwijderen. Als u de puntkolommen wilt verwijderen, gebruikt u ALTER TABLE <table> DROP <column>;. Voor meer informatie, zie Het schema van een systeemversie-gebaseerde tijdtabel wijzigen.

Wanneer u SYSTEM_VERSIONING = OFFinstelt, kunnen alle gebruikers met voldoende machtigingen het schema en de inhoud van de geschiedenistabel wijzigen of zelfs de geschiedenistabel permanent verwijderen.

U kunt SYSTEM_VERSIONING = OFF niet instellen als u andere objecten hebt gemaakt met SCHEMABINDING met behulp van tijdelijke queryextensies, zoals het verwijzen naar SYSTEM_TIME. Deze beperking voorkomt dat deze objecten mislukken als u SYSTEM_VERSIONING = OFFinstelt.

Permanent SYSTEM_VERSIONING verwijderen

In dit voorbeeld worden SYSTEM_VERSIONING permanent verwijderd en worden de periodekolommen gewist. Het verwijderen van de puntkolommen is optioneel.

ALTER TABLE dbo.Department
SET (SYSTEM_VERSIONING = OFF);

-- Optionally, DROP PERIOD if you want to revert temporal table to a non-temporal
ALTER TABLE dbo.Department
DROP PERIOD FOR SYSTEM_TIME;

Tijdelijk SYSTEM_VERSIONING verwijderen

De volgende lijst bevat de lijst met bewerkingen waarvoor systeemversiebeheer moet worden ingesteld op OFF:

  • Overbodige gegevens verwijderen uit de geschiedenis (DELETE of TRUNCATE)
  • Gegevens verwijderen uit de huidige tabel zonder versiebeheer (DELETE, TRUNCATE)
  • Partitie SWITCH OUT uit de huidige tabel
  • Partitie SWITCH IN in de geschiedenistabel

In dit voorbeeld wordt SYSTEM_VERSIONING tijdelijk gestopt, zodat u specifieke onderhoudsbewerkingen kunt uitvoeren. Als u versiebeheer tijdelijk stopt als een vereiste voor tabelonderhoud, raden we u ten zeerste aan deze wijziging in een transactie uit te voeren om gegevensconsistentie te behouden.

Wanneer u systeemversiebeheer weer inschakelt, vergeet dan niet om het argument HISTORY_TABLE op te geven. Als u dit niet doet, wordt er een nieuwe geschiedenistabel gemaakt en gekoppeld aan de huidige tabel. De oorspronkelijke geschiedenistabel kan nog steeds bestaan als een normale tabel, is niet meer gekoppeld aan de huidige tabel.

BEGIN TRANSACTION;

ALTER TABLE dbo.Department
SET (SYSTEM_VERSIONING = OFF);

TRUNCATE TABLE [History].[DepartmentHistory]
WITH (PARTITIONS(1, 2));

ALTER TABLE dbo.Department
SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = History.DepartmentHistory));

COMMIT;