Arrêt du versioning du système sur une table temporelle avec contrôle de version par le systèmeStopping system-versioning on a system-versioned temporal table

S’applique à :Applies to: ouiSQL Server 2016 (13.x)SQL Server 2016 (13.x)yesSQL Server 2016 (13.x)SQL Server 2016 (13.x) et ultérieures OuiAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database OuiAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed InstanceS’applique à :Applies to: ouiSQL Server 2016 (13.x)SQL Server 2016 (13.x)yesSQL Server 2016 (13.x)SQL Server 2016 (13.x) and later OuiAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database OuiAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance

Vous pouvez interrompre le contrôle des versions sur votre table temporelle temporairement ou définitivement.You may want to stop versioning on your temporal table either temporarily or permanently. Pour ce faire, vous pouvez affecter à la clause SYSTEM_VERSIONING la valeur OFF.You can do that by setting SYSTEM_VERSIONING clause to OFF.

Configuration de SYSTEM_VERSIONING = OFFSetting SYSTEM_VERSIONING = OFF

Arrêtez le contrôle de version du système d’exploitation si vous souhaitez effectuer des opérations de maintenance spécifiques sur la table temporelle ou si vous n’avez plus besoin d’une table avec version.Stop system-versioning if you want to perform specific maintenance operations on temporal table or if you don't need a versioned table anymore. Suite à cette opération, vous obtiendrez deux tables indépendantes :As a result of this operation you will get two independent tables:

  • La table actuelle avec définition de la périodeCurrent table with period definition

  • Une table historique sous la forme d’une table normaleHistory table as a regular table

Remarques importantesImportant remarks

  • La table d’historique va arrêter la capture des mises à jour pendant la durée de SYSTEM_VERSIONING = OFF.History Table will stop caturing the updates for the duration of SYSTEM_VERSIONING = OFF.
  • Aucune perte de données ne se produit sur la table temporaire quand vous définissez SYSTEM_VERSIONING = OFF ou supprimez la période SYSTEM_TIME.No data loss happens on the temporal table when you setSYSTEM_VERSIONING = OFF or drop the SYSTEM_TIME period.
  • Quand vous définissez SYSTEM_VERSIONING = OFF sans supprimer la période SYSTEM_TIME , le système continue à mettre à jour les colonnes de période pour chaque opération d’insertion et de mise à jour.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. Les suppressions effectuées sur la table actuelle sont définitives.Deletes on current table will be permanent.
  • Supprimez la période SYSTEM_TIME pour supprimer les colonnes de période définitivement.Drop the SYSTEM_TIME period to remove the period columns completely.
  • Quand vous définissez SYSTEM_VERSIONING = OFF, tous les utilisateurs disposant des autorisations suffisantes peuvent modifier le schéma et le contenu de la table historique, et même supprimer définitivement la table historique.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.
  • Vous ne pouvez pas définir SYSTEM_VERSIONING = OFF si d’autres objets ont été créés avec SCHEMABINDING à l’aide d’extensions de requête temporelles (telles que le référencement de 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. Cette restriction empêche l’échec de ces objets si vous définissez SYSTEM_VERSIONING = OFF.This restriction prevents these objects from failing if you set SYSTEM_VERSIONING = OFF.

Supprimer définitivement SYSTEM_VERSIONINGPermanently remove SYSTEM_VERSIONING

Cet exemple supprime définitivement SYSTEM_VERSIONING et complètement les colonnes de période.This example permanently removes SYSTEM_VERSIONING and removes the period columns completely. La suppression des colonnes de période est facultative.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;

Supprimer temporairement SYSTEM_VERSIONINGTemporarily remove SYSTEM_VERSIONING

Voici la liste des opérations qui nécessitent la définition du contrôle de version par le système avec la valeur OFF:This is the list of operations that requires system-versioning to be set to OFF:

  • Suppression des données superflues de l’historique (DELETE ou TRUNCATE)Removing unnecessary data from history (DELETE or TRUNCATE)
  • Suppression des données de la table actuelle sans contrôle de version (DELETE, TRUNCATE)Removing data from current table without versioning (DELETE, TRUNCATE)
  • Partition SWITCH OUT à partir de la table actuellePartition SWITCH OUT from current table
  • Partition SWITCH IN dans la table historiquePartition SWITCH IN into history table

Cet exemple arrête temporairement SYSTEM_VERSIONING pour que vous puissiez effectuer des opérations de maintenance spécifiques.This example temporarily stops SYSTEM_VERSIONING to allow you to perform specific maintenance operations. Si vous arrêtez le contrôle de version temporairement à des fins de maintenance de tables, nous vous recommandons vivement d’effectuer cette opération dans une transaction pour préserver la cohérence des données.If you stop versioning temporarily as a prerequisite for table maintenance, we strongly recommend doing this inside a transaction to keep data consistency.

Notes

Quand vous réactivez la gestion système des versions, n’oubliez pas de spécifier l’argument HISTORY_TABLE.When turning system versioning back on, do not forget to specify the HISTORY_TABLE argument. Sinon, une nouvelle table d’historique sera générée et associée à la table actuelle.Failing to do so will result in a new history table being created and associated with the current table. La table d’historique initiale sera conservée comme une table standard, mais elle ne sera pas associée à la table actuelle.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 ;

Étapes suivantesNext steps