Systemversionierung für eine systemversionierte temporale Tabelle beenden

Gilt für: SQL Server 2016 (13.x) und spätere Versionen Azure SQL-DatenbankAzure SQL Managed InstanceSQL database in Microsoft Fabric

Möglicherweise möchten Sie die Versionsverwaltung Ihrer temporalen Tabelle vorübergehend oder dauerhaft beenden. Sie können dazu die SYSTEM_VERSIONING-Klausel auf OFF festlegen.

Festlegen von SYSTEM_VERSIONING = OFF

Hören Sie mit der Systemversionierung auf, wenn Sie bestimmte Wartungsoperationen an einer temporalen Tabelle durchführen möchten oder keine versionierte Tabelle mehr benötigen. Diese Operation ergibt Ihnen zwei unabhängige Tabellen:

  • Aktuelle Tabelle mit einer Periodendefinition
  • Verlaufstabelle als reguläre Tabelle

Bemerkungen

Die Verlaufstabelle erfasst während SYSTEM_VERSIONING = OFF keine Aktualisierungen mehr.

Bei einer temporalen Tabelle tritt kein Datenverlust auf, wenn Sie SYSTEM_VERSIONING = OFF festlegen oder den Zeitraum für SYSTEM_TIME löschen.

Wenn du SYSTEM_TIME festlegst und den Zeitraum SYSTEM_VERSIONING = OFF nicht löschst, aktualisiert das System die Zeitraumspalten weiterhin bei jedem Einfüge- und Aktualisierungsvorgang. Löschungen in der aktuellen Tabelle sind dauerhaft.

Sie müssen den SYSTEM_TIME-Zeitraum löschen, um die Zeitraumspalten zu löschen. Verwenden Sie ALTER TABLE <table> DROP <column>; zum Entfernen der Zeitraumspalten. Weitere Informationen finden Sie unter Ändern des Schemas einer temporalen Tabelle mit Systemversionsverwaltung.

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.

Du kannst SYSTEM_VERSIONING = OFF nicht festlegen, wenn du andere mit SCHEMABINDING erstellte Objekte hast, die temporale Abfrageerweiterungen verwenden, z. B. durch Verweisen 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);

Optional kannst du den Zeitraum weglassen, wenn du die zeitliche Tabelle wieder in eine nicht-zeitliche Tabelle zurücksetzen möchtest.

ALTER TABLE dbo.Department
    DROP PERIOD FOR SYSTEM_TIME;

Vorübergehendes Entfernen von SYSTEM_VERSIONING

Die folgenden Operationen erfordern, dass Sie Systemversionierung auf OFFsetzen:

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

In diesem Beispiel wird SYSTEM_VERSIONING vorübergehend angehalten, damit Sie bestimmte Wartungsarbeiten durchführen können. Wenn Sie Versionsverwaltung als Voraussetzung für die Tabellenwartung vorübergehend beenden, empfehlen wir nachdrücklich, diese Änderung für die Datenkonsistenz innerhalb einer Transaktion vorzunehmen.

Wenn Sie Systemversionierung wieder aktivieren, geben Sie das Argument HISTORY_TABLE an. Falls nicht, erstellt das System eine neue Verlaufstabelle und verknüpft sie mit der aktuellen Tabelle. Die ursprüngliche Verlaufstabelle kann weiterhin als normale Tabelle existieren, ist aber nicht mehr mit der aktuellen Tabelle verknüpft.

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;