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

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

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

Установка SYSTEM_VERSIONING = OFF

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

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

Замечания

Таблица журнала перестает записывать обновления во время SYSTEM_VERSIONING = OFF.

При установке SYSTEM_VERSIONING = OFF или удалении SYSTEM_TIME периода не происходит потери данных в темпоральной таблице.

Если вы устанавливаете SYSTEM_VERSIONING = OFF и не удаляете SYSTEM_TIME период, система продолжает обновлять столбцы периодов для каждой операции вставки и обновления. Элементы, удаленные из текущей таблицы, не подлежат восстановлению.

Для удаления столбцов периода необходимо удалить SYSTEM_TIME период. Чтобы удалить столбцы периода, используйте ALTER TABLE <table> DROP <column>;. Дополнительные сведения см. в разделе "Изменение схемы системной темпоральной таблицы".

При установке 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 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;