Beenden der Versionsverwaltung in einer temporalen Tabelle mit Systemversionsverwaltung

Gilt für: SQL Server 2016 (13.x) und höher Azure SQL-DatenbankAzure SQL Managed Instance

Möglicherweise möchten Sie die Versionsverwaltung Ihrer temporalen Tabelle vorübergehend oder dauerhaft beenden. Legen Sie hierzu die SYSTEM_VERSIONING-Klausel auf OFF fest.

Festlegen von SYSTEM_VERSIONING = OFF

Beenden Sie die Systemversionsverwaltung, wenn Sie bestimmte Wartungsvorgänge für eine temporäre Tabelle ausführen möchten, oder wenn Sie eine Tabelle mit Versionsverwaltung nicht mehr benötigen. Durch diesen Vorgang erhalten Sie zwei voneinander unabhängige Tabellen:

  • Aktuelle Tabelle mit einer Punktdefinition

  • Verlaufstabelle als normale Tabelle

Wichtige Hinweise

  • Die Verlaufstabelle beendet die Erfassung der Updates während SYSTEM_VERSIONING = OFF.
  • Es tritt kein Datenverlust in der temporalen Tabelle auf, wenn Sie SYSTEM_VERSIONING = OFF festlegen oder den SYSTEM_TIME Zeitraum löschen.
  • Wenn Sie SYSTEM_VERSIONING = OFF festlegen und den SYSTEM_TIME-Zeitraum nicht löschen, setzt das System die Aktualisierung der Zeitraumspalten für jeden Einfüge- und Aktualisierungsvorgang fort. Löschungen in der aktuellen Tabelle sind dauerhaft.
  • Löschen Sie den SYSTEM_TIME-Zeitraum, um die Zeitraumspalten zu löschen.
  • Wenn Sie SYSTEM_VERSIONING = OFF festlegen, können alle Benutzer mit ausreichenden Berechtigungen das Schema und den Inhalt der Verlaufstabelle ändern oder diese sogar endgültig löschen.
  • Sie können SYSTEM_VERSIONING = OFF nicht festlegen, wenn Sie mithilfe temporaler Abfrageerweiterungen andere Objekte mit SCHEMABINDING erstellt haben (z. B. durch Verweise auf SYSTEM_TIME). Diese Einschränkung verhindert, dass es bei diesen Objekten zu Fehlern kommt, wenn Sie SYSTEM_VERSIONING = OFF festlegen.

Dauerhaftes Entfernen von SYSTEM_VERSIONING

In diesem Beispiel wird SYSTEM_VERSIONING endgültig entfernt, und die Zeitraumspalten werden gelöscht. Das Entfernen der Zeitraumspalten ist optional.

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;

Vorübergehendes Entfernen von SYSTEM_VERSIONING

Dies ist die Liste der Vorgänge, für die die Systemversionsverwaltung auf OFFfestgelegt werden muss:

  • Entfernen unnötiger Daten aus dem Verlauf (DELETE oder TRUNCATE)
  • Entfernen von Daten aus der aktuellen Tabelle ohne Versionsverwaltung (DELETE, TRUNCATE)
  • Partition SWITCH OUT aus der aktuellen Tabelle
  • Partition SWITCH IN in die Verlaufstabelle

In diesem Beispiel wird SYSTEM_VERSIONING vorübergehend beendet, um bestimmte Wartungsvorgänge zu erlauben. Wenn Sie Versionsverwaltung als Voraussetzung für die Tabellenwartung vorübergehend beenden, empfehlen wir nachdrücklich, dies für die Datenkonsistenz innerhalb einer Transaktion durchzuführen.

Hinweis

Wenn Sie die Systemversionsverwaltung wieder aktivieren, vergessen Sie nicht, das Argument „HISTORY_TABLE“ anzugeben. Andernfalls wird eine neue Verlaufstabelle erstellt und der aktuellen Tabelle zugeordnet. Die ursprüngliche Verlaufstabelle kann dann weiterhin als normale Tabelle vorhanden sein, wird der aktuellen Tabelle aber nicht zugeordnet.

BEGIN TRAN
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 ;

Nächste Schritte