Остановка системного управления версиями в темпоральной таблице с системным управлением версиями

Применимо к: SQL Server 2016 (13.x) и более поздних версий Azure SQL Database Управляемый экземпляр SQL Azure

Возможно, вам временно или навсегда понадобится остановить управление версиями в темпоральной таблице. Для этого нужно задать для предложения SYSTEM_VERSIONING значение OFF.

Установка для предложения SYSTEM_VERSIONING значения OFF

Остановите системное управление версиями, если в темпоральной таблице нужно провести определенные операции обслуживания или таблица с управлением версиями больше не нужна. В результате этой операции вы получите две отдельные таблицы:

  • текущую таблицу с определением периода;

  • прежнюю таблицу в качестве обычной таблицы.

Важные замечания

  • В таблице журнала прекращается запись обновлений, пока задано значение SYSTEM_VERSIONING = OFF.
  • При установке SYSTEM_VERSIONING = OFF или удалении периода SYSTEM_TIME в темпоральной таблице не происходит потери данных.
  • Если задать значение SYSTEM_VERSIONING = OFF и не исключить удаление периода SYSTEM_TIME, система продолжит обновлять столбцы периода при каждой операции вставки и обновления. Элементы, удаленные из текущей таблицы, не подлежат восстановлению.
  • Удалите период SYSTEM_TIME, чтобы удалить столбцы периода.
  • Если задать значение SYSTEM_VERSIONING = OFF, то все пользователи с необходимыми разрешениями смогут изменять схему и содержимое таблицы журнала и даже окончательно удалить ее.
  • Вы не можете задать значение SYSTEM_VERSIONING = OFF при наличии других объектов, созданных с помощью SCHEMABINDING, с использованием временных расширений запросов, таких как ссылки на SYSTEM_TIME. Это ограничение предотвращает сбой этих объектов, если задано SYSTEM_VERSIONING = OFF.

Окончательное удаление SYSTEM_VERSIONING

В этом примере окончательно удаляется параметр SYSTEM_VERSIONING и удаляются столбцы периода. Удалять столбцы периода необязательно.

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;

Временное удаление SYSTEM_VERSIONING

Это список операций, которые требуют, чтобы для системного управления версиями было задано значение OFF:

  • удаление ненужных данных из журнала (DELETE или TRUNCATE);
  • удаление данных из текущей таблицы без управления версиями (DELETE, TRUNCATE);
  • секционирование SWITCH OUT из текущей таблицы;
  • секционирование SWITCH IN в таблицу журнала.

В этом примере действие SYSTEM_VERSIONING временно прекращается для выполнения определенных операций обслуживания. Если необходимо временно остановить управление версиями для обслуживания таблицы, настоятельно рекомендуем делать это в ходе транзакции, чтобы обеспечить согласованность данных.

Примечание

При повторном включении системного управления версиями не забудьте указать аргумент HISTORY_TABLE. Невыполнение этого требования приведет к созданию новой таблицы журнала, которая связывается с текущей таблицей. Исходная таблица журнала по-прежнему будет существовать как обычная таблица, но не будет связана с текущей таблицей.

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 ;

Дальнейшие действия