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

Sluta med systemversionering om du vill utföra specifika underhållsoperationer på en temporär tabell eller inte längre behöver en versionerad tabell. Denna operation ger dig två oberoende tabeller:

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

Remarks

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 sätter SYSTEM_VERSIONING = OFF och inte tar bort SYSTEM_TIME perioden fortsätter systemet att uppdatera periodkolumnerna för varje insättning 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 sätta SYSTEM_VERSIONING = OFF om du har andra objekt skapade med SCHEMABINDING som använder temporala frågeextensioner, såsom referens 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);

Du kan också ta bort perioden om du vill att den temporala tabellen ska återgå till att vara en icke-temporal tabell.

ALTER TABLE dbo.Department
    DROP PERIOD FOR SYSTEM_TIME;

Ta tillfälligt bort SYSTEM_VERSIONING

Följande operationer kräver att du sätter systemversionering 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 systemversionering igen, ange argumentet HISTORY_TABLE . Om du inte gör det skapar systemet en ny historiktabell och kopplar den till den nuvarande tabellen. Den ursprungliga historiktabellen kan fortfarande existera som en vanlig tabell, men den är inte längre kopplad till den nuvarande 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 TRANSACTION;