Dela via


Stoppa systemversioner i en systemversionsbaserad temporal tabell

gäller för: SQL Server 2016 (13.x) och senare versioner Azure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Microsoft Fabric

Du kanske vill stoppa versionshantering i den temporära tabellen, antingen tillfälligt eller permanent. Du kan göra det genom att ställa in villkoret SYSTEM_VERSIONING till OFF.

Ange SYSTEM_VERSIONING = AV

Stoppa systemversioner om du vill utföra specifika underhållsåtgärder i en temporal tabell eller inte längre behöver en versionstabell. På grund av den här åtgärden får du två oberoende tabeller:

  • Aktuell tabell med en perioddefinition
  • Historiktabell som en vanlig tabell

Anmärkningar

Historiktabellen slutar samla in uppdateringarna under SYSTEM_VERSIONING = OFF.

Ingen dataförlust sker i den tidsmässiga tabellen när du anger SYSTEM_VERSIONING = OFF eller släpper SYSTEM_TIME period.

När du anger SYSTEM_VERSIONING = OFF och inte tar bort SYSTEM_TIME-perioden, fortsätter systemet att uppdatera periodkolumnerna vid varje inmatning och uppdatering. Borttagningar i den aktuella tabellen är permanenta.

Du måste ta bort den SYSTEM_TIME perioden för att ta bort periodkolumnerna. Om du vill ta bort periodkolumnerna använder du ALTER TABLE <table> DROP <column>;. Mer information finns i Ändra schemat för en systemversionsbaserad temporal tabell.

När du anger SYSTEM_VERSIONING = OFFkan alla användare med tillräcklig behörighet ändra schemat och innehållet i historiktabellen, eller till och med permanent ta bort historiktabellen.

Du kan inte ange SYSTEM_VERSIONING = OFF om du har andra objekt som skapats med SCHEMABINDING med hjälp av temporala frågetillägg, till exempel refererar till SYSTEM_TIME. Den här begränsningen förhindrar att dessa objekt misslyckas om du anger SYSTEM_VERSIONING = OFF.

Ta bort SYSTEM_VERSIONING permanent

Det här exemplet tar bort SYSTEM_VERSIONING permanent och tar bort periodkolumnerna. Det är valfritt att ta bort periodkolumnerna.

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;

Ta tillfälligt bort SYSTEM_VERSIONING

Följande lista innehåller åtgärder som kräver att systemversionering sätts till OFF:

  • Ta bort onödiga data från historiken (DELETE eller TRUNCATE)
  • Ta bort data från den aktuella tabellen utan versionshantering (DELETE, TRUNCATE)
  • Partition SWITCH OUT från den aktuella tabellen
  • Partitionera SWITCH IN i historiktabellen

Det här exemplet stoppar tillfälligt SYSTEM_VERSIONING så att du kan utföra specifika underhållsåtgärder. Om du stoppar versionshantering tillfälligt som en förutsättning för tabellunderhåll rekommenderar vi starkt att du gör den här ändringen i en transaktion för att behålla datakonsekvensen.

När du aktiverar systemversioner igen ska du inte glömma att ange argumentet HISTORY_TABLE. Om du inte gör det skapas en ny historiktabell och associeras med den aktuella tabellen. Den ursprungliga historiktabellen kan fortfarande finnas som en normal tabell och är inte längre associerad med den aktuella tabellen.

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;