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