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

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

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

Установить SYSTEM_VERSIONING = OFF

Прекратите версионирование системы, если хотите выполнять конкретные операции по обслуживанию временной таблицы или вам больше не нужна версия. Эта операция даёт вам две независимые таблицы:

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

Remarks

Таблица истории перестает записывать обновления во время 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);

При необходимости удалите точку, чтобы преобразовать временную таблицу обратно в невременную.

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 TRANSACTION;