Поделиться через


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

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

Возможно, вы захотите прекратить управление версиями в темпоральной таблице либо временно, либо навсегда. Это можно сделать, установив условие 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;