Rendszerverziózás leállítása egy rendszer által verziózott temporális táblán

Vonatkozik a következőkre: SQL Server 2016 (13.x) és későbbi verziók Azure SQL DatabaseAzure SQL Managed InstanceSQL database in Microsoft Fabric

Előfordulhat, hogy ideiglenesen vagy véglegesen le szeretné állítani a verziószámozást a temporális táblában. Ezt úgy teheti meg, hogy a SYSTEM_VERSIONING záradékot OFFértékre állítja.

SYSTEM_VERSIONING = KI

Állítsd abba a rendszerverziózást, ha konkrét karbantartási műveleteket akarsz végezni egy időbeli táblán, vagy már nincs szükséged verziózott táblára. Ez a művelet két független táblázatot ad:

  • Aktuális tábla időszak-definícióval
  • Előzménytábla normál táblaként

Remarks

Az előzménytábla megszűnik rögzíteni a frissítéseket a SYSTEM_VERSIONING = OFFsorán.

A temporális táblában nem történik adatvesztés, amikor a SYSTEM_VERSIONING = OFF van beállítva, vagy amikor a SYSTEM_TIME időszakot elvetjük.

Ha beállítod SYSTEM_VERSIONING = OFF és nem hagyod el az SYSTEM_TIME pontot, a rendszer folyamatosan frissíti az időszak oszlopait minden beillesztési és frissítési művelethez. Az aktuális táblában lévő törlések véglegesek.

Az időszakoszlopok törléséhez el kell dobnia a SYSTEM_TIME időszakot. Az időszakoszlopok eltávolításához használja a ALTER TABLE <table> DROP <column>;. További információ: Rendszerverziójú temporális tábla sémájának módosítása.

A SYSTEM_VERSIONING = OFFbeállításakor minden megfelelő engedélyekkel rendelkező felhasználó módosíthatja az előzménytábla sémáját és tartalmát, vagy véglegesen törölheti az előzménytáblát.

Nem állíthatod be a(z) SYSTEM_VERSIONING = OFF értékét, ha vannak más, a(z) SCHEMABINDING használatával létrehozott objektumok, amelyek időbeli lekérdezési bővítményeket használnak, például a(z) SYSTEM_TIME hivatkozásával. Ez a korlátozás megakadályozza, hogy ezek az objektumok meghiúsuljanak, ha beállítja SYSTEM_VERSIONING = OFF.

Véglegesen távolítsa el a SYSTEM_VERSIONING

Ez a példa véglegesen eltávolítja SYSTEM_VERSIONING és törli az időszakoszlopokat. Az időszakoszlopok eltávolítása nem kötelező.

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

Igény esetén elhagyhatja a pontot, ha a temporális táblát nem temporális táblává szeretné visszaállítani.

ALTER TABLE dbo.Department
    DROP PERIOD FOR SYSTEM_TIME;

Ideiglenesen távolítsa el a SYSTEM_VERSIONING

Az alábbi műveletek végrehajtásához a rendszerverziókövetést a következőre kell állítani: OFF

  • Szükségtelen adatok eltávolítása az előzményekből (DELETE vagy TRUNCATE)
  • Adatok eltávolítása a jelenlegi táblából verziózás nélkül (DELETE, TRUNCATE)
  • Partíció SWITCH OUT az aktuális táblából
  • Helyezze át a SWITCH IN partíciót az előzménytáblába.

Ez a példa ideiglenesen leállítja SYSTEM_VERSIONING, hogy lehetővé tegye bizonyos karbantartási műveletek végrehajtását. Ha ideiglenesen leállítja a verziószámozást a táblakarbantartás előfeltételeként, javasoljuk, hogy ezt a módosítást egy tranzakción belül tegye meg az adatkonzisztenciának megőrzése érdekében.

Amikor visszakapcsolod a rendszerverziót, megadd az HISTORY_TABLE argumentumot. Ha nem, a rendszer létrehoz egy új történeti táblát, és összekapcsolja a jelenlegi táblával. Az eredeti történettáblázat továbbra is létezhet normál táblaként, de már nem kapcsolódik a jelenlegi táblához.

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;