Остановка системного управления версиями в системной темпоральной таблице
Область применения: 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;
Связанный контент
- Темпоральные таблицы
- Начало работы с системными темпоральными таблицами
- Управление хранением исторических данных в системных темпоральных таблицах
- Системные темпоральные таблицы с оптимизированными для памяти таблицами
- Создание системной темпоральной таблицы
- Изменение данных в системной темпоральной таблице
- Запрос данных в системной темпоральной таблице
- Изменение схемы системной темпоральной таблицы