Megosztás a következőn keresztül:


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ítsa le a rendszer verziószámozását, ha meghatározott karbantartási műveleteket szeretne végrehajtani egy időbeli táblán, vagy ha már nincs szüksége verziószámozott táblára. A művelet miatt két független táblát kap:

  • 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.

Amikor beállítja a(z) SYSTEM_VERSIONING = OFF értéket, és nem távolítja el a(z) SYSTEM_TIME periódust, a rendszer minden beszúrási és frissítési művelethez frissíti a periódusoszlopokat. 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íthatja be a SYSTEM_VERSIONING = OFF hivatkozást, ha már léteznek más objektumok, amelyeket SCHEMABINDING segítségével hoztak létre ideiglenes lekérdezéskiterjesztések használatával, például SYSTEM_TIME-re hivatkozásként. 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);

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

Ideiglenesen távolítsa el a SYSTEM_VERSIONING

Az alábbi lista azon műveletek listáját tartalmazza, amelyek megkövetelik, hogy a rendszer verziószámozása OFFlegyen:

  • Szükségtelen adatok eltávolítása az előzményekből (DELETE vagy TRUNCATE)
  • Adatok eltávolítása az aktuális táblából verziószámozá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.

A rendszer verziószámozásának visszakapcsolásakor ne felejtse el megadni a HISTORY_TABLE argumentumot. Ennek elmulasztása egy új előzménytáblát hoz létre és társít az aktuális táblához. Az eredeti előzménytábla továbbra is létezhet normál táblaként, és már nincs társítva az aktuális táblával.

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;