Остановка системного управления версиями в темпоральной таблице с системным управлением версиямиStopping system-versioning on a system-versioned temporal table

Применимо к:Applies to: даSQL Server 2016 (13.x);SQL Server 2016 (13.x)yesSQL Server 2016 (13.x);SQL Server 2016 (13.x) и более поздние версии ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL Database ДаУправляемый экземпляр SQL AzureAzure SQL Managed InstanceYesУправляемый экземпляр SQL AzureAzure SQL Managed InstanceПрименимо к:Applies to: даSQL Server 2016 (13.x);SQL Server 2016 (13.x)yesSQL Server 2016 (13.x);SQL Server 2016 (13.x) and later ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL Database ДаУправляемый экземпляр SQL AzureAzure SQL Managed InstanceYesУправляемый экземпляр SQL AzureAzure SQL Managed Instance

Возможно, вам временно или навсегда понадобится остановить управление версиями в темпоральной таблице.You may want to stop versioning on your temporal table either temporarily or permanently. Для этого нужно задать для предложения SYSTEM_VERSIONING значение OFF.You can do that by setting SYSTEM_VERSIONING clause to OFF.

Установка для предложения SYSTEM_VERSIONING значения OFFSetting SYSTEM_VERSIONING = OFF

Остановите системное управление версиями, если в темпоральной таблице нужно провести определенные операции обслуживания или таблица с управлением версиями больше не нужна.Stop system-versioning if you want to perform specific maintenance operations on temporal table or if you don't need a versioned table anymore. В результате этой операции вы получите две отдельные таблицы:As a result of this operation you will get two independent tables:

  • текущую таблицу с определением периода;Current table with period definition

  • прежнюю таблицу в качестве обычной таблицы.History table as a regular table

Важные замечанияImportant remarks

  • Таблица журнала остановит поставку обновлений в течение SYSTEM_VERSIONING = OFF.History Table will stop caturing the updates for the duration of SYSTEM_VERSIONING = OFF.
  • Если задать значение SYSTEM_VERSIONING = OFF или удалить период SYSTEM_TIME, это не приведет к потере данных в темпоральной таблице.No data loss happens on the temporal table when you setSYSTEM_VERSIONING = OFF or drop the SYSTEM_TIME period.
  • Если задать SYSTEM_VERSIONING = OFF и не исключить удаление периода SYSTEM_TIME , система продолжит обновлять столбцы периода при каждой операции вставки и обновления.When you set SYSTEM_VERSIONING = OFF and do not remove drop the SYSTEM_TIME period, the system will continue to update the period columns for every insert and update operation. Элементы, удаленные из текущей таблицы, не подлежат восстановлению.Deletes on current table will be permanent.
  • Удалите период SYSTEM_TIME , чтобы полностью удалить столбцы периода.Drop the SYSTEM_TIME period to remove the period columns completely.
  • Если задать SYSTEM_VERSIONING = OFF, все пользователи с необходимыми разрешениями смогут изменять схему и содержимое прежней таблицы или даже окончательно удалить ее.When you set SYSTEM_VERSIONING = OFF, all users that have sufficient permissions will be able to modify schema and content of history table or even to permanently delete the history table.
  • Нельзя задать SYSTEM_VERSIONING = OFF при наличии других объектов, созданных с помощью SCHEMABINDING, с использованием временных расширений запросов, таких как ссылки SYSTEM_TIME.You cannot set SYSTEM_VERSIONING = OFF if you have other objects created with SCHEMABINDING using temporal query extensions - such as referencing SYSTEM_TIME. Это ограничение предотвращает сбой этих объектов, если задано SYSTEM_VERSIONING = OFF.This restriction prevents these objects from failing if you set SYSTEM_VERSIONING = OFF.

Окончательное удаление SYSTEM_VERSIONINGPermanently remove SYSTEM_VERSIONING

В этом примере окончательно удаляется параметр SYSTEM_VERSIONING и полностью удаляются столбцы периода.This example permanently removes SYSTEM_VERSIONING and removes the period columns completely. Удалять столбцы периода необязательно.Removing the period columns is optional.

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_VERSIONINGTemporarily remove SYSTEM_VERSIONING

Это список операций, которые требуют, чтобы для системного управления версиями было задано значение OFF:This is the list of operations that requires system-versioning to be set to OFF:

  • удаление ненужных данных из журнала (DELETE или TRUNCATE);Removing unnecessary data from history (DELETE or TRUNCATE)
  • удаление данных из текущей таблицы без управления версиями (DELETE, TRUNCATE);Removing data from current table without versioning (DELETE, TRUNCATE)
  • секционирование SWITCH OUT из текущей таблицы;Partition SWITCH OUT from current table
  • секционирование SWITCH IN в прежнюю таблицу.Partition SWITCH IN into history table

В этом примере действие SYSTEM_VERSIONING временно прекращается для выполнения определенных операций обслуживания.This example temporarily stops SYSTEM_VERSIONING to allow you to perform specific maintenance operations. Если необходимо временно остановить управление версиями для обслуживания таблицы, настоятельно рекомендуем делать это в ходе транзакции, чтобы обеспечить согласованность данных.If you stop versioning temporarily as a prerequisite for table maintenance, we strongly recommend doing this inside a transaction to keep data consistency.

Примечание

При повторном включении системного управления версиями не забудьте указать аргумент HISTORY_TABLE.When turning system versioning back on, do not forget to specify the HISTORY_TABLE argument. Невыполнение этого требования приведет к созданию новой таблицы журнала, которая связывается с текущей таблицей.Failing to do so will result in a new history table being created and associated with the current table. Исходная таблица журнала по-прежнему будет существовать как обычная таблица, но не будет связана с текущей таблицей.The original history table will still exist as a normal table, but won't be associated with the current 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 ;

Дальнейшие действияNext steps