Udostępnij za pośrednictwem


Zatrzymaj wersjonowanie systemowe w tabeli tymczasowej z wersjonowaniem systemowym

Dotyczy: SQL Server 2016 (13.x) i nowsze wersje Azure SQL DatabaseAzure SQL Managed InstanceSQL Database w usłudze Microsoft Fabric

Możesz zaprzestać wersjonowania w tabeli czasowej czasowo lub trwale. Można to zrobić, ustawiając klauzulę SYSTEM_VERSIONING na wartość OFF.

Ustaw SYSTEM_VERSIONING na WYŁĄCZONE

Zatrzymaj wersjonowanie systemu, jeśli chcesz wykonać specyficzne operacje konserwacyjne w tabeli temporalnej lub nie potrzebujesz już tabeli z wersjonowaniem. Ze względu na tę operację uzyskujesz dwie niezależne tabele:

  • Aktualna tabela z definicją okresu
  • Tabela historii jako zwykła tabela

Uwagi

Tabela historii zatrzymuje przechwytywanie aktualizacji podczas SYSTEM_VERSIONING = OFF.

Żadna utrata danych nie występuje w tabeli czasowej podczas ustawiania SYSTEM_VERSIONING = OFF lub porzucania okresu SYSTEM_TIME.

Po ustawieniu SYSTEM_VERSIONING = OFF i nie usunięciu okresu SYSTEM_TIME system nadal aktualizuje kolumny okresu dla każdej operacji wstawiania i aktualizacji. Usunięcia w bieżącej tabeli są trwałe.

Aby usunąć kolumny okresu, należy usunąć okres SYSTEM_TIME. Aby usunąć kolumny z kropkami, użyj ALTER TABLE <table> DROP <column>;. Aby uzyskać więcej informacji, zobacz Zmienianie schematu tabeli czasowej w wersji systemowej.

Po ustawieniu SYSTEM_VERSIONING = OFFwszyscy użytkownicy z wystarczającymi uprawnieniami mogą modyfikować schemat i zawartość tabeli historii, a nawet trwale usuwać tabelę historii.

Nie można ustawić SYSTEM_VERSIONING = OFF, jeśli masz inne obiekty utworzone za pomocą SCHEMABINDING przy użyciu rozszerzeń zapytań czasowych, takich jak odwoływanie się do SYSTEM_TIME. To ograniczenie uniemożliwia niepowodzenie tych obiektów w przypadku ustawienia SYSTEM_VERSIONING = OFF.

Trwałe usuwanie SYSTEM_VERSIONING

Ten przykład trwale usuwa SYSTEM_VERSIONING i usuwa kolumny okresu. Usunięcie kolumn z kropkami jest opcjonalne.

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;

Tymczasowo usuń SYSTEM_VERSIONING

Poniższa lista zawiera listę operacji, które wymagają ustawienia przechowywania wersji systemu na OFF:

  • Usuwanie niepotrzebnych danych z historii (DELETE lub TRUNCATE)
  • Usuwanie danych z bieżącej tabeli bez przechowywania wersji (DELETE, TRUNCATE)
  • Partycja SWITCH OUT z bieżącej tabeli
  • Wstawienie partycji SWITCH IN do tabeli historii

Ten przykład tymczasowo zatrzymuje SYSTEM_VERSIONING, aby umożliwić wykonywanie określonych operacji konserwacji. Jeśli tymczasowo zatrzymasz przechowywanie wersji jako wymaganie wstępne dotyczące konserwacji tabeli, zdecydowanie zalecamy wykonanie tej zmiany wewnątrz transakcji, aby zachować spójność danych.

Podczas ponownego włączania wersji systemu nie zapomnij określić argumentu HISTORY_TABLE. Niedopełnienie tego powoduje, że zostaje utworzona nowa tabela historii, która jest skojarzona z bieżącą tabelą. Oryginalna tabela historii może nadal istnieć jako zwykła tabela, nie jest już skojarzona z bieżącą tabelą.

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;