Freigeben über


Beenden der Versionsverwaltung in einer temporalen Tabelle mit Systemversionsverwaltung

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

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

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

Hinweise

Die Verlaufstabelle stoppt die Erfassung der Aktualisierungen während SYSTEM_VERSIONING = OFF.

Bei einer temporalen Tabelle tritt kein Datenverlust auf, wenn Sie SYSTEM_VERSIONING = OFF festlegen oder den Zeitraum für SYSTEM_TIME 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.

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.

Sie können SYSTEM_VERSIONING = OFF nicht festlegen, wenn Sie mithilfe temporaler Abfrageerweiterungen andere Objekte mit SCHEMABINDING erstellt haben,wie z. B. 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

Die folgende Liste enthält die Vorgänge, für die die Systemversionsverwaltung auf OFF festgelegt 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, diese Änderung für die Datenkonsistenz innerhalb einer Transaktion vorzunehmen.

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 mehr zugeordnet.

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;